diff --git a/.github/workflows/firmware-desfire-push.yml b/.github/workflows/firmware-desfire-push.yml index ac3d5e52..a351e591 100644 --- a/.github/workflows/firmware-desfire-push.yml +++ b/.github/workflows/firmware-desfire-push.yml @@ -29,7 +29,7 @@ jobs: run: mv Chameleon-Mini-CustomBuild_DESFire.eep $GITHUB_WORKSPACE/FirmwareBuild/ working-directory: Firmware/Chameleon-Mini/ - name: Upload Build Artifact to Action - uses: actions/upload-artifact@v2.1.4 + uses: actions/upload-artifact@v4 with: name: "ChameleonBuild" path: "FirmwareBuild/**" diff --git a/.github/workflows/firmware-iso15693-push.yml b/.github/workflows/firmware-iso15693-push.yml index 63dd5854..8604d48d 100644 --- a/.github/workflows/firmware-iso15693-push.yml +++ b/.github/workflows/firmware-iso15693-push.yml @@ -29,7 +29,7 @@ jobs: run: mv Chameleon-Mini-CustomBuild_ISO15693.eep $GITHUB_WORKSPACE/FirmwareBuild/ working-directory: Firmware/Chameleon-Mini/ - name: Upload Build Artifact to Action - uses: actions/upload-artifact@v2.1.4 + uses: actions/upload-artifact@v4 with: name: "ChameleonBuild" path: "FirmwareBuild/**" diff --git a/.github/workflows/firmware-pr.yml b/.github/workflows/firmware-pr.yml index 3241e7bc..f015da90 100644 --- a/.github/workflows/firmware-pr.yml +++ b/.github/workflows/firmware-pr.yml @@ -30,7 +30,7 @@ jobs: run: mv Chameleon*.eep $GITHUB_WORKSPACE/FirmwareBuild/ working-directory: Firmware/Chameleon-Mini/ - name: Upload Build Artifact to Action - uses: actions/upload-artifact@v2.1.4 + uses: actions/upload-artifact@v4 with: name: "ChameleonBuild" path: "FirmwareBuild/**" diff --git a/.github/workflows/firmware-push.yml b/.github/workflows/firmware-push.yml index ea4ccbba..68fee005 100644 --- a/.github/workflows/firmware-push.yml +++ b/.github/workflows/firmware-push.yml @@ -29,7 +29,7 @@ jobs: run: mv Chameleon*.eep $GITHUB_WORKSPACE/FirmwareBuild/ working-directory: Firmware/Chameleon-Mini/ - name: Upload Build Artifact to Action - uses: actions/upload-artifact@v2.1.4 + uses: actions/upload-artifact@v4 with: name: "ChameleonBuild" path: "FirmwareBuild/**" diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..933a0e4c --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +*.swp +*.code +*.temp +*.o +*.a +*.exe diff --git a/Doc/DESFireSupportReadme.md b/Doc/DESFireSupportReadme.md index b2c9fd7e..9f4be976 100644 --- a/Doc/DESFireSupportReadme.md +++ b/Doc/DESFireSupportReadme.md @@ -58,14 +58,14 @@ DF_SETHDR=ATQA 2838 /* Other HW product types for DESFire tags: See page 7 of * https://www.nxp.com/docs/en/application-note/AN12343.pdf */ -// typedef enum DESFIRE_FIRMWARE_ENUM_PACKING { -// NATIVEIC_PHYS_CARD = 0x01, -// LIGHT_NATIVEIC_PHYS_CARD = 0x08, -// MICROCONTROLLER_PHYS_CARDI = 0x81, -// MICROCONTROLLER_PHYS_CARDII = 0x83, -// JAVACARD_SECURE_ELEMENT_PHYS_CARD = 0x91, -// HCE_MIFARE_2GO = 0xa1, -// } DESFireHWProductCodes; +typedef enum DESFIRE_FIRMWARE_ENUM_PACKING { + NATIVEIC_PHYS_CARD = 0x01, + LIGHT_NATIVEIC_PHYS_CARD = 0x08, + MICROCONTROLLER_PHYS_CARDI = 0x81, + MICROCONTROLLER_PHYS_CARDII = 0x83, + JAVACARD_SECURE_ELEMENT_PHYS_CARD = 0x91, + HCE_MIFARE_2GO = 0xa1, +} DESFireHWProductCodes; ``` An up-to-date listing of bytes that indicate the tag manufacturer ID is found in the [Proxmark3 client source](https://github.com/RfidResearchGroup/proxmark3/blob/65b9a9fb769541f5d3e255ccf2c17d1cb77ac126/client/src/cmdhf14a.c#L48): @@ -210,13 +210,18 @@ fingerprint the DESFire tag subtype in the return NTAG413DNA; return DESFIRE_UNKNOWN; ``` -Table 2 in section 2.1 of [NXP AN10833](https://www.nxp.com/docs/en/application-note/AN10833.pdf) (page 5) lists -standard Mifare tag identifications for several tags. This byte is represented by setting -``Picc.HwType`` using the Chameleon terminal command ``DF_SETHDR=HwType xx``. The default setting for the -Chameleon DESFire tags is ``0x01`` (*MIFARE DESFire*). The table in the application note is reproduced -below for reference. The NXP documentation says: "*The upper nibble [X] defines if the -device is a native MIFARE IC (``0x0``), an implementation (``0x8``), an applet on a Java Card -(``0x9``) or MIFARE 2GO (``0xA``).*" +Table 2 in section 2.1 of +[NXP AN10833](https://www.nxp.com/docs/en/application-note/AN10833.pdf) (page 5) +listsstandard Mifare tag identifications for several tags. +This byte is represented by setting +``Picc.HwType`` using the Chameleon terminal command +``DF_SETHDR=HwType xx``. The default setting for the +Chameleon DESFire tags is ``0x01`` (*MIFARE DESFire*). +The table in the application note is reproduced +below for reference. The NXP documentation says: +"*The upper nibble [X] defines if the +device is a native MIFARE IC (``0x0``), an implementation (``0x8``), +an applet on a Java Card (``0x9``) or MIFARE 2GO (``0xA``).*" | Second Byte of GetVersion Response (``Picc.HwType``) | NXP Type Tag | | :---: | :-- | @@ -229,20 +234,51 @@ device is a native MIFARE IC (``0x0``), an implementation (``0x8``), an applet o | ``0xX7`` | *NTAG I2C* | | ``0xX8`` | *MIFARE DESFire Light* | +##### Building custom DESFire tag emulation support + +The PICC header parameters defined / set through the ``DF_SETHDR`` commands above +can be specified as defaults in the DESFire firmware builds. +The files in the directory ``Firmware/Chameleon-Mini/DESFireCustomConfig/*.cfg`` +specify a few custom tag PICC configurations. To build the Chameleon Mini +firmware with one of these defaults, run the following commands: +```bash +$ cd ChameleonMini/Firmware/Chameleon-Mini +$ cp DESFireCustomConfig/.cfg DESFireCustomConfig/desfire-custom-config.cfg +$ make clean && make desfire-custom-tag +``` +Then flash the Chameleon Mini RevG device with the firmware binaries +using ``avrdude`` (or equivalent) +[as usual (described here)](https://raw.githubusercontent.com/emsec/ChameleonMini/refs/heads/master/Doc/Doxygen/html/Page_GettingStarted.html). + +Other information about PICC settings and specifications for NFC tags are available at the +following links: +* [Interoperability Specification for ICCs and Personal Computer Systems (pdf)](https://pcscworkgroup.com/Download/Specifications/pcsc3_v2.01.09_sup.pdf) +* [Complete list of Application Identifiers (AID)](https://www.eftlab.com/knowledge-base/complete-list-of-application-identifiers-aid) +* [Complete list of ATRs](https://www.eftlab.com/knowledge-base/complete-list-of-atrs) + #### DF_COMM_MODE -- Manually sets the communication mode of the current session -The supported (work in progress) DESFire communication modes include: -PLAINTEXT, PLAINTEXT-MAC, ENCIPHERED-CMAC-3DES, and ENCIPHERED-CMAC-AES128. +The supported communication modes include: +``PLAINTEXT``, ``PLAINTEXT-MAC``, ``ENCIPHERED-CMAC-3DES``, and +``ENCIPHERED-CMAC-AES128`` (built-in hardware AES support). +If the DESFire build is configured with +``SETTINGS += -DENABLE_DESFIRE_AES_EXTENDED``, and +[Gallagher support](https://github.com/emsec/ChameleonMini/blob/master/Doc/DESFireGallagherReadme.md) +is disabled, then we also have the software-based communication modes: +``ENCIPHERED-CMAC-AES192`` and ``ENCIPHERED-CMAC-AES-256``. It should be clear from the prior commands issued in the session which ``CommMode`` congiguration we are supposed to be working within. This command let's the user reset it intentionally at will for testing and debugging purposes. -The syntax is as follows: +The syntax for setting the communication mode using the Chameleon +terminal command line is as follows: ```bash DF_COMM_MODE=Plaintext DF_COMM_MODE=Plaintext:MAC DF_COMM_MODE=Enciphered:3K3DES DF_COMM_MODE=Enciphered:AES128 +DF_COMM_MODE=Enciphered:AES192 +DF_COMM_MODE=Enciphered:AES256 ``` Use of this experimental command may cause unexpected results, vulnerabilities exposing your keys and sensitive (a priori) protected data to hackers and sniffers, and is @@ -253,7 +289,7 @@ to the defaults. #### DF_COMM_MODE -- Manually sets the communication mode of the current session -This commanf sets the encryption mode for cryptographic operations. +This command sets the encryption mode for cryptographic operations. The two supported modes are ECB and CBC. The default mode for AES and DES (all types) of encryption is ECB mode. This is the supported mode for DESFire tags using the latest Proxmark3 software. @@ -267,6 +303,25 @@ DF_ENCMODE=CBC DF_ENCMODE=DES:CBC DF_ENCMODE=AES:CBC ``` +Note that the standard AES encryption mode ``CTR`` is *NOT* supported. + +#### DF_KEYSCRUB -- Overwrite the encryption keys with random bytes to "scrub" + +The syntax is as follows: +```bash +# Overwrites the key and IV buffers with random bytes x1 times. +# Call the command multiple times to get the desired number of overwrites: +DF_KEYSCRUB +``` + +#### DESFire Gallagher application commands + +Support for Gallagher application emulation is enabled in +``Firmware/Chameleon-Mini/Makefile`` by uncommenting the following +feature: ``SETTINGS += -DENABLE_DESFIRE_GALLAGHER -UENABLE_DESFIRE_AES_EXTENDED``. +Documentation for the Chameleon terminal commands written by +*@tomaspre* to configure Gallagher support is +[found here](https://github.com/emsec/ChameleonMini/blob/master/Doc/DESFireGallagherReadme.md). ## Supported functionality @@ -539,7 +594,8 @@ for development of this project: project as a Ph.D. candidate over the Summer and Fall of 2020. * More work to improve and add compatibility with the PM3 devices over the Spring of 2022 was supported by Georgia Tech to work as a RA through the university COVID-19 relief funding. -* The [KAOS manufacturers](https://shop.kasper.it) for providing support in the form of discounted Chameleon RevG +* The [KAOS manufacturers](https://shop.kasper.it) for providing support in the + form of free and discounted Chameleon RevG devices to support my active development on the project. ### Sources of external code and open information about the DESFire specs diff --git a/Firmware/Chameleon-Mini/Application/CryptoAESExtended.c b/Firmware/Chameleon-Mini/Application/CryptoAESExtended.c new file mode 100644 index 00000000..599495ca --- /dev/null +++ b/Firmware/Chameleon-Mini/Application/CryptoAESExtended.c @@ -0,0 +1,568 @@ +/* +The DESFire stack portion of this firmware source +is free software written by Dr. Maxie Dion Schmidt (@maxieds): +You can redistribute it and/or modify +it under the terms of this license. + +This program 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. + +The complete source distribution of +this firmware is available at the following link: +https://github.com/maxieds/ChameleonMiniFirmwareDESFireStack. + +Based in part on the original DESFire code created by +@dev-zzo (GitHub handle) [Dmitry Janushkevich] available at +https://github.com/dev-zzo/ChameleonMini/tree/desfire. + +This notice must be retained at the top of all source files where indicated. +*/ + +/* + * CryptoAESExtended.h : + * Maxie D. Schmidt (github.com/maxieds) + */ + +/* + * NOTE: These (two) source files implement software-based AES-192 and + * AES-256 encryption routines. The source is heavily based on the + * project (with the top level repo "unlicense.txt" license): + * https://github.com/kokke/tiny-AES-c + */ + +#if defined(CONFIG_MF_DESFIRE_SUPPORT) && defined(ENABLE_DESFIRE_AES_EXTENDED) + +#include + +#include "CryptoAESExtended.h" +#include "CryptoAES128.h" + +// The number of columns comprising a state in AES. This is a constant in AES. +#define Nb (4) + +uint8_t CryptoType = _CRYPTO_TYPE_AES192; +uint8_t Nk = 6; +uint8_t Nr = 12; +uint8_t AES_KEYLEN = 24; +uint8_t AES_keyExpSize = 208; +AES_ctx_t AES_ctx; +uint8_t RoundKey[CRYPTO_AES_MAX_KEY_EXPSIZE]; +uint8_t IV[AES_BLOCKLEN]; + +// state - array holding the intermediate results during decryption. +typedef uint8_t state_t[4][4]; + +// The lookup-tables are marked const so they can be placed in read-only storage instead of RAM +// The numbers below can be computed dynamically trading ROM for RAM - +// This can be useful in (embedded) bootloader applications, where ROM is often limited. +const uint8_t SBox[256] = { + //0 1 2 3 4 5 6 7 8 9 A B C D E F + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, + 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, + 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, + 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, + 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, + 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, + 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, + 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, + 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, + 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 +}; + + +const uint8_t RSBox[256] = { + 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, + 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, + 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, + 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, + 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, + 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, + 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, + 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, + 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, + 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, + 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, + 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, + 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, + 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, + 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d +}; + +/* + * Jordan Goulder points out in PR #12 (https://github.com/kokke/tiny-AES-C/pull/12), + * that you can remove most of the elements in the Rcon array, because they are unused. + * + * From Wikipedia's article on the Rijndael key schedule @ + * https://en.wikipedia.org/wiki/Rijndael_key_schedule#Rcon + * + * "Only the first some of these constants are actually used – up to rcon[10] for + * AES-128 (as 11 round keys are needed), + * up to rcon[8] for AES-192, up to rcon[7] for AES-256. rcon[0] is not used in AES algorithm." + */ + +// The round constant word array, Rcon[i], contains the values given by +// x to the power (i-1) being powers of x (x is denoted as {02}) in the field GF(2^8) +const uint8_t RCon[11] = { + 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36 +}; + +void SetupLocalAESContext(AES_ctx_t *ctx, uint8_t cryptoType, uint8_t cryptoMode) { + if (cryptoType == _CRYPTO_TYPE_AES192) { + ctx->Nk = 6; + ctx->Nr = 12; + ctx->KeySize = 24; + ctx->KeyExpSize = 208; + } else if (cryptoType == _CRYPTO_TYPE_AES256) { + ctx->Nk = 8; + ctx->Nr = 14; + ctx->KeySize = 32; + ctx->KeyExpSize = 240; + } else { // Defaults to AES-128: + ctx->Nk = 4; + ctx->Nr = 10; + ctx->KeySize = 16; + ctx->KeyExpSize = 176; + } + ctx->CryptoMode = cryptoMode; + ctx->RoundKey = &RoundKey[0]; + ctx->Iv = &IV[0]; + CryptoType = cryptoType; + Nk = ctx->Nk; + Nr = ctx->Nr; + AES_KEYLEN = ctx->KeySize; + AES_keyExpSize = ctx->KeyExpSize; +} + +uint8_t AESEncryptBuffer(const AES_ctx_t *ctx, uint8_t *buf, int bufLength) { + if (ctx->CryptoMode == CRYPTO_AES_ECB_MODE) { + AES_ECB_encrypt(ctx, buf); + } else { // CBC mode assumed: + if ((bufLength % AES_BLOCKLEN) != 0) { + return CRYPTO_AES_EXIT_UNEVEN_BLOCKS; // 0xBE ??? + } + AES_CBC_encrypt_buffer(ctx, buf, bufLength); + } + return CRYPTO_AES_EXIT_SUCCESS; +} + +uint8_t AESDecryptBuffer(const AES_ctx_t *ctx, uint8_t *buf, int bufLength) { + if (ctx->CryptoMode == CRYPTO_AES_ECB_MODE) { + AES_ECB_decrypt(ctx, buf); + } else { // CBC mode assumed: + if ((bufLength % AES_BLOCKLEN) != 0) { + return CRYPTO_AES_EXIT_UNEVEN_BLOCKS; // 0xBE ??? + } + AES_CBC_decrypt_buffer(ctx, buf, bufLength); + } + return CRYPTO_AES_EXIT_SUCCESS; +} + +/*****************************************************************************/ +/* Private functions: */ +/*****************************************************************************/ + +#define getSBoxValue(num) (SBox[(num)]) + +// This function produces Nb(Nr+1) round keys. The round keys are used in +// each round to decrypt the states. +static void KeyExpansion(uint8_t* RoundKey, const uint8_t* Key) +{ + unsigned i, j, k; + uint8_t tempa[4]; // Used for the column/row operations + + // The first round key is the key itself. + for (i = 0; i < Nk; ++i) + { + RoundKey[(i * 4) + 0] = Key[(i * 4) + 0]; + RoundKey[(i * 4) + 1] = Key[(i * 4) + 1]; + RoundKey[(i * 4) + 2] = Key[(i * 4) + 2]; + RoundKey[(i * 4) + 3] = Key[(i * 4) + 3]; + } + + // All other round keys are found from the previous round keys. + for (i = Nk; i < Nb * (Nr + 1); ++i) + { + { + k = (i - 1) * 4; + tempa[0]=RoundKey[k + 0]; + tempa[1]=RoundKey[k + 1]; + tempa[2]=RoundKey[k + 2]; + tempa[3]=RoundKey[k + 3]; + + } + + if (i % Nk == 0) + { + // This function shifts the 4 bytes in a word to the left once. + // [a0,a1,a2,a3] becomes [a1,a2,a3,a0] + + // Function RotWord() + { + const uint8_t u8tmp = tempa[0]; + tempa[0] = tempa[1]; + tempa[1] = tempa[2]; + tempa[2] = tempa[3]; + tempa[3] = u8tmp; + } + + // SubWord() is a function that takes a four-byte input word and + // applies the S-box to each of the four bytes to produce an output word. + + // Function Subword() + { + tempa[0] = getSBoxValue(tempa[0]); + tempa[1] = getSBoxValue(tempa[1]); + tempa[2] = getSBoxValue(tempa[2]); + tempa[3] = getSBoxValue(tempa[3]); + } + + tempa[0] = tempa[0] ^ RCon[i/Nk]; + } + if (CryptoType == _CRYPTO_TYPE_AES256 && (i % Nk) == 4) + { + // Function Subword() + { + tempa[0] = getSBoxValue(tempa[0]); + tempa[1] = getSBoxValue(tempa[1]); + tempa[2] = getSBoxValue(tempa[2]); + tempa[3] = getSBoxValue(tempa[3]); + } + } + j = i * 4; k=(i - Nk) * 4; + RoundKey[j + 0] = RoundKey[k + 0] ^ tempa[0]; + RoundKey[j + 1] = RoundKey[k + 1] ^ tempa[1]; + RoundKey[j + 2] = RoundKey[k + 2] ^ tempa[2]; + RoundKey[j + 3] = RoundKey[k + 3] ^ tempa[3]; + } +} + +void AES_init_ctx(AES_ctx_t* ctx, const uint8_t* key) +{ + KeyExpansion(ctx->RoundKey, key); +} + +void AES_init_ctx_iv(AES_ctx_t* ctx, const uint8_t* key, const uint8_t* iv) +{ + KeyExpansion(ctx->RoundKey, key); + memcpy (ctx->Iv, iv, AES_BLOCKLEN); +} + +void AES_ctx_set_iv(AES_ctx_t* ctx, const uint8_t* iv) +{ + memcpy (ctx->Iv, iv, AES_BLOCKLEN); +} + +// This function adds the round key to state. +// The round key is added to the state by an XOR function. +static void AddRoundKey(uint8_t round, state_t* state, const uint8_t* RoundKey) +{ + uint8_t i,j; + for (i = 0; i < 4; ++i) + { + for (j = 0; j < 4; ++j) + { + (*state)[i][j] ^= RoundKey[(round * Nb * 4) + (i * Nb) + j]; + } + } +} + +// The SubBytes Function Substitutes the values in the +// state matrix with values in an S-box. +static void SubBytes(state_t* state) +{ + uint8_t i, j; + for (i = 0; i < 4; ++i) + { + for (j = 0; j < 4; ++j) + { + (*state)[j][i] = getSBoxValue((*state)[j][i]); + } + } +} + +// The ShiftRows() function shifts the rows in the state to the left. +// Each row is shifted with different offset. +// Offset = Row number. So the first row is not shifted. +static void ShiftRows(state_t* state) +{ + uint8_t temp; + + // Rotate first row 1 columns to left + temp = (*state)[0][1]; + (*state)[0][1] = (*state)[1][1]; + (*state)[1][1] = (*state)[2][1]; + (*state)[2][1] = (*state)[3][1]; + (*state)[3][1] = temp; + + // Rotate second row 2 columns to left + temp = (*state)[0][2]; + (*state)[0][2] = (*state)[2][2]; + (*state)[2][2] = temp; + + temp = (*state)[1][2]; + (*state)[1][2] = (*state)[3][2]; + (*state)[3][2] = temp; + + // Rotate third row 3 columns to left + temp = (*state)[0][3]; + (*state)[0][3] = (*state)[3][3]; + (*state)[3][3] = (*state)[2][3]; + (*state)[2][3] = (*state)[1][3]; + (*state)[1][3] = temp; +} + +static uint8_t xtime(uint8_t x) +{ + return ((x<<1) ^ (((x>>7) & 1) * 0x1b)); +} + +// MixColumns function mixes the columns of the state matrix +static void MixColumns(state_t* state) +{ + uint8_t i; + uint8_t Tmp, Tm, t; + for (i = 0; i < 4; ++i) + { + t = (*state)[i][0]; + Tmp = (*state)[i][0] ^ (*state)[i][1] ^ (*state)[i][2] ^ (*state)[i][3] ; + Tm = (*state)[i][0] ^ (*state)[i][1] ; Tm = xtime(Tm); (*state)[i][0] ^= Tm ^ Tmp ; + Tm = (*state)[i][1] ^ (*state)[i][2] ; Tm = xtime(Tm); (*state)[i][1] ^= Tm ^ Tmp ; + Tm = (*state)[i][2] ^ (*state)[i][3] ; Tm = xtime(Tm); (*state)[i][2] ^= Tm ^ Tmp ; + Tm = (*state)[i][3] ^ t ; Tm = xtime(Tm); (*state)[i][3] ^= Tm ^ Tmp ; + } +} + +/* jcallan@github points out that declaring Multiply as a function + * reduces code size considerably with the Keil ARM compiler. + * See this link for more information: https://github.com/kokke/tiny-AES-C/pull/3 + */ + +// Multiply is used to multiply numbers in the field GF(2^8) +// Note: The last call to xtime() is unneeded, but often ends up generating a smaller binary +// The compiler seems to be able to vectorize the operation better this way. +// See https://github.com/kokke/tiny-AES-c/pull/34 +static uint8_t Multiply(uint8_t x, uint8_t y) +{ + return (((y & 1) * x) ^ + ((y>>1 & 1) * xtime(x)) ^ + ((y>>2 & 1) * xtime(xtime(x))) ^ + ((y>>3 & 1) * xtime(xtime(xtime(x)))) ^ + ((y>>4 & 1) * xtime(xtime(xtime(xtime(x)))))); /* this last call to xtime() can be omitted */ + } + +#define getSBoxInvert(num) (RSBox[(num)]) + +// MixColumns function mixes the columns of the state matrix. +// The method used to multiply may be difficult to understand for the inexperienced. +// Please use the references to gain more information. +static void InvMixColumns(state_t* state) +{ + int i; + uint8_t a, b, c, d; + for (i = 0; i < 4; ++i) + { + a = (*state)[i][0]; + b = (*state)[i][1]; + c = (*state)[i][2]; + d = (*state)[i][3]; + + (*state)[i][0] = Multiply(a, 0x0e) ^ Multiply(b, 0x0b) ^ Multiply(c, 0x0d) ^ Multiply(d, 0x09); + (*state)[i][1] = Multiply(a, 0x09) ^ Multiply(b, 0x0e) ^ Multiply(c, 0x0b) ^ Multiply(d, 0x0d); + (*state)[i][2] = Multiply(a, 0x0d) ^ Multiply(b, 0x09) ^ Multiply(c, 0x0e) ^ Multiply(d, 0x0b); + (*state)[i][3] = Multiply(a, 0x0b) ^ Multiply(b, 0x0d) ^ Multiply(c, 0x09) ^ Multiply(d, 0x0e); + } +} + + +// The SubBytes Function Substitutes the values in the +// state matrix with values in an S-box. +static void InvSubBytes(state_t* state) +{ + uint8_t i, j; + for (i = 0; i < 4; ++i) + { + for (j = 0; j < 4; ++j) + { + (*state)[j][i] = getSBoxInvert((*state)[j][i]); + } + } +} + +static void InvShiftRows(state_t* state) +{ + uint8_t temp; + + // Rotate first row 1 columns to right + temp = (*state)[3][1]; + (*state)[3][1] = (*state)[2][1]; + (*state)[2][1] = (*state)[1][1]; + (*state)[1][1] = (*state)[0][1]; + (*state)[0][1] = temp; + + // Rotate second row 2 columns to right + temp = (*state)[0][2]; + (*state)[0][2] = (*state)[2][2]; + (*state)[2][2] = temp; + + temp = (*state)[1][2]; + (*state)[1][2] = (*state)[3][2]; + (*state)[3][2] = temp; + + // Rotate third row 3 columns to right + temp = (*state)[0][3]; + (*state)[0][3] = (*state)[1][3]; + (*state)[1][3] = (*state)[2][3]; + (*state)[2][3] = (*state)[3][3]; + (*state)[3][3] = temp; +} + +// Cipher is the main function that encrypts the PlainText. +static void Cipher(state_t* state, const uint8_t* RoundKey) +{ + uint8_t round = 0; + + // Add the First round key to the state before starting the rounds. + AddRoundKey(0, state, RoundKey); + + // There will be Nr rounds. + // The first Nr-1 rounds are identical. + // These Nr rounds are executed in the loop below. + // Last one without MixColumns() + for (round = 1; ; ++round) + { + SubBytes(state); + ShiftRows(state); + if (round == Nr) { + break; + } + MixColumns(state); + AddRoundKey(round, state, RoundKey); + } + // Add round key to last round + AddRoundKey(Nr, state, RoundKey); +} + +static void InvCipher(state_t* state, const uint8_t* RoundKey) +{ + uint8_t round = 0; + + // Add the First round key to the state before starting the rounds. + AddRoundKey(Nr, state, RoundKey); + + // There will be Nr rounds. + // The first Nr-1 rounds are identical. + // These Nr rounds are executed in the loop below. + // Last one without InvMixColumn() + for (round = (Nr - 1); ; --round) + { + InvShiftRows(state); + InvSubBytes(state); + AddRoundKey(round, state, RoundKey); + if (round == 0) { + break; + } + InvMixColumns(state); + } + +} + +/*****************************************************************************/ +/* Public functions: */ +/*****************************************************************************/ + +void AES_ECB_encrypt(const AES_ctx_t* ctx, uint8_t* buf) +{ + // The next function call encrypts the PlainText with the Key using AES algorithm. + Cipher((state_t*)buf, ctx->RoundKey); +} + +void AES_ECB_decrypt(const AES_ctx_t* ctx, uint8_t* buf) +{ + // The next function call decrypts the PlainText with the Key using AES algorithm. + InvCipher((state_t*)buf, ctx->RoundKey); +} + +static void XorWithIv(uint8_t* buf, const uint8_t* Iv) +{ + uint8_t i; + for (i = 0; i < AES_BLOCKLEN; ++i) // The block in AES is always 128bit no matter the key size + { + buf[i] ^= Iv[i]; + } +} + +void AES_CBC_encrypt_buffer(AES_ctx_t *ctx, uint8_t* buf, size_t length) +{ + size_t i; + uint8_t *Iv = ctx->Iv; + for (i = 0; i < length; i += AES_BLOCKLEN) + { + XorWithIv(buf, Iv); + Cipher((state_t*)buf, ctx->RoundKey); + Iv = buf; + buf += AES_BLOCKLEN; + } + /* store Iv in ctx for next call */ + memcpy(ctx->Iv, Iv, AES_BLOCKLEN); +} + +void AES_CBC_decrypt_buffer(AES_ctx_t* ctx, uint8_t* buf, size_t length) +{ + size_t i; + uint8_t storeNextIv[AES_BLOCKLEN]; + for (i = 0; i < length; i += AES_BLOCKLEN) + { + memcpy(storeNextIv, buf, AES_BLOCKLEN); + InvCipher((state_t*)buf, ctx->RoundKey); + XorWithIv(buf, ctx->Iv); + memcpy(ctx->Iv, storeNextIv, AES_BLOCKLEN); + buf += AES_BLOCKLEN; + } + +} + +/* Symmetrical operation: same function for encrypting as for decrypting. + * Note any IV/nonce should never be reused with the same key. + */ +void AES_CTR_xcrypt_buffer(AES_ctx_t* ctx, uint8_t* buf, size_t length) +{ + uint8_t buffer[AES_BLOCKLEN]; + + size_t i; + int bi; + for (i = 0, bi = AES_BLOCKLEN; i < length; ++i, ++bi) + { + if (bi == AES_BLOCKLEN) /* we need to regen xor compliment in buffer */ + { + + memcpy(buffer, ctx->Iv, AES_BLOCKLEN); + Cipher((state_t*)buffer,ctx->RoundKey); + + /* Increment Iv and handle overflow */ + for (bi = (AES_BLOCKLEN - 1); bi >= 0; --bi) + { + /* inc will overflow */ + if (ctx->Iv[bi] == 255) + { + ctx->Iv[bi] = 0; + continue; + } + ctx->Iv[bi] += 1; + break; + } + bi = 0; + } + + buf[i] = (buf[i] ^ buffer[bi]); + } +} + +#endif diff --git a/Firmware/Chameleon-Mini/Application/CryptoAESExtended.h b/Firmware/Chameleon-Mini/Application/CryptoAESExtended.h new file mode 100644 index 00000000..0346f861 --- /dev/null +++ b/Firmware/Chameleon-Mini/Application/CryptoAESExtended.h @@ -0,0 +1,93 @@ +/* +The DESFire stack portion of this firmware source +is free software written by Dr. Maxie Dion Schmidt (@maxieds): +You can redistribute it and/or modify +it under the terms of this license. + +This program 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. + +The complete source distribution of +this firmware is available at the following link: +https://github.com/maxieds/ChameleonMiniFirmwareDESFireStack. + +Based in part on the original DESFire code created by +@dev-zzo (GitHub handle) [Dmitry Janushkevich] available at +https://github.com/dev-zzo/ChameleonMini/tree/desfire. + +This notice must be retained at the top of all source files where indicated. +*/ + +/* + * CryptoAESExtended.h : + * Maxie D. Schmidt (github.com/maxieds) + */ + +/* + * NOTE: These (two) source files implement software-based AES-192 and + * AES-256 encryption routines. The source is heavily based on the + * project (with the top level repo "unlicense.txt" license): + * https://github.com/kokke/tiny-AES-c + */ + +#if defined(CONFIG_MF_DESFIRE_SUPPORT) && defined(ENABLE_DESFIRE_AES_EXTENDED) + +#ifndef __CRYPTO_AES_EXTENDED_SW_H__ +#define __CRYPTO_AES_EXTENDED_SW_H__ + +#include "../Common.h" + +#define _CRYPTO_TYPE_AES192 (0x8A) +#define _CRYPTO_TYPE_AES256 (0xDA) + +#define AES_BLOCKLEN (16) +#define CRYPTO_AES_MAX_KEY_EXPSIZE (240) + +typedef struct { + int Nk; // The number of 32 bit words in a key. + int Nr; // The number of rounds in AES Cipher. + int KeySize; + int KeyExpSize; + uint8_t CryptoMode; + uint8_t *RoundKey; + uint8_t *Iv; +} AES_ctx_t; + +extern uint8_t AESCryptoType; +extern uint8_t Nk; +extern uint8_t Nr; +extern uint8_t AES_KEYLEN; +extern uint8_t AES_keyExpSize; +extern AES_ctx_t AES_ctx; +extern uint8_t RoundKey[CRYPTO_AES_MAX_KEY_EXPSIZE]; +extern uint8_t IV[AES_BLOCKLEN]; +extern const uint8_t SBox[256]; +extern const uint8_t RSBox[256]; +extern const uint8_t RCon[11]; + +void SetupLocalAESContext(AES_ctx_t *ctx, uint8_t cryptoType, uint8_t cryptoMode); +uint8_t AESEncryptBuffer(const AES_ctx_t *ctx, uint8_t *buf, int bufLength); +uint8_t AESDecryptBuffer(const AES_ctx_t *ctx, uint8_t *buf, int bufLength); + +void AES_init_ctx(AES_ctx_t* ctx, const uint8_t* key); +void AES_init_ctx_iv(AES_ctx_t* ctx, const uint8_t* key, const uint8_t* iv); +void AES_ctx_set_iv(AES_ctx_t* ctx, const uint8_t* iv); + +// Buffer size is exactly AES_BLOCKLEN bytes. +// You need only AES_init_ctx as IV is not used in ECB. +// NB: ECB is considered insecure for most uses. +void AES_ECB_encrypt(const AES_ctx_t* ctx, uint8_t* buf); +void AES_ECB_decrypt(const AES_ctx_t* ctx, uint8_t* buf); + +// Buffer size MUST be mutile of AES_BLOCKLEN. +// See https://en.wikipedia.org/wiki/Padding_(cryptography)#PKCS7 for padding scheme. +// NOTES: you need to set IV in ctx via AES_init_ctx_iv() or AES_ctx_set_iv() +// no IV should ever be reused with the same key +void AES_CBC_encrypt_buffer(AES_ctx_t* ctx, uint8_t* buf, size_t length); +void AES_CBC_decrypt_buffer(AES_ctx_t* ctx, uint8_t* buf, size_t length); + +#endif + +#endif + diff --git a/Firmware/Chameleon-Mini/Application/DESFire/DESFireChameleonTerminal.c b/Firmware/Chameleon-Mini/Application/DESFire/DESFireChameleonTerminal.c index b38ea8aa..19d5b2bd 100644 --- a/Firmware/Chameleon-Mini/Application/DESFire/DESFireChameleonTerminal.c +++ b/Firmware/Chameleon-Mini/Application/DESFire/DESFireChameleonTerminal.c @@ -31,8 +31,10 @@ This notice must be retained at the top of all source files where indicated. #include "../../Terminal/Terminal.h" #include "../../Terminal/Commands.h" +#include "../../Random.h" #include "../../Settings.h" #include "DESFireChameleonTerminal.h" +#include "DESFireCrypto.h" #include "DESFireFirmwareSettings.h" #include "DESFirePICCControl.h" #include "DESFireMemoryOperations.h" @@ -41,8 +43,6 @@ This notice must be retained at the top of all source files where indicated. #include -extern DESFireAidType selectedGallagherAID; - bool IsDESFireConfiguration(void) { return GlobalSettings.ActiveSettingPtr->Configuration == CONFIG_MF_DESFIRE || GlobalSettings.ActiveSettingPtr->Configuration == CONFIG_MF_DESFIRE_2KEV1 || @@ -188,6 +188,14 @@ CommandStatusIdType CommandDESFireSetCommMode(char *OutParam, const char *InPara DesfireCommMode = DESFIRE_COMMS_CIPHERTEXT_AES128; DesfireCommandState.ActiveCommMode = DesfireCommMode; return COMMAND_INFO_OK; + } else if (!strcasecmp_P(valueStr, PSTR("Enciphered:AES192"))) { + DesfireCommMode = DESFIRE_COMMS_CIPHERTEXT_AES192; + DesfireCommandState.ActiveCommMode = DesfireCommMode; + return COMMAND_INFO_OK; + } else if (!strcasecmp_P(valueStr, PSTR("Enciphered:AES256"))) { + DesfireCommMode = DESFIRE_COMMS_CIPHERTEXT_AES256; + DesfireCommandState.ActiveCommMode = DesfireCommMode; + return COMMAND_INFO_OK; } return COMMAND_ERR_INVALID_USAGE_ID; } @@ -220,21 +228,40 @@ CommandStatusIdType CommandDESFireSetEncryptionMode(char *OutParam, const char * } if (!strcasecmp_P(modeStartPos, PSTR("ECB"))) { ecbModeEnabled = true; + DesfireEncMode = CRYPTO_AES_ECB_MODE; } else if (!strcasecmp_P(modeStartPos, PSTR("CBC"))) { ecbModeEnabled = false; + DesfireEncMode = CRYPTO_AES_CBC_MODE; } else { return COMMAND_ERR_INVALID_USAGE_ID; } if (setDESCryptoMode) { - __CryptoDESOpMode = ecbModeEnabled ? CRYPTO_DES_ECB_MODE : CRYPTO_DES_CBC_MODE; + __CryptoDESOpMode = ecbModeEnabled ? CRYPTO_DES_ECB_MODE : + CRYPTO_DES_CBC_MODE; } if (setAESCryptoMode) { - __CryptoAESOpMode = ecbModeEnabled ? CRYPTO_AES_ECB_MODE : CRYPTO_AES_CBC_MODE; + __CryptoAESOpMode = ecbModeEnabled ? CRYPTO_AES_ECB_MODE : + CRYPTO_AES_CBC_MODE; } - return COMMAND_INFO_OK; + return COMMAND_INFO_OK_ID; } +CommandStatusIdType CommandDESFireKeyscrubKill(char *OutMessage) { + int numRounds = DEFAULT_DESFIRE_KEYSCRUB_KILL_ROUNDS; + for (int r = 0; r < numRounds; r++) { + RandomGetBuffer(&SessionKey[0], CRYPTO_MAX_KEY_SIZE); + RandomGetBuffer(&SessionIV[0], CRYPTO_MAX_BLOCK_SIZE); + } + Authenticated = false; + AuthenticatedWithKey = -1; + return COMMAND_INFO_OK_ID; +} + +#ifdef ENABLE_DESFIRE_GALLAGHER + //The rest of the file was added by tomaspre +extern DESFireAidType selectedGallagherAID; + CommandStatusIdType CommandDESFireSetupGallagher(char *OutMessage, const char *InParams) { if (!IsDESFireConfiguration()) { return COMMAND_ERR_INVALID_USAGE_ID; @@ -373,5 +400,7 @@ CommandStatusIdType CommandDESFireSetGallagherSiteKey(char *OutMessage, const ch return COMMAND_INFO_OK_WITH_TEXT_ID; } +#endif + #endif /* CONFIG_MF_DESFIRE_SUPPORT */ diff --git a/Firmware/Chameleon-Mini/Application/DESFire/DESFireChameleonTerminal.h b/Firmware/Chameleon-Mini/Application/DESFire/DESFireChameleonTerminal.h index 967deabf..38d12b29 100644 --- a/Firmware/Chameleon-Mini/Application/DESFire/DESFireChameleonTerminal.h +++ b/Firmware/Chameleon-Mini/Application/DESFire/DESFireChameleonTerminal.h @@ -40,16 +40,22 @@ This notice must be retained at the top of all source files where indicated. bool IsDESFireConfiguration(void); #ifndef DISABLE_PERMISSIVE_DESFIRE_SETTINGS -#define DFCOMMAND_SET_HEADER "DF_SETHDR" +#define DFCOMMAND_SET_HEADER "DF_SETHDR" CommandStatusIdType CommandDESFireSetHeaderProperty(char *OutMessage, const char *InParams); #endif /* DISABLE_PERMISSIVE_DESFIRE_SETTINGS */ -#define DFCOMMAND_COMM_MODE "DF_COMM_MODE" +#define DFCOMMAND_COMM_MODE "DF_COMM_MODE" CommandStatusIdType CommandDESFireSetCommMode(char *OutMessage, const char *InParams); -#define DFCOMMAND_SET_ENCMODE "DF_ENCMODE" +#define DFCOMMAND_SET_ENCMODE "DF_ENCMODE" CommandStatusIdType CommandDESFireSetEncryptionMode(char *OutMessage, const char *InParams); +#define DEFAULT_DESFIRE_KEYSCRUB_KILL_ROUNDS (1) +#define DFCOMMAND_KEYSCRUB_KILL "DF_KEYSCRUB" +CommandStatusIdType CommandDESFireKeyscrubKill(char *OutMessage); + +#ifdef ENABLE_DESFIRE_GALLAGHER + //The rest of the file was added by tomaspre #define DFCOMMAND_SETUP_GALLAGHER "DF_SETUP_GALL" CommandStatusIdType CommandDESFireSetupGallagher(char *OutMessage, const char *InParams); @@ -69,6 +75,8 @@ CommandStatusIdType CommandDESFireSelectGallagherApp(char *OutMessage, const cha #define DFCOMMAND_SET_GALLAGHER_SITE_KEY "DF_SET_GALLKEY" CommandStatusIdType CommandDESFireSetGallagherSiteKey(char *OutMessage, const char *InParams); +#endif + #endif /* DESFire Support */ #endif /* __DESFIRE_CHAMELEON_TERMINAL_H__ */ diff --git a/Firmware/Chameleon-Mini/Application/DESFire/DESFireChameleonTerminalInclude.c b/Firmware/Chameleon-Mini/Application/DESFire/DESFireChameleonTerminalInclude.c index c324cacf..12ff2a47 100644 --- a/Firmware/Chameleon-Mini/Application/DESFire/DESFireChameleonTerminalInclude.c +++ b/Firmware/Chameleon-Mini/Application/DESFire/DESFireChameleonTerminalInclude.c @@ -49,7 +49,15 @@ This notice must be retained at the top of all source files where indicated. .ExecParamFunc = NO_FUNCTION, .SetFunc = CommandDESFireSetEncryptionMode, .GetFunc = NO_FUNCTION -}, {//The rest of the file was added by tomaspre +}, { + .Command = DFCOMMAND_KEYSCRUB_KILL, + .ExecFunc = CommandDESFireKeyscrubKill, + .ExecParamFunc = NO_FUNCTION, + .SetFunc = NO_FUNCTION, + .GetFunc = NO_FUNCTION +}, +#ifdef ENABLE_DESFIRE_GALLAGHER +{//The rest of the file was added by tomaspre .Command = DFCOMMAND_SETUP_GALLAGHER, .ExecFunc = NO_FUNCTION, .ExecParamFunc = NO_FUNCTION, @@ -86,8 +94,7 @@ This notice must be retained at the top of all source files where indicated. .SetFunc = CommandDESFireSetGallagherSiteKey, .GetFunc = NO_FUNCTION }, - - +#endif #endif diff --git a/Firmware/Chameleon-Mini/Application/DESFire/DESFireCrypto.c b/Firmware/Chameleon-Mini/Application/DESFire/DESFireCrypto.c index ba9ce6f8..6db51b9e 100644 --- a/Firmware/Chameleon-Mini/Application/DESFire/DESFireCrypto.c +++ b/Firmware/Chameleon-Mini/Application/DESFire/DESFireCrypto.c @@ -39,8 +39,11 @@ This notice must be retained at the top of all source files where indicated. #include "DESFireLogging.h" #include "System.h" -CryptoKeyBufferType SessionKey = { 0 }; -CryptoIVBufferType SessionIV = { 0 }; +CryptoKeyBufferType SessionKey = { 0x00 }; +CryptoIVBufferType SessionIV = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; BYTE SessionIVByteSize = 0; BYTE DesfireCommMode = DESFIRE_DEFAULT_COMMS_STANDARD; @@ -52,6 +55,7 @@ uint8_t AuthenticatedWithKey = DESFIRE_NOT_AUTHENTICATED; bool AuthenticatedWithPICCMasterKey = false; uint8_t CryptoAuthMethod = CRYPTO_TYPE_ANY; uint8_t ActiveCommMode = DESFIRE_DEFAULT_COMMS_STANDARD; +uint8_t DesfireEncMode = 0x00; // ECB by default void InvalidateAuthState(BYTE keepPICCAuthData) { if (!keepPICCAuthData) { @@ -81,10 +85,14 @@ BYTE GetDefaultCryptoMethodKeySize(uint8_t cryptoType) { case CRYPTO_TYPE_3K3DES: return CRYPTO_3KTDEA_KEY_SIZE; case CRYPTO_TYPE_AES128: - return CRYPTO_AES_BLOCK_SIZE; + return 16; + case CRYPTO_TYPE_AES192: + return 24; + case CRYPTO_TYPE_AES256: + return 32; case CRYPTO_TYPE_DES: default: - return CRYPTO_DES_BLOCK_SIZE; + return CRYPTO_DES_KEY_SIZE; } } @@ -96,6 +104,10 @@ BYTE GetCryptoMethodCommSettings(uint8_t cryptoType) { return DESFIRE_COMMS_CIPHERTEXT_DES; case CRYPTO_TYPE_AES128: return DESFIRE_COMMS_CIPHERTEXT_AES128; + case CRYPTO_TYPE_AES192: + return DESFIRE_COMMS_CIPHERTEXT_AES192; + case CRYPTO_TYPE_AES256: + return DESFIRE_COMMS_CIPHERTEXT_AES256; default: return DESFIRE_COMMS_PLAINTEXT; } @@ -128,6 +140,24 @@ bool generateSessionKey(uint8_t *sessionKey, uint8_t *rndA, uint8_t *rndB, uint1 memcpy(sessionKey + 8, rndA + 12, 4); memcpy(sessionKey + 12, rndB + 12, 4); break; + case CRYPTO_TYPE_AES192: + memcpy(sessionKey, rndA, 4); + memcpy(sessionKey + 4, rndB, 4); + memcpy(sessionKey + 8, rndA + 12, 4); + memcpy(sessionKey + 12, rndB + 12, 4); + memcpy(sessionKey + 16, rndA + 16, 4); + memcpy(sessionKey + 20, rndB + 16, 4); + break; + case CRYPTO_TYPE_AES256: + memcpy(sessionKey, rndA, 4); + memcpy(sessionKey + 4, rndB, 4); + memcpy(sessionKey + 8, rndA + 12, 4); + memcpy(sessionKey + 12, rndB + 12, 4); + memcpy(sessionKey + 16, rndA + 16, 4); + memcpy(sessionKey + 20, rndB + 16, 4); + memcpy(sessionKey + 24, rndA + 20, 4); + memcpy(sessionKey + 28, rndB + 20, 4); + break; default: return false; } @@ -138,8 +168,15 @@ BYTE GetCryptoKeyTypeFromAuthenticateMethod(BYTE authCmdMethod) { switch (authCmdMethod) { case CMD_AUTHENTICATE_AES: case CMD_AUTHENTICATE_EV2_FIRST: - case CMD_AUTHENTICATE_EV2_NONFIRST: - return CRYPTO_TYPE_AES128; + case CMD_AUTHENTICATE_EV2_NONFIRST: { + if (DesfireCommMode == DESFIRE_COMMS_CIPHERTEXT_AES192) { + return CRYPTO_TYPE_AES192; + } else if (DesfireCommMode == DESFIRE_COMMS_CIPHERTEXT_AES256) { + return CRYPTO_TYPE_AES256; + } else { + return CRYPTO_TYPE_AES128; + } + } case CMD_AUTHENTICATE_ISO: return CRYPTO_TYPE_DES; case CMD_AUTHENTICATE: @@ -152,7 +189,12 @@ BYTE GetCryptoKeyTypeFromAuthenticateMethod(BYTE authCmdMethod) { void InitAESCryptoKeyData(void) { memset(&SessionKey[0], 0x00, CRYPTO_MAX_KEY_SIZE); - memset(&SessionIV[0], 0x00, CRYPTO_MAX_BLOCK_SIZE); + /* NOTE: We should not use the same IV buffer with the same key + * for AES encryption. So we should just initialize the IV + * buffer to zeros when defining the extern above and then + * remove the next line. + */ + //memset(&SessionIV[0], 0x00, CRYPTO_MAX_BLOCK_SIZE); } #endif /* CONFIG_MF_DESFIRE_SUPPORT */ diff --git a/Firmware/Chameleon-Mini/Application/DESFire/DESFireCrypto.h b/Firmware/Chameleon-Mini/Application/DESFire/DESFireCrypto.h index 3cd5d524..a10ac9b3 100644 --- a/Firmware/Chameleon-Mini/Application/DESFire/DESFireCrypto.h +++ b/Firmware/Chameleon-Mini/Application/DESFire/DESFireCrypto.h @@ -29,6 +29,9 @@ This notice must be retained at the top of all source files where indicated. #include "../../Common.h" #include "../CryptoAES128.h" +#include "../CryptoAESExtended.h" +#include "../CryptoTDEA.h" +#include "../CryptoCMAC.h" #include "DESFireFirmwareSettings.h" @@ -44,6 +47,8 @@ This notice must be retained at the top of all source files where indicated. #define DESFIRE_COMMS_PLAINTEXT_MAC (0x01) #define DESFIRE_COMMS_CIPHERTEXT_DES (0x03) #define DESFIRE_COMMS_CIPHERTEXT_AES128 (0x04) +#define DESFIRE_COMMS_CIPHERTEXT_AES192 (0x05) +#define DESFIRE_COMMS_CIPHERTEXT_AES256 (0x06) #define DESFIRE_DEFAULT_COMMS_STANDARD (DESFIRE_COMMS_PLAINTEXT) extern BYTE DesfireCommMode; @@ -53,6 +58,14 @@ extern BYTE DesfireCommMode; #define CRYPTO_TYPE_2KTDEA (0x0A) #define CRYPTO_TYPE_3K3DES (0x1A) #define CRYPTO_TYPE_AES128 (0x4A) +#define CRYPTO_TYPE_AES192 (0x8A) +#define CRYPTO_TYPE_AES256 (0xDA) + +#ifdef ENABLE_DESFIRE_AES_EXTENDED + #define DESFIRE_AES_EXTENDED (1) +#else + #define DESFIRE_AES_EXTENDED (0) +#endif #define CryptoTypeDES(ct) \ ((ct == CRYPTO_TYPE_DES) || (ct == CRYPTO_TYPE_ANY)) @@ -61,13 +74,20 @@ extern BYTE DesfireCommMode; #define CryptoType3KTDEA(ct) \ ((ct == CRYPTO_TYPE_3K3DES) || (ct == CRYPTO_TYPE_ANY)) #define CryptoTypeAES(ct) \ - ((ct == CRYPTO_TYPE_AES128) || (ct == CRYPTO_TYPE_ANY)) + ((ct == CRYPTO_TYPE_AES128) || \ + (ct == CRYPTO_TYPE_AES192) || \ + (ct == CRYPTO_TYPE_AES256) || \ + (ct == CRYPTO_TYPE_ANY)) /* Key sizes, block sizes (in bytes): */ -#define CRYPTO_MAX_KEY_SIZE (24) +#ifdef ENABLE_DESFIRE_AES_EXTENDED + #define CRYPTO_MAX_KEY_SIZE (32) +#else + #define CRYPTO_MAX_KEY_SIZE (24) +#endif #define CRYPTO_MAX_BLOCK_SIZE (16) #define DESFIRE_AES_IV_SIZE (CRYPTO_AES_BLOCK_SIZE) -#define CRYPTO_CHALLENGE_RESPONSE_BYTES (16) +#define CRYPTO_CHALLENGE_RESPONSE_BYTES (CRYPTO_MAX_BLOCK_SIZE) typedef BYTE CryptoKeyBufferType[CRYPTO_MAX_KEY_SIZE]; typedef BYTE CryptoIVBufferType[CRYPTO_MAX_BLOCK_SIZE]; @@ -81,6 +101,7 @@ extern uint8_t AuthenticatedWithKey; extern bool AuthenticatedWithPICCMasterKey; extern uint8_t CryptoAuthMethod; extern uint8_t ActiveCommMode; +extern uint8_t DesfireEncMode; /* Need to invalidate the authentication state after: * 1) Selecting a new application; @@ -105,7 +126,9 @@ typedef enum DESFIRE_FIRMWARE_ENUM_PACKING { DESFIRE_AUTH_LEGACY, DESFIRE_AUTH_ISO_2KTDEA, DESFIRE_AUTH_ISO_3KTDEA, - DESFIRE_AUTH_AES, + DESFIRE_AUTH_AES128, + DESFIRE_AUTH_AES192, + DESFIRE_AUTH_AES256 } DesfireAuthType; BYTE GetCryptoKeyTypeFromAuthenticateMethod(BYTE authCmdMethod); @@ -117,8 +140,6 @@ BYTE GetCryptoKeyTypeFromAuthenticateMethod(BYTE authCmdMethod); * AES (128) crypto routines: *********************************************************/ -#include "../CryptoAES128.h" - extern CryptoAESConfig_t AESCryptoContext; void InitAESCryptoKeyData(void); @@ -134,9 +155,6 @@ typedef uint8_t (*CryptoTransferReceiveFunc)(uint8_t *, uint8_t); * TripleDES crypto routines: *********************************************************/ -#include "../CryptoTDEA.h" -#include "../CryptoCMAC.h" - #define DESFIRE_2KTDEA_NONCE_SIZE (CRYPTO_DES_BLOCK_SIZE) #define DESFIRE_DES_IV_SIZE (CRYPTO_DES_BLOCK_SIZE) #define DESFIRE_MAX_PAYLOAD_TDEA_BLOCKS (DESFIRE_MAX_PAYLOAD_SIZE / CRYPTO_DES_BLOCK_SIZE) diff --git a/Firmware/Chameleon-Mini/Application/DESFire/DESFireGallagher.c b/Firmware/Chameleon-Mini/Application/DESFire/DESFireGallagher.c index 16af7313..6ae52cb3 100644 --- a/Firmware/Chameleon-Mini/Application/DESFire/DESFireGallagher.c +++ b/Firmware/Chameleon-Mini/Application/DESFire/DESFireGallagher.c @@ -19,14 +19,14 @@ This notice must be retained at the top of all source files where indicated. * Tomas Preucil (github.com/tomaspre) */ +#ifdef ENABLE_DESFIRE_GALLAGHER + #include +#include "DESFireCrypto.h" #include "DESFireGallagher.h" #include "DESFireGallagherTools.h" #include "DESFireLogging.h" #include "DESFireUtils.h" -//SelectedApp -//Authenticated, wthkey, wthmasterkey -//CRYPTO_AES_KEY_SIZE #define CAD_BLOCK_LEN 0x24 #define GALL_BLOCK_LEN 0x10 @@ -38,19 +38,29 @@ uint8_t lastRegionCode = 0xFF; DESFireAidType selectedGallagherAID = {0xFF, 0xFF, 0xFF}; -//Defaults to the default gallagher site key -uint8_t GallagherSiteKey[16] = { - 0x31, 0x12, 0xB7, 0x38, 0xD8, 0x86, 0x2C, 0xCD, - 0x34, 0x30, 0x2E, 0xB2, 0x99, 0xAA, 0xB4, 0x56, -}; +// Defaults to the default gallagher site key +// Saving some precious space by putting these values into the AES crypto key buffer: +//uint8_t *GallagherSiteKey = { +// 0x31, 0x12, 0xB7, 0x38, 0xD8, 0x86, 0x2C, 0xCD, +// 0x34, 0x30, 0x2E, 0xB2, 0x99, 0xAA, 0xB4, 0x56, +//}; +uint8_t *GallagherSiteKey = &SessionKey[0]; //Warning - running this function resets the AUTH state! bool CreateGallagherCard(uint32_t cardId, uint16_t facilityId, uint8_t issueLevel, uint8_t regionCode) { - //TODO: Find a suitable AID - DESFireAidType AID = {0xF4, 0x81, 0x20}; + ResetGallagherSiteKey(GallagherSiteKey); + + // TODO: Why is this default different from the initial values in selectedGallagherAID ??? + // TODO: Find a suitable AID + // Saving some precious space by putting these values into selectedGallagherAID: + //static DESFireAidType AID = {0xF4, 0x81, 0x20}; + selectedGallagherAID[0] = 0xF4; + selectedGallagherAID[1] = 0x81; + selectedGallagherAID[2] = 0x20; + + return CreateGallagherCardWithAID(cardId, facilityId, issueLevel, regionCode, selectedGallagherAID); - return CreateGallagherCardWithAID(cardId, facilityId, issueLevel, regionCode, AID); } //Warning - running this function resets the AUTH state! @@ -138,11 +148,27 @@ void SetGallagherSiteKey(uint8_t* key) { } void ResetGallagherSiteKey() { - uint8_t key[16] = { - 0x31, 0x12, 0xB7, 0x38, 0xD8, 0x86, 0x2C, 0xCD, - 0x34, 0x30, 0x2E, 0xB2, 0x99, 0xAA, 0xB4, 0x56, - }; - SetGallagherSiteKey(key); + GallagherSiteKey[0] = 0x31; + GallagherSiteKey[1] = 0x12; + GallagherSiteKey[2] = 0xB7; + GallagherSiteKey[3] = 0x38; + GallagherSiteKey[4] = 0xD8; + GallagherSiteKey[5] = 0x86; + GallagherSiteKey[6] = 0x2C; + GallagherSiteKey[7] = 0xCD; + GallagherSiteKey[8] = 0x34; + GallagherSiteKey[9] = 0x30; + GallagherSiteKey[10] = 0x2E; + GallagherSiteKey[11] = 0xB2; + GallagherSiteKey[12] = 0x99; + GallagherSiteKey[13] = 0xAA; + GallagherSiteKey[14] = 0xB4; + GallagherSiteKey[15] = 0x56; + //static uint8_t key[16] = { + // 0x31, 0x12, 0xB7, 0x38, 0xD8, 0x86, 0x2C, 0xCD, + // 0x34, 0x30, 0x2E, 0xB2, 0x99, 0xAA, 0xB4, 0x56, + //}; + //SetGallagherSiteKey(key); } bool CreateGallagherAppWithAID(uint32_t cardId, uint16_t facilityId, uint8_t issueLevel, uint8_t regionCode, DESFireAidType AID) { @@ -237,3 +263,5 @@ void SelectGallagherAID(DESFireAidType AID) { selectedGallagherAID[1] = AID[1]; selectedGallagherAID[2] = AID[2]; } + +#endif diff --git a/Firmware/Chameleon-Mini/Application/DESFire/DESFireGallagher.h b/Firmware/Chameleon-Mini/Application/DESFire/DESFireGallagher.h index df044b76..8a177ee8 100644 --- a/Firmware/Chameleon-Mini/Application/DESFire/DESFireGallagher.h +++ b/Firmware/Chameleon-Mini/Application/DESFire/DESFireGallagher.h @@ -19,6 +19,8 @@ This notice must be retained at the top of all source files where indicated. * Tomas Preucil (github.com/tomaspre) */ +#ifdef ENABLE_DESFIRE_GALLAGHER + #ifndef CHAMELEON_MINI_DESFIREGALLAGHER_H #define CHAMELEON_MINI_DESFIREGALLAGHER_H @@ -28,6 +30,9 @@ This notice must be retained at the top of all source files where indicated. #include "DESFirePICCControl.h" #include "DESFireStatusCodes.h" +extern DESFireAidType selectedGallagherAID; +extern uint8_t *GallagherSiteKey; + //Warning - running this function resets the AUTH state! bool CreateGallagherCard(uint32_t cardId, uint16_t facilityId, uint8_t issueLevel, uint8_t regionCode); @@ -43,3 +48,5 @@ void SetGallagherSiteKey(uint8_t* key); void ResetGallagherSiteKey(); #endif //CHAMELEON_MINI_DESFIREGALLAGHER_H + +#endif diff --git a/Firmware/Chameleon-Mini/Application/DESFire/DESFireGallagherTools.c b/Firmware/Chameleon-Mini/Application/DESFire/DESFireGallagherTools.c index e6ad9566..788b1ca6 100644 --- a/Firmware/Chameleon-Mini/Application/DESFire/DESFireGallagherTools.c +++ b/Firmware/Chameleon-Mini/Application/DESFire/DESFireGallagherTools.c @@ -16,6 +16,8 @@ // // See LICENSE.txt @ https://github.com/RfidResearchGroup/proxmark3 for the text of the license. +#ifdef ENABLE_DESFIRE_GALLAGHER + #include #include "DESFireGallagherTools.h" #include "DESFireLogging.h" @@ -48,6 +50,8 @@ bool MifareKdfAn10922(uint8_t *key, uint8_t CryptoType, buffer[0] = 0x01; memcpy(&buffer[1], data, len); + // TODO: Can we save some space on the stack by reusing + // SessionIV from DESFireCrypto.h ??? uint8_t IV[CRYPTO_AES_BLOCK_SIZE]; memset(IV, 0, CRYPTO_AES_BLOCK_SIZE); DesfireCryptoCMACEx(CryptoType, key, buffer, len + 1, IV, diversified_key, 2*kbs); @@ -147,26 +151,34 @@ bool hfgal_diversify_key(uint8_t *site_key, uint8_t *uid, uint8_t uid_len, return ret; } -void scramble(uint8_t *arr, uint8_t len) { - const uint8_t lut[] = { - 0xa3, 0xb0, 0x80, 0xc6, 0xb2, 0xf4, 0x5c, 0x6c, 0x81, 0xf1, 0xbb, 0xeb, 0x55, 0x67, 0x3c, 0x05, - 0x1a, 0x0e, 0x61, 0xf6, 0x22, 0xce, 0xaa, 0x8f, 0xbd, 0x3b, 0x1f, 0x5e, 0x44, 0x04, 0x51, 0x2e, - 0x4d, 0x9a, 0x84, 0xea, 0xf8, 0x66, 0x74, 0x29, 0x7f, 0x70, 0xd8, 0x31, 0x7a, 0x6d, 0xa4, 0x00, - 0x82, 0xb9, 0x5f, 0xb4, 0x16, 0xab, 0xff, 0xc2, 0x39, 0xdc, 0x19, 0x65, 0x57, 0x7c, 0x20, 0xfa, - 0x5a, 0x49, 0x13, 0xd0, 0xfb, 0xa8, 0x91, 0x73, 0xb1, 0x33, 0x18, 0xbe, 0x21, 0x72, 0x48, 0xb6, - 0xdb, 0xa0, 0x5d, 0xcc, 0xe6, 0x17, 0x27, 0xe5, 0xd4, 0x53, 0x42, 0xf3, 0xdd, 0x7b, 0x24, 0xac, - 0x2b, 0x58, 0x1e, 0xa7, 0xe7, 0x86, 0x40, 0xd3, 0x98, 0x97, 0x71, 0xcb, 0x3a, 0x0f, 0x01, 0x9b, - 0x6e, 0x1b, 0xfc, 0x34, 0xa6, 0xda, 0x07, 0x0c, 0xae, 0x37, 0xca, 0x54, 0xfd, 0x26, 0xfe, 0x0a, - 0x45, 0xa2, 0x2a, 0xc4, 0x12, 0x0d, 0xf5, 0x4f, 0x69, 0xe0, 0x8a, 0x77, 0x60, 0x3f, 0x99, 0x95, - 0xd2, 0x38, 0x36, 0x62, 0xb7, 0x32, 0x7e, 0x79, 0xc0, 0x46, 0x93, 0x2f, 0xa5, 0xba, 0x5b, 0xaf, - 0x52, 0x1d, 0xc3, 0x75, 0xcf, 0xd6, 0x4c, 0x83, 0xe8, 0x3d, 0x30, 0x4e, 0xbc, 0x08, 0x2d, 0x09, - 0x06, 0xd9, 0x25, 0x9e, 0x89, 0xf2, 0x96, 0x88, 0xc1, 0x8c, 0x94, 0x0b, 0x28, 0xf0, 0x47, 0x63, - 0xd5, 0xb3, 0x68, 0x56, 0x9c, 0xf9, 0x6f, 0x41, 0x50, 0x85, 0x8b, 0x9d, 0x59, 0xbf, 0x9f, 0xe2, - 0x8e, 0x6a, 0x11, 0x23, 0xa1, 0xcd, 0xb5, 0x7d, 0xc7, 0xa9, 0xc8, 0xef, 0xdf, 0x02, 0xb8, 0x03, - 0x6b, 0x35, 0x3e, 0x2c, 0x76, 0xc9, 0xde, 0x1c, 0x4b, 0xd1, 0xed, 0x14, 0xc5, 0xad, 0xe9, 0x64, - 0x4a, 0xec, 0x8d, 0xf7, 0x10, 0x43, 0x78, 0x15, 0x87, 0xe4, 0xd7, 0x92, 0xe1, 0xee, 0xe3, 0x90 - }; +/* TODO / NOTE: The current firmware compiled with ``make clean && make desfire`` crashes out with + * the error: "Application Section size 66205 excedes maximum allowed 65536. + * Please disable some features in Makefile" -- even with extended AES-192/256 + * support disabled. Can we save some space by omitting these large buffers and + * compute these values on the fly (possibly with a penalty of slower scramble + * function performance ??? + */ +const uint8_t scrambleLutBuffer[256] = { + 0xa3, 0xb0, 0x80, 0xc6, 0xb2, 0xf4, 0x5c, 0x6c, 0x81, 0xf1, 0xbb, 0xeb, 0x55, 0x67, 0x3c, 0x05, + 0x1a, 0x0e, 0x61, 0xf6, 0x22, 0xce, 0xaa, 0x8f, 0xbd, 0x3b, 0x1f, 0x5e, 0x44, 0x04, 0x51, 0x2e, + 0x4d, 0x9a, 0x84, 0xea, 0xf8, 0x66, 0x74, 0x29, 0x7f, 0x70, 0xd8, 0x31, 0x7a, 0x6d, 0xa4, 0x00, + 0x82, 0xb9, 0x5f, 0xb4, 0x16, 0xab, 0xff, 0xc2, 0x39, 0xdc, 0x19, 0x65, 0x57, 0x7c, 0x20, 0xfa, + 0x5a, 0x49, 0x13, 0xd0, 0xfb, 0xa8, 0x91, 0x73, 0xb1, 0x33, 0x18, 0xbe, 0x21, 0x72, 0x48, 0xb6, + 0xdb, 0xa0, 0x5d, 0xcc, 0xe6, 0x17, 0x27, 0xe5, 0xd4, 0x53, 0x42, 0xf3, 0xdd, 0x7b, 0x24, 0xac, + 0x2b, 0x58, 0x1e, 0xa7, 0xe7, 0x86, 0x40, 0xd3, 0x98, 0x97, 0x71, 0xcb, 0x3a, 0x0f, 0x01, 0x9b, + 0x6e, 0x1b, 0xfc, 0x34, 0xa6, 0xda, 0x07, 0x0c, 0xae, 0x37, 0xca, 0x54, 0xfd, 0x26, 0xfe, 0x0a, + 0x45, 0xa2, 0x2a, 0xc4, 0x12, 0x0d, 0xf5, 0x4f, 0x69, 0xe0, 0x8a, 0x77, 0x60, 0x3f, 0x99, 0x95, + 0xd2, 0x38, 0x36, 0x62, 0xb7, 0x32, 0x7e, 0x79, 0xc0, 0x46, 0x93, 0x2f, 0xa5, 0xba, 0x5b, 0xaf, + 0x52, 0x1d, 0xc3, 0x75, 0xcf, 0xd6, 0x4c, 0x83, 0xe8, 0x3d, 0x30, 0x4e, 0xbc, 0x08, 0x2d, 0x09, + 0x06, 0xd9, 0x25, 0x9e, 0x89, 0xf2, 0x96, 0x88, 0xc1, 0x8c, 0x94, 0x0b, 0x28, 0xf0, 0x47, 0x63, + 0xd5, 0xb3, 0x68, 0x56, 0x9c, 0xf9, 0x6f, 0x41, 0x50, 0x85, 0x8b, 0x9d, 0x59, 0xbf, 0x9f, 0xe2, + 0x8e, 0x6a, 0x11, 0x23, 0xa1, 0xcd, 0xb5, 0x7d, 0xc7, 0xa9, 0xc8, 0xef, 0xdf, 0x02, 0xb8, 0x03, + 0x6b, 0x35, 0x3e, 0x2c, 0x76, 0xc9, 0xde, 0x1c, 0x4b, 0xd1, 0xed, 0x14, 0xc5, 0xad, 0xe9, 0x64, + 0x4a, 0xec, 0x8d, 0xf7, 0x10, 0x43, 0x78, 0x15, 0x87, 0xe4, 0xd7, 0x92, 0xe1, 0xee, 0xe3, 0x90 +}; +void scramble(uint8_t *arr, uint8_t len) { + const uint8_t *lut = &scrambleLutBuffer[0]; for (int i = 0; i < len; i++) { arr[i] = lut[arr[i]]; } @@ -186,3 +198,5 @@ void gallagher_encode_creds(uint8_t *eight_bytes, uint8_t rc, uint16_t fc, uint3 // more obfuscation scramble(eight_bytes, 8); } + +#endif diff --git a/Firmware/Chameleon-Mini/Application/DESFire/DESFireGallagherTools.h b/Firmware/Chameleon-Mini/Application/DESFire/DESFireGallagherTools.h index a9e019a1..055b654b 100644 --- a/Firmware/Chameleon-Mini/Application/DESFire/DESFireGallagherTools.h +++ b/Firmware/Chameleon-Mini/Application/DESFire/DESFireGallagherTools.h @@ -16,6 +16,8 @@ // // See LICENSE.txt @ https://github.com/RfidResearchGroup/proxmark3 for the text of the license. +#ifdef ENABLE_DESFIRE_GALLAGHER + #ifndef CHAMELEON_MINI_DESFIREGALLAGHERTOOLS_H #define CHAMELEON_MINI_DESFIREGALLAGHERTOOLS_H @@ -25,6 +27,8 @@ #include "DESFirePICCControl.h" #include "DESFireStatusCodes.h" +extern const uint8_t scrambleLutBuffer[256]; + //bool MifareKdfAn10922(uint8_t *key, uint8_t CryptoType, const uint8_t *data, size_t len, uint8_t *diversified_key); //uint8_t mfdes_kdf_input_gallagher(uint8_t *uid, uint8_t uidLen, uint8_t keyNo, uint32_t aid, uint8_t *kdfInputOut, uint8_t *kdfInputLen); bool hfgal_diversify_key(uint8_t *site_key, uint8_t *uid, uint8_t uid_len, uint8_t key_num, DESFireAidType aid, uint8_t *key_output); @@ -33,3 +37,5 @@ bool hfgal_diversify_key(uint8_t *site_key, uint8_t *uid, uint8_t uid_len, uint8 void gallagher_encode_creds(uint8_t *eight_bytes, uint8_t rc, uint16_t fc, uint32_t cn, uint8_t il); #endif //CHAMELEON_MINI_DESFIREGALLAGHERTOOLS_H + +#endif diff --git a/Firmware/Chameleon-Mini/Application/DESFire/DESFireInstructions.c b/Firmware/Chameleon-Mini/Application/DESFire/DESFireInstructions.c index 880a64ac..105de9d2 100644 --- a/Firmware/Chameleon-Mini/Application/DESFire/DESFireInstructions.c +++ b/Firmware/Chameleon-Mini/Application/DESFire/DESFireInstructions.c @@ -512,20 +512,7 @@ uint16_t EV0CmdAuthenticateLegacy1(uint8_t *Buffer, uint16_t ByteCount) { DesfireLogEntry(LOG_APP_AUTH_KEY, (const void *) Key, keySize); /* Generate the nonce B (RndB / Challenge response) */ - if (!DesfireDebuggingOn) { - RandomGetBuffer(DesfireCommandState.RndB, CryptoChallengeResponseSize); - } else { - /* Fixed nonce for testing */ - DesfireCommandState.RndB[0] = 0xCA; - DesfireCommandState.RndB[1] = 0xFE; - DesfireCommandState.RndB[2] = 0xBA; - DesfireCommandState.RndB[3] = 0xBE; - DesfireCommandState.RndB[4] = 0x00; - DesfireCommandState.RndB[5] = 0x11; - DesfireCommandState.RndB[6] = 0x22; - DesfireCommandState.RndB[7] = 0x33; - memset(&DesfireCommandState.RndB[CRYPTO_DES_BLOCK_SIZE], 0x00, CRYPTO_DES_BLOCK_SIZE); - } + RandomGetBuffer(DesfireCommandState.RndB, CryptoChallengeResponseSize); DesfireLogEntry(LOG_APP_NONCE_B, DesfireCommandState.RndB, CryptoChallengeResponseSize); /* Encrypt RndB with the selected key and transfer it back to the PCD */ @@ -1858,7 +1845,7 @@ uint16_t DesfireCmdAuthenticate3KTDEA1(uint8_t *Buffer, uint16_t ByteCount) { if (cryptoKeyType == CRYPTO_TYPE_ANY || cryptoKeyType == CRYPTO_TYPE_3K3DES) { keySize = GetDefaultCryptoMethodKeySize(CRYPTO_TYPE_3K3DES); DesfireCommandState.CryptoMethodType = CRYPTO_TYPE_3K3DES; - } else if (cryptoKeyType == CRYPTO_TYPE_AES128) { + } else if (CryptoTypeAES(cryptoKeyType)) { return DesfireCmdAuthenticateAES1(Buffer, ByteCount); } else if (cryptoKeyType == CRYPTO_TYPE_DES) { return EV0CmdAuthenticateLegacy1(Buffer, ByteCount); @@ -1877,27 +1864,7 @@ uint16_t DesfireCmdAuthenticate3KTDEA1(uint8_t *Buffer, uint16_t ByteCount) { DesfireLogEntry(LOG_APP_AUTH_KEY, (const void *) Key, keySize); /* Generate the nonce B (RndB / Challenge response) */ - if (!DesfireDebuggingOn) { - RandomGetBuffer(DesfireCommandState.RndB, CryptoChallengeResponseSize); - } else { - /* Fixed nonce for testing */ - DesfireCommandState.RndB[0] = 0xCA; - DesfireCommandState.RndB[1] = 0xFE; - DesfireCommandState.RndB[2] = 0xBA; - DesfireCommandState.RndB[3] = 0xBE; - DesfireCommandState.RndB[4] = 0x00; - DesfireCommandState.RndB[5] = 0x11; - DesfireCommandState.RndB[6] = 0x22; - DesfireCommandState.RndB[7] = 0x33; - DesfireCommandState.RndB[8] = 0xCA; - DesfireCommandState.RndB[9] = 0xFE; - DesfireCommandState.RndB[10] = 0xBA; - DesfireCommandState.RndB[11] = 0xBE; - DesfireCommandState.RndB[12] = 0x00; - DesfireCommandState.RndB[13] = 0x11; - DesfireCommandState.RndB[14] = 0x22; - DesfireCommandState.RndB[15] = 0x33; - } + RandomGetBuffer(DesfireCommandState.RndB, CryptoChallengeResponseSize); DesfireLogEntry(LOG_APP_NONCE_B, DesfireCommandState.RndB, CryptoChallengeResponseSize); /* Encrypt RndB with the selected key and transfer it back to the PCD */ @@ -2044,23 +2011,44 @@ uint16_t DesfireCmdAuthenticateAES1(uint8_t *Buffer, uint16_t ByteCount) { if (!CryptoTypeAES(cryptoKeyType)) { Buffer[0] = STATUS_NO_SUCH_KEY; return DESFIRE_STATUS_RESPONSE_SIZE; + } else if (cryptoKeyType == CRYPTO_TYPE_AES128) { + InitAESCryptoKeyData(); + } else if (DESFIRE_AES_EXTENDED) { + InitAESCryptoKeyData(); + } else { // unsupported AES encryption method + Buffer[0] = STATUS_NO_SUCH_KEY; + return DESFIRE_STATUS_RESPONSE_SIZE; } - InitAESCryptoKeyData(); - keySize = GetDefaultCryptoMethodKeySize(CRYPTO_TYPE_AES128); - Key = SessionKey; - IVBuffer = SessionIV; + keySize = GetDefaultCryptoMethodKeySize(DesfireCommMode); + Key = &SessionKey[0]; + IVBuffer = &SessionIV[0]; /* Indicate that we are in AES key authentication land */ DesfireCommandState.KeyId = KeyId; - DesfireCommandState.CryptoMethodType = CRYPTO_TYPE_AES128; + if (CryptoTypeAES(cryptoKeyType)) { + DesfireCommandState.CryptoMethodType = cryptoKeyType; + } else { + DesfireCommandState.CryptoMethodType = CRYPTO_TYPE_AES128; + } /* Fetch the key */ ReadAppKey(SelectedApp.Slot, KeyId, Key, keySize); DesfireLogEntry(LOG_APP_AUTH_KEY, (const void *) Key, keySize); - CryptoAESGetConfigDefaults(&AESCryptoContext); - CryptoAESInitContext(&AESCryptoContext); - + if (DesfireCommandState.CryptoMethodType == CRYPTO_TYPE_AES128) { + CryptoAESGetConfigDefaults(&AESCryptoContext); + CryptoAESInitContext(&AESCryptoContext); + } else if (DESFIRE_AES_EXTENDED) { + #ifdef ENABLE_DESFIRE_AES_EXTENDED + SetupLocalAESContext(&AES_ctx, cryptoKeyType, DesfireEncMode); + AES_init_ctx(&AES_ctx, Key); + AES_init_ctx_iv(&AES_ctx, Key, IVBuffer); + #endif + } else { // unsupported AES encryption method + Buffer[0] = STATUS_NO_SUCH_KEY; + return DESFIRE_STATUS_RESPONSE_SIZE; + } + /* Generate the nonce B (RndB / Challenge response) */ if (!DesfireDebuggingOn) { RandomGetBuffer(&(DesfireCommandState.RndB[0]), CRYPTO_CHALLENGE_RESPONSE_BYTES); @@ -2087,8 +2075,19 @@ uint16_t DesfireCmdAuthenticateAES1(uint8_t *Buffer, uint16_t ByteCount) { /* Encrypt RndB with the selected key and transfer it back to the PCD */ DesfireLogEntry(LOG_APP_SESSION_IV, (void *) IVBuffer, CRYPTO_CHALLENGE_RESPONSE_BYTES); - Status = CryptoAESEncryptBuffer(CRYPTO_CHALLENGE_RESPONSE_BYTES, DesfireCommandState.RndB, - &Buffer[1], IVBuffer, Key); + + if (DesfireCommandState.CryptoMethodType == CRYPTO_TYPE_AES128) { + Status = CryptoAESEncryptBuffer(CRYPTO_CHALLENGE_RESPONSE_BYTES, + DesfireCommandState.RndB, + &Buffer[1], IVBuffer, Key); + } else if (DESFIRE_AES_EXTENDED) { + #ifdef ENABLE_DESFIRE_AES_EXTENDED + Status = AESEncryptBuffer(&AES_ctx, &Buffer[1], CRYPTO_CHALLENGE_RESPONSE_BYTES); + #endif + } else { // unsupported AES encryption method + Buffer[0] = STATUS_NO_SUCH_KEY; + return DESFIRE_STATUS_RESPONSE_SIZE; + } DesfireLogEntry(LOG_APP_SESSION_IV, (void *) IVBuffer, CRYPTO_CHALLENGE_RESPONSE_BYTES); if (Status != STATUS_OPERATION_OK) { @@ -2121,7 +2120,7 @@ uint16_t DesfireCmdAuthenticateAES2(uint8_t *Buffer, uint16_t ByteCount) { /* Reset parameters for authentication from the first exchange */ Key = SessionKey; - keySize = GetDefaultCryptoMethodKeySize(CRYPTO_TYPE_AES128); + keySize = GetDefaultCryptoMethodKeySize(DesfireCommMode); KeyId = DesfireCommandState.KeyId; cryptoKeyType = DesfireCommandState.CryptoMethodType; ReadAppKey(SelectedApp.Slot, KeyId, Key, keySize); @@ -2131,15 +2130,29 @@ uint16_t DesfireCmdAuthenticateAES2(uint8_t *Buffer, uint16_t ByteCount) { BYTE challengeRndAB[2 * CRYPTO_CHALLENGE_RESPONSE_BYTES]; BYTE challengeRndA[CRYPTO_CHALLENGE_RESPONSE_BYTES]; BYTE challengeRndB[CRYPTO_CHALLENGE_RESPONSE_BYTES]; - CryptoAESDecryptBuffer(2 * CRYPTO_CHALLENGE_RESPONSE_BYTES, challengeRndAB, &Buffer[1], IVBuffer, Key); + + if (cryptoKeyType == CRYPTO_TYPE_AES128) { + CryptoAESDecryptBuffer(2 * CRYPTO_CHALLENGE_RESPONSE_BYTES, challengeRndAB, + &Buffer[1], IVBuffer, Key); + } else if (DESFIRE_AES_EXTENDED) { + #ifdef ENABLE_DESFIRE_AES_EXTENDED + AESDecryptBuffer(&AES_ctx, challengeRndAB, 2 * CRYPTO_CHALLENGE_RESPONSE_BYTES); + #endif + } else { // unsupported encryption method + Buffer[0] = STATUS_AUTHENTICATION_ERROR; + return DESFIRE_STATUS_RESPONSE_SIZE; + } DesfireLogEntry(LOG_APP_SESSION_IV, (void *) IVBuffer, CRYPTO_CHALLENGE_RESPONSE_BYTES); - RotateArrayLeft(challengeRndAB + CRYPTO_CHALLENGE_RESPONSE_BYTES, challengeRndB, CRYPTO_CHALLENGE_RESPONSE_BYTES); + RotateArrayLeft(challengeRndAB + CRYPTO_CHALLENGE_RESPONSE_BYTES, challengeRndB, + CRYPTO_CHALLENGE_RESPONSE_BYTES); memcpy(challengeRndA, challengeRndAB, CRYPTO_CHALLENGE_RESPONSE_BYTES); /* Check that the returned RndB matches what we sent in the previous round */ if (memcmp(DesfireCommandState.RndB, challengeRndB, CRYPTO_CHALLENGE_RESPONSE_BYTES)) { - DesfireLogEntry(LOG_INFO_DESFIRE_STATUS_INFO, (const void *) challengeRndA, CRYPTO_CHALLENGE_RESPONSE_BYTES); - DesfireLogEntry(LOG_INFO_DESFIRE_STATUS_INFO, (const void *) challengeRndB, CRYPTO_CHALLENGE_RESPONSE_BYTES); + DesfireLogEntry(LOG_INFO_DESFIRE_STATUS_INFO, (const void *) challengeRndA, + CRYPTO_CHALLENGE_RESPONSE_BYTES); + DesfireLogEntry(LOG_INFO_DESFIRE_STATUS_INFO, (const void *) challengeRndB, + CRYPTO_CHALLENGE_RESPONSE_BYTES); Buffer[0] = STATUS_AUTHENTICATION_ERROR; return DESFIRE_STATUS_RESPONSE_SIZE; } @@ -2147,11 +2160,23 @@ uint16_t DesfireCmdAuthenticateAES2(uint8_t *Buffer, uint16_t ByteCount) { /* Encrypt and send back the once rotated RndA buffer to the PCD */ RotateArrayRight(challengeRndA, challengeRndAB, CRYPTO_CHALLENGE_RESPONSE_BYTES); DesfireLogEntry(LOG_APP_SESSION_IV, (void *) IVBuffer, CRYPTO_CHALLENGE_RESPONSE_BYTES); - CryptoAESEncryptBuffer(CRYPTO_CHALLENGE_RESPONSE_BYTES, challengeRndAB, &Buffer[1], IVBuffer, Key); + + // TODO + if (cryptoKeyType == CRYPTO_TYPE_AES128) { + CryptoAESEncryptBuffer(CRYPTO_CHALLENGE_RESPONSE_BYTES, challengeRndAB, + &Buffer[1], IVBuffer, Key); + } else if (DESFIRE_AES_EXTENDED) { + #ifdef ENABLE_DESFIRE_AES_EXTENDED + AESEncryptBuffer(&AES_ctx, challengeRndAB, CRYPTO_CHALLENGE_RESPONSE_BYTES); + #endif + } else { + Buffer[0] = STATUS_AUTHENTICATION_ERROR; + return DESFIRE_STATUS_RESPONSE_SIZE; + } DesfireLogEntry(LOG_APP_SESSION_IV, (void *) IVBuffer, CRYPTO_CHALLENGE_RESPONSE_BYTES); /* Create the session key based on the previous exchange */ - generateSessionKey(SessionKey, challengeRndA, challengeRndB, CRYPTO_TYPE_AES128); + generateSessionKey(SessionKey, challengeRndA, challengeRndB, cryptoKeyType); /* Now that we have auth'ed with the legacy command, a ChangeKey command will * allow for subsequent authentication with the ISO or AES routines diff --git a/Firmware/Chameleon-Mini/Application/DESFire/DESFireLogging.h b/Firmware/Chameleon-Mini/Application/DESFire/DESFireLogging.h index fc45993a..fc43aede 100644 --- a/Firmware/Chameleon-Mini/Application/DESFire/DESFireLogging.h +++ b/Firmware/Chameleon-Mini/Application/DESFire/DESFireLogging.h @@ -47,11 +47,11 @@ void DesfireLogISOStateChange(int state, int logCode); uint8_t logLength = 0; \ do { \ snprintf_P((char *) __InternalStringBuffer, STRING_BUFFER_SIZE, \ - (const char *) fmtStr, ##__VA_ARGS__); \ - logLength = StringLength((char *) __InternalStringBuffer, \ - STRING_BUFFER_SIZE); \ - DesfireLogEntry(LOG_INFO_DESFIRE_DEBUGGING_OUTPUT, \ - (char *) __InternalStringBuffer, logLength); \ + (const char *) fmtStr, ##__VA_ARGS__); \ + logLength = StringLength((char *) __InternalStringBuffer, \ + STRING_BUFFER_SIZE); \ + DesfireLogEntry(LOG_INFO_DESFIRE_DEBUGGING_OUTPUT, \ + (char *) __InternalStringBuffer, logLength); \ } while(0); \ }) #else @@ -61,10 +61,10 @@ void DesfireLogISOStateChange(int state, int logCode); #define GetSourceFileLoggingData() ({ \ char *strBuffer; \ do { \ - snprintf_P(__InternalStringBuffer, STRING_BUFFER_SIZE, \ + snprintf_P(__InternalStringBuffer, STRING_BUFFER_SIZE, \ PSTR("@@ LINE #%d in \"%s\" @@"), \ - __LINE__, __FILE__); \ - __InternalStringBuffer[STRING_BUFFER_SIZE - 1] = '\0'; \ + __LINE__, __FILE__); \ + __InternalStringBuffer[STRING_BUFFER_SIZE - 1] = '\0'; \ } while(0); \ strBuffer = __InternalStringBuffer; \ strBuffer; \ diff --git a/Firmware/Chameleon-Mini/Application/DESFire/DESFirePICCControl.c b/Firmware/Chameleon-Mini/Application/DESFire/DESFirePICCControl.c index 06ee007a..cc0ecca3 100644 --- a/Firmware/Chameleon-Mini/Application/DESFire/DESFirePICCControl.c +++ b/Firmware/Chameleon-Mini/Application/DESFire/DESFirePICCControl.c @@ -115,15 +115,12 @@ uint8_t ReadDataFilterSetup(uint8_t CommSettings) { case DESFIRE_COMMS_PLAINTEXT: break; case DESFIRE_COMMS_PLAINTEXT_MAC: - //memset(SessionIV, PICC_EMPTY_BYTE, sizeof(SessionIV)); SessionIVByteSize = CRYPTO_2KTDEA_KEY_SIZE; break; case DESFIRE_COMMS_CIPHERTEXT_DES: - //memset(SessionIV, PICC_EMPTY_BYTE, sizeof(SessionIV)); SessionIVByteSize = CRYPTO_3KTDEA_KEY_SIZE; break; case DESFIRE_COMMS_CIPHERTEXT_AES128: - //memset(SessionIV, 0, sizeof(SessionIVByteSize)); SessionIVByteSize = CRYPTO_AES_KEY_SIZE; default: return STATUS_PARAMETER_ERROR; @@ -134,19 +131,15 @@ uint8_t ReadDataFilterSetup(uint8_t CommSettings) { uint8_t WriteDataFilterSetup(uint8_t CommSettings) { switch (CommSettings) { case DESFIRE_COMMS_PLAINTEXT: - //memset(SessionIV, 0, sizeof(SessionIVByteSize)); SessionIVByteSize = 0; break; case DESFIRE_COMMS_PLAINTEXT_MAC: - //memset(SessionIV, 0, sizeof(SessionIVByteSize)); SessionIVByteSize = CRYPTO_2KTDEA_KEY_SIZE; break; case DESFIRE_COMMS_CIPHERTEXT_DES: - //memset(SessionIV, 0, sizeof(SessionIVByteSize)); SessionIVByteSize = CRYPTO_AES_KEY_SIZE; break; case DESFIRE_COMMS_CIPHERTEXT_AES128: - //memset(SessionIV, 0, sizeof(SessionIVByteSize)); SessionIVByteSize = CRYPTO_AES_KEY_SIZE; break; default: @@ -160,9 +153,9 @@ uint8_t WriteDataFilterSetup(uint8_t CommSettings) { */ void InitialisePiccBackendEV0(uint8_t StorageSize, bool formatPICC) { -#ifdef DESFIRE_RUN_CRYPTO_TESTING_PROCEDURE + #ifdef DESFIRE_RUN_CRYPTO_TESTING_PROCEDURE RunCryptoUnitTests(); -#endif + #endif /* Init backend */ InitBlockSizes(); CardCapacityBlocks = StorageSize; @@ -181,9 +174,9 @@ void InitialisePiccBackendEV0(uint8_t StorageSize, bool formatPICC) { } void InitialisePiccBackendEV1(uint8_t StorageSize, bool formatPICC) { -#ifdef DESFIRE_RUN_CRYPTO_TESTING_PROCEDURE + #ifdef DESFIRE_RUN_CRYPTO_TESTING_PROCEDURE RunCryptoUnitTests(); -#endif + #endif /* Init backend */ InitBlockSizes(); CardCapacityBlocks = StorageSize; @@ -202,9 +195,9 @@ void InitialisePiccBackendEV1(uint8_t StorageSize, bool formatPICC) { } void InitialisePiccBackendEV2(uint8_t StorageSize, bool formatPICC) { -#ifdef DESFIRE_RUN_CRYPTO_TESTING_PROCEDURE + #ifdef DESFIRE_RUN_CRYPTO_TESTING_PROCEDURE RunCryptoUnitTests(); -#endif + #endif /* Init backend */ InitBlockSizes(); CardCapacityBlocks = StorageSize; @@ -257,50 +250,155 @@ uint8_t GetPiccKeySettings(void) { } void FormatPicc(void) { - /* Wipe application directory */ + + /* Wipe application directory: */ memset(&AppDir, 0x00, sizeof(DESFireAppDirType)); memset(&SelectedApp, 0x00, sizeof(SelectedAppCacheType)); - /* Set a random new UID */ + + /* Set a random new UID or the build-time default: */ BYTE uidData[DESFIRE_UID_SIZE]; + #ifdef ENABLE_DESFIRE_DEFAULT_PICC_UID + if (sizeof(DESFIRE_DEFAULT_PICC_UID) == BYTELEN_DESFIRE_DEFAULT_PICC_UID) { + memcpy(&uidData[1], DESFIRE_DEFAULT_PICC_UID, BYTELEN_DESFIRE_DEFAULT_PICC_UID); + } else { + DEBUG_PRINT_P(PSTR("Makefile error: Default UID bytes = %d != %d"), + DESFIRE_DEFAULT_PICC_UID, BYTELEN_DESFIRE_DEFAULT_PICC_UID); + RandomGetBuffer(uidData, DESFIRE_UID_SIZE); + } + #else RandomGetBuffer(uidData, DESFIRE_UID_SIZE); + #endif memcpy(&Picc.Uid[0], uidData, DESFIRE_UID_SIZE); + /* Conform to NXP Application Note AN10927 about the first - * byte of a randomly generated UID (refer to section 2.1.1). + * byte of a randomly generated UID (refer to section 2.1.1): */ Picc.Uid[0] = ISO14443A_UID0_RANDOM; uint16_t ATQAValue = DESFIRE_ATQA_RANDOM_UID; + #ifdef ENABLE_DESFIRE_DEFAULT_PICC_ATQA + if (sizeof(DESFIRE_DEFAULT_PICC_ATQA) == BYTELEN_DESFIRE_DEFAULT_PICC_ATQA) { + ATQAValue = (DESFIRE_DEFAULT_PICC_ATQA[0] << 8) | DESFIRE_DEFAULT_PICC_ATQA[1]; + } else { + DEBUG_PRINT_P(PSTR("Makefile error: Default ATQA bytes = %d != %d"), + DESFIRE_DEFAULT_PICC_ATQA, BYTELEN_DESFIRE_DEFAULT_PICC_ATQA); + } + #endif Picc.ATQA[0] = (uint8_t)((ATQAValue >> 8) & 0x00FF); Picc.ATQA[1] = (uint8_t)(ATQAValue & 0x00FF); DesfireATQAReset = false; - /* Randomize the initial batch number data: */ + + /* Randomize the initial batch number data (or set to build-time default): */ BYTE batchNumberData[5]; + #ifdef ENABLE_DESFIRE_DEFAULT_PICC_BATCHNO + if (sizeof(DESFIRE_DEFAULT_PICC_BATCHNO) == BYTELEN_DESFIRE_DEFAULT_PICC_BATCHNO) { + memcpy(batchNumberData, DESFIRE_DEFAULT_PICC_BATCHNO, + BYTELEN_DESFIRE_DEFAULT_PICC_BATCHNO); + } else { + DEBUG_PRINT_P(PSTR("Makefile error: Default BatchNo bytes = %d != %d"), + DESFIRE_DEFAULT_PICC_BATCHNO, BYTELEN_DESFIRE_DEFAULT_PICC_BATCHNO); + RandomGetBuffer(batchNumberData, 5); + } + #else RandomGetBuffer(batchNumberData, 5); + #endif memcpy(&Picc.BatchNumber[0], batchNumberData, 5); + /* Default production date -- until the user changes them: */ + #ifdef ENABLE_DESFIRE_DEFAULT_PICC_PRODDATE + if (sizeof(DESFIRE_DEFAULT_PICC_PRODDATE) == BYTELEN_DESFIRE_DEFAULT_PICC_PRODDATE) { + Picc.ProductionWeek = DESFIRE_DEFAULT_PICC_PRODDATE[0]; + Picc.ProductionYear = DESFIRE_DEFAULT_PICC_PRODDATE[1]; + + } else { + DEBUG_PRINT_P(PSTR("Makefile error: Default ProdDate bytes = %d != %d"), + DESFIRE_DEFAULT_PICC_PRODDATE, BYTELEN_DESFIRE_DEFAULT_PICC_PRODDATE); + Picc.ProductionWeek = 0x01; + Picc.ProductionYear = 0x05; + } + #else Picc.ProductionWeek = 0x01; Picc.ProductionYear = 0x05; + #endif + /* Assign the default manufacturer ID: */ + #ifdef DESFIRE_DEFAULT_PICC_MANUID + Picc.ManufacturerID = DESFIRE_DEFAULT_PICC_MANUID[0]; + #else Picc.ManufacturerID = DESFIRE_MANUFACTURER_ID; + #endif + #ifdef DESFIRE_DEFAULT_PICC_HWTYPE + Picc.HwType = DESFIRE_DEFAULT_PICC_HWTYPE[0]; + #else Picc.HwType = DESFIRE_TYPE; + #endif + #ifdef DESFIRE_DEFAULT_PICC_HWSUBTYPE + Picc.HwSubtype = DESFIRE_DEFAULT_PICC_HWSUBTYPE[0]; + #else Picc.HwSubtype = DESFIRE_SUBTYPE; + #endif + #ifdef DESFIRE_DEFAULT_PICC_HWPROTOTYPE + Picc.HwProtocolType = DESFIRE_DEFAULT_PICC_HWPROTOTYPE[0]; + #else Picc.HwProtocolType = DESFIRE_HW_PROTOCOL_TYPE; + #endif + #ifdef ENABLE_DESFIRE_DEFAULT_PICC_HWVERS + Picc.HwVersionMinor = DESFIRE_DEFAULT_PICC_HWVERS[0]; + Picc.HwVersionMajor = DESFIRE_DEFAULT_PICC_HWVERS[1]; + #endif + #ifdef DESFIRE_DEFAULT_PICC_SWTYPE + Picc.SwType = DESFIRE_DEFAULT_PICC_SWTYPE[0]; + #else Picc.SwType = DESFIRE_TYPE; + #endif + #ifdef DESFIRE_DEFAULT_PICC_SWSUBTYPE + Picc.SwSubtype = DESFIRE_DEFAULT_PICC_SWSUBTYPE[0]; + #else Picc.SwSubtype = DESFIRE_SUBTYPE; + #endif + #ifdef DESFIRE_DEFAULT_PICC_SWPROTOTYPE + Picc.SwProtocolType = DESFIRE_DEFAULT_PICC_SWPROTOTYPE[0]; + #else Picc.SwProtocolType = DESFIRE_SW_PROTOCOL_TYPE; + #endif + #ifdef ENABLE_DESFIRE_DEFAULT_PICC_SWVERS + Picc.SwVersionMinor = DESFIRE_DEFAULT_PICC_SWVERS[0]; + Picc.SwVersionMajor = DESFIRE_DEFAULT_PICC_SWVERS[1]; + #endif + /* Set the ATS bytes to defaults: */ + #ifdef ENABLE_DESFIRE_DEFAULT_PICC_ATS + if (sizeof(DESFIRE_DEFAULT_PICC_ATS) == BYTELEN_DESFIRE_DEFAULT_PICC_ATS) { + memcpy(&Picc.ATSBytes[0], DESFIRE_DEFAULT_PICC_ATS, + BYTELEN_DESFIRE_DEFAULT_PICC_ATS); + } else { + DEBUG_PRINT_P(PSTR("Makefile error: Default ATS bytes = %d != %d"), + DESFIRE_DEFAULT_PICC_ATS, BYTELEN_DESFIRE_DEFAULT_PICC_ATS); + Picc.ATSBytes[0] = DESFIRE_EV0_ATS_TL_BYTE; + Picc.ATSBytes[1] = DESFIRE_EV0_ATS_T0_BYTE; + Picc.ATSBytes[2] = DESFIRE_EV0_ATS_TA_BYTE; + Picc.ATSBytes[3] = DESFIRE_EV0_ATS_TB_BYTE; + Picc.ATSBytes[4] = DESFIRE_EV0_ATS_TC_BYTE; + Picc.ATSBytes[5] = 0x80; + } + #else Picc.ATSBytes[0] = DESFIRE_EV0_ATS_TL_BYTE; Picc.ATSBytes[1] = DESFIRE_EV0_ATS_T0_BYTE; Picc.ATSBytes[2] = DESFIRE_EV0_ATS_TA_BYTE; Picc.ATSBytes[3] = DESFIRE_EV0_ATS_TB_BYTE; Picc.ATSBytes[4] = DESFIRE_EV0_ATS_TC_BYTE; Picc.ATSBytes[5] = 0x80; + #endif Picc.ATSSize = DESFIRE_DEFAULT_ATS_SIZE; - /* Set the first free slot to 1 -- slot 0 is the PICC app */ + + /* Set the first free slot to 1 -- slot 0 is the PICC app: */ AppDir.FirstFreeSlot = 0; + /* Flush the new local struct data out to the FRAM: */ SynchronizeAppDir(); - /* Initialize the root app data */ + + /* Initialize the root app data: */ CreatePiccApp(); + } void CreatePiccApp(void) { @@ -312,58 +410,123 @@ void CreatePiccApp(void) { } SelectPiccApp(); memset(&Key, 0x00, sizeof(CryptoKeyBufferType)); + #ifdef DESFIRE_DEFAULT_PICC_MASTER_KEY + int keyLength = MIN(strlen(DESFIRE_DEFAULT_PICC_MASTER_KEY), + sizeof(CryptoKeyBufferType)); + if (keyLength > 0) { + memcpy(&Key, (uint8_t *) DESFIRE_DEFAULT_PICC_MASTER_KEY, keyLength); + WriteAppKey(0x00, 0x00, Key, keyLength); + } else { + WriteAppKey(0x00, 0x00, Key, sizeof(CryptoKeyBufferType)); + } + #else WriteAppKey(0x00, 0x00, Key, sizeof(CryptoKeyBufferType)); + #endif SynchronizeAppDir(); SynchronizePICCInfo(); } void FactoryFormatPiccEV0(void) { - /* Wipe PICC data */ + + /* Wipe PICC data: */ memset(&Picc, PICC_FORMAT_BYTE, sizeof(Picc)); - /* Initialize params to look like EV0 */ + + /* Initialize params to look like EV0 (if not overridden by build-time defines): + * NOTE: We are not checking the byte lengths of default, + * build-time-defined arrays. + */ Picc.StorageSize = CardCapacityBlocks; + #ifdef DESFIRE_DEFAULT_PICC_HWVERS + Picc.HwVersionMajor = DESFIRE_DEFAULT_PICC_HWVERS[1]; + Picc.HwVersionMinor = DESFIRE_DEFAULT_PICC_HWVERS[0]; + #else Picc.HwVersionMajor = DESFIRE_HW_MAJOR_EV0; Picc.HwVersionMinor = DESFIRE_HW_MINOR_EV0; + #endif + #ifdef DESFIRE_DEFAULT_PICC_SWVERS + Picc.SwVersionMajor = DESFIRE_DEFAULT_PICC_SWVERS[1]; + Picc.SwVersionMinor = DESFIRE_DEFAULT_PICC_SWVERS[0]; + #else Picc.SwVersionMajor = DESFIRE_SW_MAJOR_EV0; Picc.SwVersionMinor = DESFIRE_SW_MINOR_EV0; - /* Reset the free block pointer */ + #endif + + /* Reset the free block pointer: */ Picc.FirstFreeBlock = DESFIRE_FIRST_FREE_BLOCK_ID; - /* Continue with user data initialization */ + + /* Continue with user data initialization: */ SynchronizePICCInfo(); FormatPicc(); + } void FactoryFormatPiccEV1(uint8_t StorageSize) { - /* Wipe PICC data */ + + /* Wipe PICC data: */ memset(&Picc, PICC_FORMAT_BYTE, sizeof(Picc)); - /* Initialize params to look like EV1 */ + + /* Initialize params to look like EV1 (if not overridden by build-time defines): + * NOTE: We are not checking the byte lengths of default, + * build-time-defined arrays. + */ Picc.StorageSize = StorageSize; + #ifdef DESFIRE_DEFAULT_PICC_HWVERS + Picc.HwVersionMajor = DESFIRE_DEFAULT_PICC_HWVERS[1]; + Picc.HwVersionMinor = DESFIRE_DEFAULT_PICC_HWVERS[0]; + #else Picc.HwVersionMajor = DESFIRE_HW_MAJOR_EV1; Picc.HwVersionMinor = DESFIRE_HW_MINOR_EV1; + #endif + #ifdef DESFIRE_DEFAULT_PICC_SWVERS + Picc.SwVersionMajor = DESFIRE_DEFAULT_PICC_SWVERS[1]; + Picc.SwVersionMinor = DESFIRE_DEFAULT_PICC_SWVERS[0]; + #else Picc.SwVersionMajor = DESFIRE_SW_MAJOR_EV1; Picc.SwVersionMinor = DESFIRE_SW_MINOR_EV1; - /* Reset the free block pointer */ + #endif + + /* Reset the free block pointer: */ InitBlockSizes(); Picc.FirstFreeBlock = DESFIRE_FIRST_FREE_BLOCK_ID; - /* Continue with user data initialization */ + + /* Continue with user data initialization: */ SynchronizePICCInfo(); FormatPicc(); + } void FactoryFormatPiccEV2(uint8_t StorageSize) { - /* Wipe PICC data */ + + /* Wipe PICC data: */ memset(&Picc, PICC_FORMAT_BYTE, sizeof(Picc)); - /* Initialize params to look like EV1 */ + + /* Initialize params to look like EV2 (if not overridden by build-time defines): + * NOTE: We are not checking the byte lengths of default, + * build-time-defined arrays. + */ Picc.StorageSize = StorageSize; + #ifdef DESFIRE_DEFAULT_PICC_HWVERS + Picc.HwVersionMajor = DESFIRE_DEFAULT_PICC_HWVERS[1]; + Picc.HwVersionMinor = DESFIRE_DEFAULT_PICC_HWVERS[0]; + #else Picc.HwVersionMajor = DESFIRE_HW_MAJOR_EV2; Picc.HwVersionMinor = DESFIRE_HW_MINOR_EV2; + #endif + #ifdef DESFIRE_DEFAULT_PICC_SWVERS + Picc.SwVersionMajor = DESFIRE_DEFAULT_PICC_SWVERS[1]; + Picc.SwVersionMinor = DESFIRE_DEFAULT_PICC_SWVERS[0]; + #else Picc.SwVersionMajor = DESFIRE_SW_MAJOR_EV2; Picc.SwVersionMinor = DESFIRE_SW_MINOR_EV2; - /* Reset the free block pointer */ + #endif + + /* Reset the free block pointer: */ Picc.FirstFreeBlock = DESFIRE_FIRST_FREE_BLOCK_ID; - /* Continue with user data initialization */ + + /* Continue with user data initialization: */ FormatPicc(); SynchronizePICCInfo(); + } void GetPiccUid(ConfigurationUidType Uid) { diff --git a/Firmware/Chameleon-Mini/Application/DESFire/DESFireUtils.c b/Firmware/Chameleon-Mini/Application/DESFire/DESFireUtils.c index 3d19f6b3..d0ee1610 100644 --- a/Firmware/Chameleon-Mini/Application/DESFire/DESFireUtils.c +++ b/Firmware/Chameleon-Mini/Application/DESFire/DESFireUtils.c @@ -188,6 +188,22 @@ uint16_t DesfirePreprocessAPDUWrapper(uint8_t CommMode, uint8_t *Buffer, uint16_ return 0; } return (TruncateChecksumBytes ? MAX(0, BufferSize - ChecksumBytes) : BufferSize); + + } + case DESFIRE_COMMS_CIPHERTEXT_AES192: + case DESFIRE_COMMS_CIPHERTEXT_AES256: { + if (!DESFIRE_AES_EXTENDED) { + return 0; + } + #ifdef ENABLE_DESFIRE_AES_EXTENDED + AESDecryptBuffer(&AES_ctx, Buffer, BufferSize); + #endif + memmove(&Buffer[0], &Buffer[BufferSize], BufferSize); + ChecksumBytes = CRYPTO_AES_BLOCK_SIZE; + if (BufferSize <= ChecksumBytes || !checkBufferCMAC(Buffer, BufferSize, ChecksumBytes)) { + return 0; + } + return (TruncateChecksumBytes ? MAX(0, BufferSize - ChecksumBytes) : BufferSize); } case DESFIRE_COMMS_PLAINTEXT: { ChecksumBytes = 2; diff --git a/Firmware/Chameleon-Mini/Application/DESFire/DESFireUtils.h b/Firmware/Chameleon-Mini/Application/DESFire/DESFireUtils.h index 2717647d..9604ca7e 100644 --- a/Firmware/Chameleon-Mini/Application/DESFire/DESFireUtils.h +++ b/Firmware/Chameleon-Mini/Application/DESFire/DESFireUtils.h @@ -68,7 +68,7 @@ bool DesfireCheckParityBits(uint8_t *Buffer, uint16_t BitCount); /* Add utility wrapper functions to perform pre and postprocessing on * the raw input APDU commands sent by the PCD depending on which - * CommMode (PLAINTEXT|PLAINTEXT-MAC|ENCIPHERED-CMAC-3DES|ECIPHERED-CMAC-AES128) + * CommMode (PLAINTEXT|PLAINTEXT-MAC|ENCIPHERED-CMAC-3DES|ECIPHERED-CMAC-AES128/192/256) * setting is active. * * The implementation is adapted from the Java sources at diff --git a/Firmware/Chameleon-Mini/BuildScripts/DESFireGetCustomBuildMakeFlagsFromFile.sh b/Firmware/Chameleon-Mini/BuildScripts/DESFireGetCustomBuildMakeFlagsFromFile.sh new file mode 100644 index 00000000..efa34dae --- /dev/null +++ b/Firmware/Chameleon-Mini/BuildScripts/DESFireGetCustomBuildMakeFlagsFromFile.sh @@ -0,0 +1,90 @@ +#!/bin/bash + +## The DESFire stack portion of this firmware source +## is free software written by Dr. Maxie Dion Schmidt (@maxieds): +## You can redistribute it and/or modify +## it under the terms of this license. +## +## This program 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. +## +## This notice must be retained at the top of all source files where indicated. + +READLINK="" +GREP="" +SED="" +if [[ "$(uname -s)" == "Darwin" ]]; then + # Requires GNU coreutils package: $ brew install coreutils + READLINK=`which greadlink` + GREP=`which ggrep` + SED=`which gsed` +else + READLINK=`which readlink` + GREP=`which grep` + SED=`which sed` +fi + +if [ "$#" -ne 1 ]; then + echo -e "ERROR: Usage: $0 " + exit -1 +fi + +CONFIG_FILE_PATH=`${READLINK} -f $1` +if [ ! -f $CONFIG_FILE_PATH ]; then + echo -e "ERROR: File \"${CONFIG_FILE_PATH}\" does not exist!" + exit -2 +fi + +CUSTOM_CONFIG_MAKEFLAGS="" +CONFIG_SETTING_NAMES=( "UID" "ATS" "ATQA" "ManuID" "HwType" "HwSubtype" "HwProtoType" "HwVers" "SwType" "SwSubtype" "SwProtoType" "SwVers" "BatchNo" "ProdDate" ) + +function getConfigFileParamRHS() { + + configFilePath=$1 + configSettingName=$2 + + # Get the first matching line while ignoring comments: + settingValue=$(cat $configFilePath | $GREP -Ev "^#|^$" | $GREP "${configSettingName}" | head -n 1) + + # Right-side quote the value (possibly empty) of the RHS of the 'var=val' -> 'var=val"' ... + # Without doing this, the next call to the `cut` command will only return the RHS value + # up to the first (white)space character. We need the whole RHS value including spaces + settingValue=$(echo $settingValue | $SED -e 's/=/=\"/g' | $SED -n -e 's/.*=\"\(.*\)$/\"\1\"/p') + + # Get the full RHS value (unquoted): + settingValueUnquoted=$(echo $settingValue | cut -f 2 -d '='| cut -f 2 -d '"') + #settingEvalTextRemoved=$(echo $settingValue | $SED -n -e "s/.*\$\$(\(.*\)).*\$/\1/p"); + + echo -n "${settingValueUnquoted}" + +} + +function formatHexStringToByteArray() { + + byteString=$1 + numBytes=${#byteString} + if [[ "$(( $numBytes % 2 ))" -ne "0" ]]; then + byteString="0${byteString}" + numBytes=$(($numBytes + 1)) + fi + paramByteArray="0x${byteString:0:2}" + if [[ "${numBytes}" -gt "2" ]]; then + for i in $(seq 2 2 $numBytes); do + paramByteArray="${paramByteArray}, 0x${byteString:$(($i - 2)):2}" + done + fi + echo -n "(uint8_t *) { $paramByteArray }" + +} + +for configSettingName in "${CONFIG_SETTING_NAMES[@]}"; do + configSettingValue=$(getConfigFileParamRHS ${CONFIG_FILE_PATH} ${configSettingName}) + configSettingValueAsByteArray=$(formatHexStringToByteArray ${configSettingValue}) + configSettingNameToUpper=`echo -n ${configSettingName} | tr '[:lower:]' '[:upper:]'` + CUSTOM_CONFIG_MAKEFLAGS="${CUSTOM_CONFIG_MAKEFLAGS} -DDESFIRE_DEFAULT_PICC_${configSettingNameToUpper}=${configSettingValueAsByteArray}" +done + +echo -n $CUSTOM_CONFIG_MAKEFLAGS + +exit 0 diff --git a/Firmware/Chameleon-Mini/BuildScripts/custom_build_targets.mk b/Firmware/Chameleon-Mini/BuildScripts/custom_build_targets.mk index 754799d4..ef5ef813 100644 --- a/Firmware/Chameleon-Mini/BuildScripts/custom_build_targets.mk +++ b/Firmware/Chameleon-Mini/BuildScripts/custom_build_targets.mk @@ -76,6 +76,19 @@ desfire-dev: TARGET_CUSTOM_BUILD_NAME:=DESFire_DEV desfire-dev: CONFIG_SETTINGS:=$(SUPPORTED_TAGS_BUILD) -DDEFAULT_CONFIGURATION=CONFIG_NONE $(EXTRA_CONFIG_SETTINGS) desfire-dev: custom-build +desfire-custom-tag: FLASH_DATA_SIZE_CONST:=0F000 # Eight settings (save some space): 4 * 0x2000 +desfire-custom-tag: FLASH_DATA_SIZE:=0x$(FLASH_DATA_SIZE_CONST) +desfire-custom-tag: FLASH_DATA_SIZE_UPPER_CONST:=20000 +desfire-custom-tag: FLASH_DATA_ADDR:=0x$(shell echo $$(( 0x$(FLASH_DATA_SIZE_UPPER_CONST) - 0x$(FLASH_DATA_SIZE_CONST) )) | xargs -0 printf %X) +desfire-custom-tag: SUPPORTED_TAGS_BUILD:=-DCONFIG_MF_DESFIRE_SUPPORT +desfire-custom-tag: EXTRA_CONFIG_SETTINGS:=-DMEMORY_LIMITED_TESTING=1 \ + -DDESFIRE_CRYPTO1_SAVE_SPACE \ + -finline-small-functions \ + $(shell /bin/bash DESFireGetCustomBuildMakeFlagsFromFile.sh ../DESFireCustomConfig/desfire-custom-config.cfg) +desfire-custom-tag: TARGET_CUSTOM_BUILD_NAME:=DESFire_CUSTOM +desfire-custom-tag: CONFIG_SETTINGS:=$(SUPPORTED_TAGS_BUILD) -DDEFAULT_CONFIGURATION=CONFIG_NONE $(EXTRA_CONFIG_SETTINGS) +desfire-custom-tag: custom-build + iso-modes: SUPPORTED_TAGS_BUILD:= \ -DCONFIG_ISO14443A_SNIFF_SUPPORT \ -DCONFIG_ISO14443A_READER_SUPPORT \ diff --git a/Firmware/Chameleon-Mini/Chameleon-Mini-CustomBuild_DESFire.bin b/Firmware/Chameleon-Mini/Chameleon-Mini-CustomBuild_DESFire.bin new file mode 100755 index 00000000..5189cafb Binary files /dev/null and b/Firmware/Chameleon-Mini/Chameleon-Mini-CustomBuild_DESFire.bin differ diff --git a/Firmware/Chameleon-Mini/Chameleon-Mini-CustomBuild_DESFire.eep b/Firmware/Chameleon-Mini/Chameleon-Mini-CustomBuild_DESFire.eep new file mode 100644 index 00000000..f50488af --- /dev/null +++ b/Firmware/Chameleon-Mini/Chameleon-Mini-CustomBuild_DESFire.eep @@ -0,0 +1,14 @@ +:100000000000B52B0707080800000401410090011B +:1000100000000000000000000000000000000000E0 +:1000200000000000000000000000000000000000D0 +:1000300000000000000000000000000000000000C0 +:1000400000000000070708080000040141009001BB +:1000500000000000000000000000000000000000A0 +:100060000000000000000000000000000000000090 +:100070000000000000000000000000000000000080 +:10008000000000000707080800000401410090017B +:100090000000000000000000000000000000000060 +:1000A0000000000000000000000000000000000050 +:1000B0000000000000000000000000000000000040 +:0400C000000000003C +:00000001FF diff --git a/Firmware/Chameleon-Mini/Chameleon-Mini-CustomBuild_DESFire.elf b/Firmware/Chameleon-Mini/Chameleon-Mini-CustomBuild_DESFire.elf new file mode 100755 index 00000000..6f6ec187 Binary files /dev/null and b/Firmware/Chameleon-Mini/Chameleon-Mini-CustomBuild_DESFire.elf differ diff --git a/Firmware/Chameleon-Mini/Chameleon-Mini-CustomBuild_DESFire.hex b/Firmware/Chameleon-Mini/Chameleon-Mini-CustomBuild_DESFire.hex new file mode 100644 index 00000000..5b62830b --- /dev/null +++ b/Firmware/Chameleon-Mini/Chameleon-Mini-CustomBuild_DESFire.hex @@ -0,0 +1,7726 @@ +:10000000BFC70000E3C70000E1C70000DFC7000072 +:10001000DDC70000DBC70000D9C70000D7C700005C +:10002000D5C70000D3C700000C942367CFC70000DA +:10003000CDC70000CBC70000C9C70000C7C700007C +:10004000C5C70000C3C70000C1C70000BFC700008C +:10005000BDC70000BBC70000B9C70000B7C700009C +:10006000B5C70000B3C70000B1C70000AFC70000AC +:10007000ADC70000ABC70000A9C700000C94631215 +:10008000A5C70000A3C700000C94080A0C94D5571C +:100090009DC700009BC7000099C7000097C70000DC +:1000A00095C7000093C7000091C700008FC70000EC +:1000B0008DC700008BC7000089C700000C941C0A84 +:1000C00085C700000C94260A0C94300A0C94F05951 +:1000D0007DC700007BC7000079C7000077C700001C +:1000E00075C7000073C7000071C700006FC700002C +:1000F0006DC700006BC7000069C7000067C700003C +:1001000065C7000063C7000061C700005FC700004B +:100110000C94440A0C94B25759C7000057C700000A +:1001200055C7000053C7000051C700004FC700006B +:100130004DC700000C94205A49C700000C948A5502 +:100140000C94C5090C94120A0C94FC573FC700008C +:100150003DC700000C943A0A0C94185937C70000A8 +:1001600035C7000033C7000031C700002FC70000AB +:100170002DC700002BC7000029C7000027C70000BB +:1001800025C7000023C7000021C700001FC70000CB +:100190001DC700001BC7000019C7000017C70000DB +:1001A00015C7000013C7000011C700000FC70000EB +:1001B0000DC700000BC7000009C7000007C70000FB +:1001C00005C7000003C7000001C70000FFC600000C +:1001D000FDC60000FBC60000F9C60000F7C600001F +:1001E000F5C60000F3C60000F1C60000EFC600002F +:1001F000EDC600000C949E10E9C600004342430087 +:100200004543420041455300444553002531357371 +:1002100000456E63697068657265643A41455332A2 +:10022000353600456E63697068657265643A4145AC +:100230005331393200456E63697068657265643A9E +:1002400041455331323800456E63697068657265A7 +:10025000643A334B3344455300506C61696E7465A6 +:1002600078743A4D414300506C61696E74657874DE +:1002700000253135730050726F644461746500422B +:10028000617463684E6F00537756657273005377DD +:1002900050726F746F547970650053775375627440 +:1002A00079706500537754797065004857566572C8 +:1002B0007300485750726F746F54797065004877B7 +:1002C0005375627479706500487754797065004D94 +:1002D000616E754944004154514100415453002519 +:1002E000323473202534307300004E4F4E450000E9 +:1002F00000000000000000000000000000000000FE +:100300000000015549445F52414E444F4D000000EA +:100310000000000000000000000000025549445F9A +:100320004C4546545F494E4352454D454E5400009E +:1003300000000000035549445F52494748545F4953 +:100340004E4352454D454E540000000000045549AF +:10035000445F4C4546545F44454352454D454E54D9 +:10036000000000000000055549445F5249474854C9 +:100370005F44454352454D454E5400000000000681 +:100380004359434C455F53455454494E475300002D +:1003900000000000000000000753544F52455F4D1D +:1003A000454D0000000000000000000000000000BB +:1003B0000008524543414C4C5F4D454D0000000044 +:1003C0000000000000000000000009544F47474CA7 +:1003D000455F4649454C4400000000000000000015 +:1003E0000000000A53544F52455F4C4F4700000035 +:1003F0000000000000000000000000000B434C4F14 +:100400004E45000000000000000000000000000059 +:1004100000000000000C434C4F4E455F4D46550018 +:10042000000000000000000000000000000000804C +:1004300040C020A060E0109050D030B070F008882C +:1004400048C828A868E8189858D838B878F80484B4 +:1004500044C424A464E4149454D434B474F40C8CCC +:100460004CCC2CAC6CEC1C9C5CDC3CBC7CFC028260 +:1004700042C222A262E2129252D232B272F20A8ACC +:100480004ACA2AAA6AEA1A9A5ADA3ABA7AFA068654 +:1004900046C626A666E6169656D636B676F60E8E6C +:1004A0004ECE2EAE6EEE1E9E5EDE3EBE7EFE018106 +:1004B00041C121A161E1119151D131B171F109899C +:1004C00049C929A969E9199959D939B979F9058524 +:1004D00045C525A565E5159555D535B575F50D8D3C +:1004E0004DCD2DAD6DED1D9D5DDD3DBD7DFD0383D0 +:1004F00043C323A363E3139353D333B373F30B8B3C +:100500004BCB2BAB6BEB1B9B5BDB3BBB7BFB0787C3 +:1005100047C727A767E7179757D737B777F70F8FDB +:100520004FCF2FAF6FEF1F9F5FDF3FBF7FFFBD5AE2 +:10053000C85AC75AC65AC65AC55AC45AC35ABE5AC6 +:10054000C15AC25A00000001002256A756C656CE14 +:1005500026D2266B216F216C214C23EE26F026003B +:10056000100700002256A756C656D626DA266B215B +:100570006F216C214C23EE26F02600080700002294 +:1005800056A756C656DE26E2266B216F216C214CFB +:1005900023EE26F02600100700002256A756C65666 +:1005A000E626EA266B216F216C214C23EE26F026ED +:1005B0000010070000004E4F4E45000000000000F4 +:1005C0000000000000000000000000000000014DDD +:1005D000465F444553464952450000000000000074 +:1005E00000000000000000024D465F4445534649AC +:1005F00052455F324B4556310000000000000000BC +:10060000034D465F444553464952455F344B45567A +:10061000310000000000000000044D465F444553D7 +:10062000464952455F344B455632000000000000F9 +:100630000000004E4F4E450000000000000000008A +:10064000000000000000000000000001504F57456E +:1006500052454400000000000000000000000000BF +:1006600000000000025445524D494E414C5F434F3B +:100670004E4E000000000000000000000003544542 +:10068000524D494E414C5F525854580000000000F2 +:100690000000000000000453455454494E475F4396 +:1006A00048414E47450000000000000000000005E2 +:1006B0004D454D4F52595F53544F52454400000031 +:1006C0000000000000000000064D454D4F52595FEC +:1006D0004348414E47454400000000000000000030 +:1006E0000008434F4445435F52580000000000009B +:1006F0000000000000000000000009434F44454393 +:100700005F545800000000000000000000000000DE +:10071000000000074649454C445F44455445435456 +:100720004544000000000000000000000A4C4F4754 +:100730004D454D5F46554C4C000000000000000048 +:1007400000000000001E034300680061006D0065AA +:10075000006C0065006F006E002D004D0069006E9A +:1007600000690000002A034B0061007300700065FF +:100770000072002000260020004F00730077006107 +:10078000006C006400200047006D0062004800001B +:10079000000403090409023E00020100C0320904FA +:1007A00000000102020100052400100104240206D9 +:1007B0000524060001070582030800FF0904010063 +:1007C000020A000000070504021000050705830265 +:1007D0001000051201100102000008D016B2040139 +:1007E0000001020001004F4646000000000000002A +:1007F0000000000000000000000000000000014DAB +:10080000454D4F525900000000000000000000005C +:1008100000000000000000024C49564500000000A6 +:1008200000000000000000000000000000000000C8 +:10083000004E4F4E45000000000000000000000088 +:10084000000000000000000000014F4E000000000A +:100850000000000000000000000000000000000098 +:100860000000024F464600000000000000000000AB +:100870000000000000000000000000033100000044 +:100880000000000000000000000000000000000068 +:100890000000000004320000000000000000000022 +:1008A0000000000000000000000000000005330010 +:1008B0000000000000000000000000000000000038 +:1008C00000000000000006340000000000000000EE +:1008D0000000000000000000000000000000000711 +:1008E00035000000000000000000000000000000D3 +:1008F00000000000000000000D0A000D0A000D0AB3 +:1009000000643130303A4F4B00000000000000001E +:1009100000000000000000000000000000000000D7 +:100920000000653130313A4F4B205749544820542C +:1009300045585400000000000000000000000000C6 +:100940000000006E3131303A57414954494E47203A +:10095000464F5220584D4F44454D000000000000C6 +:1009600000000000C83230303A554E4B4E4F574EC3 +:1009700020434F4D4D414E44000000000000000058 +:100980000000000000C93230313A494E56414C490E +:100990004420434F4D4D414E44205553414745005F +:1009A000000000000000CA3230323A494E56414C35 +:1009B000494420504152414D4554455200000000E9 +:1009C00000000000000000783132303A46414C53BC +:1009D00045000000000000000000000000000000D2 +:1009E0000000000000000000793132313A545255C5 +:1009F00045000000000000000000000000000000B2 +:100A0000000000000000000000CB3230333A5449AF +:100A10004D454F555400000000000000000000004C +:100A20000000000000000000000056455253494FEE +:100A30004E00000000000000000000000000000068 +:100A40002969434F4E46494700000000000000005E +:100A500000000000000050694A6955494400000048 +:100A60000000000000000000000000000000B86965 +:100A70007A69524541444F4E4C5900000000000035 +:100A8000000000000000126A066A55504C4F4144B5 +:100A9000000000000000000000003E6A00000000AE +:100AA0000000444F574E4C4F4144000000000000EE +:100AB0000000436A00000000000052455345540006 +:100AC00000000000000000000000486A0000000074 +:100AD000000055504752414445000000000000000E +:100AE0000000526A0000000000004D454D53495A75 +:100AF00045000000000000000000000000000000B1 +:100B00005C6A55494453495A450000000000000002 +:100B10000000000000000000736A52425554544F18 +:100B20004E00000000000000000000000000906A7D +:100B3000886A52425554544F4E5F4C4F4E47000006 +:100B4000000000000000B06AA86A4C425554544F9F +:100B50004E00000000000000000000000000D06A0D +:100B6000C86A4C425554544F4E5F4C4F4E4700009C +:100B7000000000000000F06AE86A4C454447524516 +:100B8000454E000000000000000000000000106B57 +:100B9000086B4C4544524544000000000000000032 +:100BA000000000000000306B286B50494E00000030 +:100BB00000000000000000000000000000004D6B7D +:100BC000486B4C4F474D4F4445000000000000006B +:100BD000000000000000676B616B4C4F474D454DB6 +:100BE0000000000000000000000000000000000005 +:100BF0007E6B4C4F47444F574E4C4F4144000000D2 +:100C00000000A26B0000000000004C4F4753544FFF +:100C100052450000000000000000A76B000000002B +:100C200000004C4F47434C4541520000000000007B +:100C30000000AB6B00000000000053455454494EC7 +:100C40004700000000000000000000000000B46B3E +:100C5000AF6B434C45415200000000000000000013 +:100C60000000BC6B00000000000053544F524500D0 +:100C700000000000000000000000C06B0000000049 +:100C80000000524543414C4C0000000000000000B1 +:100C90000000C46B00000000000043484152474977 +:100CA0004E470000000000000000000000000000AF +:100CB000C86B48454C5000000000000000000000D8 +:100CC0000000CE6B000000000000525353490000AA +:100CD0000000000000000000000000000000000014 +:100CE0000A6C5359535449434B0000000000000064 +:100CF0000000000000000000476C54494D454F556E +:100D00005400000000000000000000000000816CA2 +:100D1000626C5448524553484F4C44000000000058 +:100D2000000000000000EB6CD26C4155544F434171 +:100D30004C494252415445000000796D00000000CA +:100D400000004649454C440000000000000000003F +:100D50000000000000003E6D696D44465F5345543D +:100D60004844520000000000000000000000312E46 +:100D7000000044465F434F4D4D5F4D4F44450000DA +:100D8000000000000000692F000044465F454E430C +:100D90004D4F444500000000000000000000DC2F23 +:100DA000000044465F4B45595343525542000000F2 +:100DB00000006230000000000000000000000000A1 +:100DC0000000000000000000000000000000000023 +:100DD000000025632C25630025356400416E7920D1 +:100DE000696E74656765722066726F6D203020745D +:100DF0006F2025752E205265666572656E636520CD +:100E0000766F6C746167652077696C6C2062652011 +:100E100028564343202A205448524553484F4C44B7 +:100E2000202F203430393529206D562E00257500AD +:100E30002535640030203D206E6F2074696D656F2C +:100E400075740D0A312D363030203D203130302080 +:100E50006D73202D203630303030206D7320746952 +:100E60006D656F7574002575206D730025342E3403 +:100E70005800253575206D56002575202866726F3F +:100E80006D207768696368202575206E6F6E2D76FA +:100E90006F6C6174696C65290025750025750025E6 +:100EA000632C25630052414E444F4D004E4F205558 +:100EB00049442E004368616D656C656F6E4D696EC7 +:100EC000692052657647202553207573696E672027 +:100ED0004C55464120255320636F6D70696C6564E5 +:100EE0002077697468204156522D4743432025538B +:100EF0002E204261736564206F6E20746865206FD8 +:100F000070656E2D736F75726365204E4643207455 +:100F10006F6F6C204368616D656C656F6E4D696EB7 +:100F2000692E2068747470733A2F2F67697468751E +:100F3000622E636F6D2F656D7365632F4368616DFE +:100F4000656C656F6E4D696E6920636F6D6D697458 +:100F500020255300323032362D30322D31330031DE +:100F6000353131313500392E352E30003766633258 +:100F7000363535006364696E6F70737578585B0041 +:100F800011241FBECFEFCDBFDFE3DEBF00E00CBFFB +:100F900018BE19BE1ABE1BBE13E2A0E0B0E2EEE519 +:100FA000FFEE00E00BBF02C007900D92A835B1071D +:100FB000D9F71BBE2DE2A8E5B3E201C01D92AB3804 +:100FC000B207E1F70E946E530C94AD770C941A6748 +:100FD000F190E190D190C190B190A19091908190C9 +:100FE0000B941B942B943B944B945B946B947B9449 +:100FF0008B949B94AB94BB94CB94DB94EB94FB9439 +:101000000895F801D894E4DF5894E2DFD894E0CF53 +:10101000F801D894DDDF5894DBDFF801D894D8CFFD +:10102000F801D894D5CFF8015894D2CFF801709632 +:101030005894CEDFF8013896D894CADFF801589456 +:10104000C7CFF8015894C4DFD894C2DFF801589490 +:10105000BFCFFF90EF90DF90CF90BF90AF909F9069 +:101060008F907F906F905F904F903F902F901124C2 +:1010700008952F923F924F925F926F927F928F923C +:101080009F92AF92BF92CF92DF92EF92FF920F9317 +:101090001F93FC017190619051904190319021908B +:1010A000119001908A01BCDFFB0171926192519213 +:1010B000419231922192119201921F910F91C9CFC9 +:1010C0002F923F924F925F926F927F928F929F9258 +:1010D000AF92BF92CF92DF92EF92FF920F931F9346 +:1010E000FB0171906190519041903190219011904D +:1010F00001908A0198DFFC017192619251924192B4 +:1011000031922192119201921F910F91A2CF2F92B1 +:101110003F924F925F926F927F928F929F92AF9287 +:10112000BF92CF92DF92EF92FF920F931F93FB013A +:101130007190619051904190319021901190019067 +:101140008A017FDFFC01719261925192419231924A +:101150002192119201921F910F917BCF2F923F927A +:101160004F925F926F927F928F929F92AF92BF92B7 +:10117000CF92DF92EF92FF920F931F93FB0171903A +:1011800061905190419031902190119001908A018D +:101190004DDFFC0171926192519241923192219204 +:1011A000119201921F910F9154CF2F923F924F9223 +:1011B0005F926F927F928F929F92AF92BF92CF92E7 +:1011C000DF92EF92FF920F931F93FC017190619059 +:1011D0005190419031902190119001908A0118DF37 +:1011E000FB0171926192519241923192219211923E +:1011F00001921F910F912DCF2F923F924F925F92AC +:101200006F927F928F929F92AF92BF92CF92DF9216 +:10121000EF92FF920F931F93FC0171906190519098 +:10122000419031902190119001908A01EADEFB01FA +:101230007192619251924192319221921192019256 +:101240001F910F9106CF2F923F924F925F926F9214 +:101250007F928F929F92AF92BF92CF92DF92EF9246 +:10126000FF92CF93DF93EB01DA01BF01F901719097 +:101270006190519041903190219011900190F9909E +:10128000E990D990C990B990A990999089907F24BC +:101290006E245D244C243B242A2419240824FB01B9 +:1012A00009957D926D925D924D923D922D921D9287 +:1012B0000D92019721F7D9017D926D925D924D9229 +:1012C0003D922D921D920D92DF91CF91C2CE2F9221 +:1012D0003F924F925F926F927F928F929F92AF92C6 +:1012E000BF92CF92DF92EF92FF92CF93DF93EB0109 +:1012F000DA01BF01788069805A804B803C802D8064 +:101300001E800F80FB010995F901F190E190D190C9 +:10131000C190B190A190919081907F246E245D2422 +:101320004C243B242A2419240824F990E990D990CC +:10133000C990B990A99099908990F901F192E192A0 +:10134000D192C192B192A192919281927D926D922D +:101350005D924D923D922D921D920D92019751F604 +:10136000DF91CF9176CEF8E0E8E06DCFF8E0E8E0ED +:10137000AECFF8E0E1E267CFF8E0E1E2A8CFF8E035 +:10138000E1E061CFF8E0E6E1A2CF0F9200240F93F5 +:101390002F933F934F935F930FB70F93EF93FF9369 +:1013A000EAB1FBB15191442735B124B1569578F497 +:1013B00000928C080092000806E10A95F1F700C03F +:1013C00001E00093000803E000938C0804C00AE1E8 +:1013D0000A95F1F700002150304019F40E94A057FF +:1013E0000CC04F5F477011F4519102C000C000C0A3 +:1013F0000AE00A95F1F700C0D9CFFF91EF910F9164 +:101400000FBF5F914F913F912F910F910F901895C2 +:10141000EF93FF93E0912729F09128290995FF91F7 +:10142000EF911895EF93FF93E0912929F0912A29E4 +:101430000995FF91EF911895EF93FF93E091232980 +:10144000F09124290995FF91EF911895EF93FF935F +:10145000E0912129F09122290995FF91EF911895AA +:10146000EF93FF93E0911F29F09120290995FF91B7 +:10147000EF911895EF93FF93E0911D29F0911E29AC +:101480000995FF91EF911895EF93FF93E09125292E +:10149000F09126290995FF91EF9118953BB78BBFE5 +:1014A000FB01879196913BBF08953BB78BBFCB0162 +:1014B00042E20D94F00F3BB70B0143E20D94F00FA5 +:1014C0003BB78BBFCB0145E20D94F00F3BB746E233 +:1014D00008C02091CF0127FDFCCF22272093CA010D +:1014E00008954093CA0128ED31E0209334003093F1 +:1014F000CB016091C4017091C5018091C60199270B +:101500000895FC014093CA0184910895CF93DF931D +:10151000EC01FC0170968BE0DF011D928A95E9F7E2 +:1015200082E08C83898783E08E8761E0CE0101961B +:10153000D0D4882361F061E0CE010696CAD4882316 +:1015400031F061E0CE010B96DF91CF91C2C480E013 +:10155000DF91CF910895CF93DF93FC01EB01809150 +:101560005B238430C1F484899589A689B789892B46 +:101570008A2B8B2B81F08181C9D3FE010190002041 +:10158000E9F73197BF016C1B7D0B50E040E0CE01C5 +:10159000DF91CF91A7C282E0DF91CF9108950F93A1 +:1015A0001F93CF93DF93FC01EB018A0180915B23B2 +:1015B000843099F484899589A689B789892B8A2BE7 +:1015C0008B2B59F08181A2D350E040E0B801CE01CD +:1015D000DF91CF911F910F9185C282E0DF91CF9172 +:1015E0001F910F910895CF93FC01C62F80915B232B +:1015F000843011F584899589A689B789892B8A2B2E +:101600008B2BD1F0818182D38091652390916623C9 +:10161000FC01EF5BFF4F2081805C9F4FFC018081CC +:10162000281728F48C2F62D380E0CF91089526D319 +:10163000D3D48823B9F3F9CF82E0F7CFCF93DF93E8 +:10164000FC0180915B238430B9F584899589A68952 +:10165000B789892B8A2B8B2B79F1818157D32091E4 +:1016600069238091652390916623FC0127FF0BC0BD +:10167000EF5BFF4F208130E0232B69F4C0E08C2F1B +:10168000DF91CF910895E05CFF4F2081319630814A +:10169000231B330BF1CFFC01EF5BFF4FD081805C4C +:1016A0009F4FFC01C081EAD2DC1740F395D4C82FCC +:1016B0008111E5CFE3D2E3CFC2E0E1CFCF93DF9357 +:1016C000EC0180915B23843089F48C899D89AE89FB +:1016D000BF89892B8A2B8B2B49F0898117D33ED365 +:1016E000882321F0CE01DF91CF91A8CFDF91CF9158 +:1016F0000895CF93DF93FC0180915B23843031F018 +:10170000CFEFDFEFCE01DF91CF91089584899589E6 +:10171000A689B789892B8A2B8B2B91F38681F6D2E8 +:1017200029D3882369F320916923809165239091BF +:101730006623FC01EF5BFF4F27FF1AC0808190E01A +:10174000CFEFDFEF892B19F0C1D2C82FD0E0209165 +:1017500069238091652390916623FC01EF5BFF4F25 +:1017600027FF0EC0208130E0232B61F6A0D2CACF24 +:10177000805C9F4FDC018C919081891B990BE0CF9D +:10178000805C9F4FDC012C918081281B330BECCFB8 +:101790000895CF92DF92EF92FF920F931F93CF9312 +:1017A000DF93EC01FFD2882399F028818091602398 +:1017B000909161232817190659F480915D23823294 +:1017C00009F47CC070F4803209F443C08132E9F03E +:1017D000DF91CF911F910F91FF90EF90DF90CF900D +:1017E00008958332A9F780915C23813289F7F2D280 +:1017F000DFD360915E23CE01DF91CF911F910F91D6 +:10180000FF90EF90DF90CF90C3CF80915C23813A1F +:10181000F9F6E0D2A3D28823E9F3CC88DD88EE88FC +:10182000FF888C2D63D28D2D61D28E2D5FD28F2DAE +:101830005DD2888D5BD2898D59D28A8D57D21ED2C6 +:10184000DF91CF911F910F91FF90EF90DF90CF909C +:10185000AFC380915C23813209F0BACFBBD28AD268 +:10186000882339F133D2F82E31D2182F2FD2082FF6 +:101870002DD2402F50E070E060E0BA015527442798 +:10188000782B4F29512B4C8B5D8B6E8B7F8B1ED20F +:10189000888F1CD2898F1AD28A8F09D289D3CE0120 +:1018A000DF91CF911F910F91FF90EF90DF90CF903C +:1018B0006FCF80915B238111D2CF8ACF80915C233F +:1018C000813209F085CF86D273D380915E239091C7 +:1018D0005F23888B998BCE01DF91CF911F910F9160 +:1018E000FF90EF90DF90CF9053CFEF92FF920F9346 +:1018F0001F93CF93DF930F920F92CDB7DEB70CE516 +:1019000013E278010F5F1F4FE1D1F7018083F3E20B +:1019100004361F07B1F70E942B6E44D2882379F05A +:1019200080915C2390915D23953009F483C0A8F4E5 +:10193000292F2D7F213009F450C0992371F132D223 +:10194000882311F047D272D20F900F90DF91CF9180 +:101950001F910F91FF90EF900895983009F47CC08B +:10196000993009F480C0963051F78058823038F7AA +:10197000AE014F5F5F4F6091602380915E23909135 +:101980005F230E94545C8C01892BC9F223D2B801D9 +:1019900089819A81FAD08BD1D2CF803889F0823870 +:1019A00071F6809160238F70B1D1E0916723F0913F +:1019B0006823118112FB112710F980E0A7D106C01E +:1019C00010915923809158238111126003D2812FE5 +:1019D0008DD180E08BD152D171C0882309F460C0D1 +:1019E000823009F0ACCF80915E23811164C01091E8 +:1019F00060231F7009F4A3CF812F88D180915D23CC +:101A0000833011F413D257C0E0916723F09168231B +:101A100081818B7F818384E8189FF0011124E55533 +:101A2000FC4D1082E0916723F091682380818E7FC6 +:101A3000808341C0811183CF10915E231F77CAD16B +:101A4000B7D28CD18823E9F31093C30482E011113B +:101A500083E080935B2373CF803809F070CFBAD1D5 +:101A600080915A23B7CF81116ACF80915E23823053 +:101A700008F065CFAFD180915E2380935A2398D22E +:101A800080915A23882311F084E005C08091C3041B +:101A90008111FACF81E080935B230E94276E4FCFA4 +:101AA00080915E23813009F04ACF81E0933009F0C4 +:101AB00080E08093582380E029D18CD179D23FCF28 +:101AC0000895CF9380915B23882351F0C0916923BF +:101AD00080E01CD167D1811108DF8C2FCF9116C116 +:101AE000CF910895AF92BF92CF92DF92FF920F9362 +:101AF0001F93CF93DF936C01EB018A016DD2F82E17 +:101B000081112AC00115110539F0F80180819181F8 +:101B1000C81BD90BC80ED91EB12CA12C2097E1F0FF +:101B20008091652390916623FC01EF5BFF4F20813C +:101B3000805C9F4FFC0180812817F0F09FD0C1DFAF +:101B400001151105A1F0F80180819181A80EB91E3F +:101B5000A082B18285E0F82E8F2DDF91CF911F9169 +:101B60000F91FF90DF90CF90BF90AF90089534D247 +:101B70008823A1F2F82EF0CFF60181916F01B6D043 +:101B80002197FFEFAF1ABF0AC9CFDF92EF92FF9202 +:101B90000F931F93CF93DF937C01EB018091692317 +:101BA0008068B4D080916223909163238C179D0745 +:101BB00070F0209709F462D0D12C209751F4D11005 +:101BC00008C0D8D0882309F44CC080E007C0EC01DD +:101BD000F3CF80915B23811109C082E0DF91CF9127 +:101BE0001F910F91FF90EF90DF900895853011F4D1 +:101BF00083E0F4CFD7D0882311F081E0EFCFBAD0C3 +:101C00008111DFCFABD08823C1F22091692380916D +:101C1000652390916623FC01EF5BFF4F27FF0FC008 +:101C2000008110E0209719F00830110580F0DD24C4 +:101C3000D3940830110509F0D12C20D0BECF805CA0 +:101C40009F4FDC010C918081081B110BEBCFF7013A +:101C500084914CD0FFEFEF1AFF0A21970F5F1F4FBF +:101C6000E1CF80915B23882309F4B7CF853009F455 +:101C7000BFCF98D0882309F4A4CFBFCFE0916523CC +:101C8000F0916623EF5BFF4F8081E0916723F09135 +:101C9000682390E08283938380818D798083E091B3 +:101CA0006523F0916623EF5BFF4F10820895E0916A +:101CB0006723F091682380818D798083E09165238B +:101CC000F0916623EF5BFF4F1082089580916523AA +:101CD00090916623DC01AF5BBF4FEC9121E02E0FAA +:101CE0002C93E80FF92FF11D808108952091652331 +:101CF00030916623D901AF5BBF4FEC9191E09E0F0D +:101D00009C93E20FF32FF11D80830895282F2F70ED +:101D1000809369234091C6045091C70494E8299F99 +:101D2000B001112490E1299F9001112487FF0FC079 +:101D300064557C4D6093652370936623285F3F4F05 +:101D4000240F351F20936723309368230895665925 +:101D50007C4D6093652370936623F2CF8091692355 +:101D60008068D4DFE0916723F091682380818695B5 +:101D700081700895809169238F77C8DFE091672390 +:101D8000F0916823808185FF0BC082819381E0916F +:101D90006523F0916623E05CFF4F808381E0089526 +:101DA00080E00895809169238F77B0DFE091672309 +:101DB000F0916823808184FF0BC082819381E09140 +:101DC0006523F0916623E05CFF4F808381E00895F6 +:101DD00080E00895809169238F7798DFE0916723F1 +:101DE000F091682380818D788083E0916723F09162 +:101DF0006823808181608083E0916523F091662370 +:101E0000EF5BFF4F10828091692380687FDFE09154 +:101E10006723F0916823808181608083E09165234E +:101E2000F0916623EF5BFF4F10820895E0916723E6 +:101E3000F0916823818184608183E0916723F09130 +:101E400068238181807C803459F480916923805893 +:101E50005DDFE0916723F091682381818460818355 +:101E600008951F93CF93DF93C82F162FD42F4EDFE3 +:101E7000E0916723F09168231182E0916723F0914C +:101E800068238C2F86FB880F880B80F982708083F3 +:101E9000E0916723F09168231183E0916723F0912B +:101EA0006823128213828091652390916623848334 +:101EB0009583CC0FCC0BCD23FC01E05CFF4FC0839E +:101EC0008F5B9F4FFC01108281E0DF91CF911F91CA +:101ED0000895CF92DF92EF92FF920F931F93CF93CB +:101EE000DF93D62E8C01C12CCD1002C081E01AC028 +:101EF000F801D081D11104C0C3940B5F1F4FF4CF00 +:101F0000E180F280848128E0823008F028E188E0D6 +:101F100090E0C0E08E159F0570F08D2F8F7085309A +:101F200070F080E0DF91CF911F910F91FF90EF90C3 +:101F3000DF90CF900895CF5F880F991FEBCFF1E42A +:101F4000EF16F10470F7F8018381C22BCF7E88234E +:101F500021F0813079F0C06806C0C0644E2D6C2F2E +:101F600080E88D0F7EDF4E2D6C2F8D2F7ADF811153 +:101F7000C3CFD7CFC06CF7CF90E080E0A091C6046C +:101F8000B091C7049C0144E0220F331F4A95E1F74A +:101F9000A20FB31F19961C92E091C604F091C704DA +:101FA000E20FF31F118201968530910539F70895EC +:101FB00080915C2387FF0CC0DDDE811178CE80919B +:101FC0005B238111F9CF089580915B238823D9F396 +:101FD000C5DE8823C9F352CE0F931F93CF93E091B0 +:101FE000C604F091C704E05BFF4F00811181C4E695 +:101FF0008091692387FF11C0B1DE811109C08091F2 +:102000005B2381110CC082E004C0C22F8C01F0CF91 +:1020100080E0CF911F910F910895ACDEEECF853017 +:10202000C1F0E0916723F0916823818182FD13C0A4 +:10203000E091C604F091C704E05BFF4F808191817D +:102040000817190719F32FEF2C0FC111DECF84E009 +:10205000E0CF83E0DECF81E0DCCF63D069D0E0EC7D +:10206000F4E081818E7F818380818F7780831092DD +:1020700064230895CF93DF93E0E4F0E01482848139 +:10208000836084834ED054D0C0ECD4E088818F77B5 +:10209000888388818068888310925B2310925A23FA +:1020A000109258231092592388818064888348E0D5 +:1020B00068E480E8D6DE48E068E480E0D2DE888527 +:1020C00080648887898181608983DF91CF910895B9 +:1020D000CF93DF933FB7F894C0ECD1E022E02A879A +:1020E000EAE1F0E0E491A0ECB4E0DA96EC93DA9760 +:1020F000EBE1F0E0E491DB96EC93DB971A868FEF4F +:1021000095E28E7F16968D939C93179784E18C931E +:1021100018962C933FBF81E080936423DF91CF9189 +:10212000A9CFE0ECF4E08085837080871186089564 +:10213000E0ECF4E08FEF8287848708951F920F927E +:102140000FB60F92112408B60F9218BE09B60F925F +:1021500019BE0BB60F921BBE2F933F934F935F9305 +:102160006F937F938F939F93AF93BF93EF93FF935F +:102170008091CA0487FF08C08091C80487FF04C00B +:1021800080E88093CA049CDC8091CA0486FF07C063 +:1021900080E48093CA0410925B230E94166E8091A3 +:1021A000CA0485FF0CC080E28093CA0480915A2340 +:1021B0008823A1F184E080935B230E94056E8091C7 +:1021C000CA0484FF14C080E18093CA0482E0809333 +:1021D0005B2310925A231092C304CEDE48E068E4D9 +:1021E00080E83FDE48E068E480E03BDE69DCFF91A8 +:1021F000EF91BF91AF919F918F917F916F915F917F +:102200004F913F912F910F900BBE0F9009BE0F90F1 +:1022100008BE0F900FBE0F901F9018958091C304B9 +:10222000811102C081E0C7CF83E0C5CF0F931F9318 +:10223000CF93DF9300D000D0CDB7DEB780912002DE +:102240008068809320028091230280FFFCCF81E090 +:1022500080932302A0911002B0911102AE5BB109EC +:10226000B7FF02C0B0E0A0E020E038EB4BE050E068 +:102270000E940C706B837C838D839E838C0122274C +:102280003327E091B32BF091B42B978186814D8158 +:102290005E81443F5140D8F4973019F490E1909317 +:1022A000622B873019F480E18093612B80915C2B45 +:1022B000882329F0E0914E2BF0914F2B199526960B +:1022C000CDBFDEBFDF91CF911F910F910895973061 +:1022D00019F491E19093622B873019F481E1809396 +:1022E000612B809151268F5F6FE00E94EC6F90937D +:1022F00051269111E4CF19830A83E091692BF09163 +:102300006A2B42E0BE016F5F7F4F88E41995D7CFFB +:102310000895E0ECF0E080818068808308959091DA +:10232000C100917881E009F080E00895E0ECF0E0F0 +:102330008181816081830895E0ECF0E08181806893 +:1023400081830895862B8093C0000895862B806139 +:102350008093C00008959C01205F3F4FFC010196CF +:1023600040814093C30082179307C1F708959C01F1 +:10237000205F3F4FFC0101964091C30040838217CC +:102380009307C1F708959C01205F3F4FFC01019620 +:1023900040814093C20082179307C1F708959C01C2 +:1023A000205F3F4FFC0101964091C200408382179D +:1023B0009307C1F70895EF92FF920F931F93CF9366 +:1023C000DF938C01EB017A0180E28093C00080935F +:1023D000C00000001092C00060E0211164E080E0C5 +:1023E000B1DF81E88093C1001092C400C701B3DF60 +:1023F00080E11092C2008150E1F7C801C4DF89DF9B +:102400008EDF8111FDCFCE01CADFDF91CF911F9109 +:102410000F91FF90EF908ACFEF92FF920F931F934F +:10242000CF93DF93CDB7DEB7A097CDBFDEBF8C01D2 +:102430007B0180E28093C00000001092C000809376 +:10244000C00080E1E8E3F0E2DE01119601900D9218 +:102450008A95E1F720E0BE016F5F7F4FCB01ABDFD4 +:102460008091C10087FD2DC0CE01419680DF5EDFE7 +:1024700080E28093C00000001092C00060E080E025 +:1024800065DF81E88093C1001092C400CE014196BF +:1024900062DF80E11092C2008150E1F7C70173DF73 +:1024A00038DF3DDF8111FDCFC80179DF3FDFA09626 +:1024B000CDBFDEBFDF91CF911F910F91FF90EF90C5 +:1024C00008953ADFD5CF1F920F920FB60F921124C5 +:1024D00008B60F9218BE09B60F9219BE0BB60F922E +:1024E0001BBE2F933F934F935F936F937F938F9375 +:1024F0009F93AF93BF93EF93FF93E0916326F09187 +:102500006426309709F01995FF91EF91BF91AF9133 +:102510009F918F917F916F915F914F913F912F91FB +:102520000F900BBE0F9009BE0F9008BE0F900FBE0C +:102530000F901F901895FC01892B69F081E0808332 +:102540001182128284E0848380915226813011F4BA +:102550008383089513820895CF93DF93FC01892B21 +:10256000B9F080E28093C000A3E5B6E280E1ED011E +:1025700019928A95E9F784819281892B9081892B20 +:102580008093C00088E891E180936326909364264D +:10259000DF91CF9108952F923F924F925F926F9269 +:1025A0007F928F929F92AF92BF92CF92DF92EF92E3 +:1025B000FF920F931F93CF93DF93CDB7DEB7609752 +:1025C000CDBFDEBF4B017A0169019C012F7033271B +:1025D000232B09F0B9C0C114D10441F4E3E5F6E2BC +:1025E00020E1DF011D922A95E9F76F010F961C018A +:1025F00084E0369427948A95E1F75401B0E1AB0E5C +:10260000B11C90E080E02601E0E14E0E511C8215E5 +:102610009305F9F48091C10087FF99C08DDE809108 +:10262000C100807890E06096CDBFDEBFDF91CF9192 +:102630001F910F91FF90EF90DF90CF90BF90AF90E0 +:102640009F908F907F906F905F904F903F902F90D2 +:1026500008953C01FFEF6F1A7F0A20915226213026 +:1026600009F04FC0892B91F580E1F401DE0111964C +:1026700001900D928A95E1F7C601AE014F5F5F4F61 +:1026800048165906C9F421E0A801B701CE01019608 +:1026900092DE2614370441F480E1FE013196D60122 +:1026A00001900D928A95E1F7F0E1EF0EF11C20E127 +:1026B000A20EB11CC301ABCFDA012D91FC01319107 +:1026C000CF012327FA012083AD01DACF80E1F701A2 +:1026D0007097DE01119601900D928A95E1F7C50180 +:1026E0004097AE014F5F5F4F8A159B0561F2DA019B +:1026F0002D91FC013191CF012327FA012083AD01F7 +:10270000F3CF80E1F5017097DE01119601900D92F3 +:102710008A95E1F7C601AE014F5F5F4F84159505BD +:1027200049F421E0A801B701CE01019644DE80E121 +:10273000F701B5CFDA012D91FC013191CF012327AB +:10274000FA012083AD01EACF8EEB90E06CCF90E0F0 +:1027500080E069CF2F923F924F925F926F927F926B +:102760008F929F92AF92BF92CF92DF92EF92FF92A1 +:102770000F931F93CF93DF93CDB7DEB7AA97CDBF4B +:10278000DEBF6B017A0139012801232B41F4E3E517 +:10279000F6E220E1DF011D922A95E9F73F011C01D5 +:1027A000BFE02B0E311C24E0369427942A95E1F7E4 +:1027B000FC01EF70FF27EFA3F8A7912C812C930168 +:1027C000205F3F4F2DA33EA35E0131E1A30EB11C5C +:1027D0008F70A82FB0E0A9A7BAA7FE013196E9A390 +:1027E000FAA382149304F9F48091C10087FFEAC030 +:1027F000A3DD8091C100807890E0AA96CDBFDEBFB6 +:10280000DF91CF911F910F91FF90EF90DF90CF90CC +:10281000BF90AF909F908F907F906F905F904F9000 +:102820003F902F90089594012F5F3F4F2BA33CA31F +:10283000860180915226813009F080C0221633062D +:1028400021F48FA198A5892BD1F5A201B701C5016B +:10285000E3DD80E1F501D60101900D928A95E1F763 +:10286000C3018928C1F0C70140978E159F05C1F0AB +:10287000F8012191DC013D91CD012327D8012C9352 +:102880008F01F3CFF8012191DC013D91CD01232788 +:10289000D8012C938F01EDA1FEA1E817F90791F75C +:1028A000EBA1FCA12E163F0609F445C0F0E1EF0EA6 +:1028B000F11C20E1C20ED11C8BA09CA092CFE9A1FB +:1028C000FAA120E111922A95E9F749A55AA5B70185 +:1028D000CE0101960E94EF70A201BE016F5F7F4F93 +:1028E000C5019ADD80E1F501D60101900D928A952E +:1028F000E1F7C30131E023163104C1F0C70140976D +:102900008E159F05C1F0F8012191DC013D91CD01AB +:102910002327D8012C938F01F3CFF8012191DC01FB +:102920003D91CD012327D8012C938F01EDA1FEA16C +:10293000E817F90791F780E1F50115C02BA13CA13B +:102940002216330621F48FA198A5892BE1F4A20168 +:10295000B701C60161DDC301EDA1FEA18E179F077E +:1029600041F480E1F701D30101900D928A95E1F7DE +:102970009DCFF8012191DC013D91CD012327D801A4 +:102980002C938F01E9CFD501E0E11D92EA95E9F79B +:1029900049A55AA5B701C5010E94EF70A201B50172 +:1029A000C6013ADDC301EDA1FEA18E179F0719F202 +:1029B000F8012191DC013D91CD012327D8012C9311 +:1029C0008F01F1CF81E090E0AFA1B8A5AB2B09F06A +:1029D00014CF90E080E011CF0F931F93DA01FC0138 +:1029E000680F791F0FEF1FEF9801E617F70741F403 +:1029F0000D931D932D933C9313971F910F91089561 +:102A00008191082788E090E0A8014170552736950C +:102A1000279517950795452B41F040E2042743E899 +:102A2000142748EB24274DEE3427019769F7DDCFB3 +:102A3000EF92FF920F931F93CF93DF9300D00F92EB +:102A4000CDB7DEB78C017B01AE014F5F5F4FC4DFB6 +:102A5000F801EE0DFF1D898180838A8181838B813E +:102A600082838C818383C70104962496CDBFDEBF09 +:102A7000DF91CF911F910F91FF90EF900895CF922A +:102A8000DF92EF92FF920F931F93CF93DF937C011E +:102A9000FB01DC0190E080E00091072010E080174E +:102AA0009107E0F0F8013197EE0FFF1FEE0FFF1FC7 +:102AB000EE0DFF1D8091062090E00196880F991F72 +:102AC000880F991F08171907D8F0DF91CF911F9130 +:102AD0000F91FF90EF90DF90CF90089520812C937D +:102AE000218111962C931197228112962C93129783 +:102AF000238113962C931397019634961496CCCF7A +:102B00002081C18142813381C0900720D12CC8012E +:102B1000B6010E94F86F0097C1F4D0E0C857DE4DAF +:102B20005881A42FB0E0A857BE4DCC91A32FB0E0A0 +:102B3000A857BE4D4C91A22FB0E0A857BE4D3C9176 +:102B400063587F4DDB012C912527509108205A3D79 +:102B5000A9F4049799F4A22FB0E0A857BE4D2C9188 +:102B6000D0E0C857DE4DC881A42FB0E0A857BE4DB5 +:102B70004C91A32FB0E0A857BE4D3C91D801AC19A1 +:102B8000BD09AA0FBB1FAA0FBB1FAE0DBF1D8C91A5 +:102B90002827248311968C911197C827C5831296F4 +:102BA0008C9112974827468313968C913827378348 +:102BB0000F5F1F4F34967ECFCF92DF92FF920F931D +:102BC0001F93CF93DF9320E1829FC00111246B01FB +:102BD000C0E1CC0ED11CDA01A80FB91FFB0120E027 +:102BE0003191FD908F01015011093F25E801388393 +:102BF0002F5F2430A9F76C5F7F4F04966C157D051D +:102C000051F7DF91CF911F910F91FF90DF90CF90FF +:102C10000895982F881F8827881F2BE1829F802D79 +:102C20001124990F892708950F931F93CF93DF9352 +:102C3000182FC62FEEDF082FECDFD82FEADFC1FBFD +:102C4000992790F9909F902D11242C2F2170219F6E +:102C5000202D112482278927C2FBCC27C0F9CD9FC4 +:102C6000C02D11248C27DF91CF911F910F910895D2 +:102C70003F924F925F926F927F928F929F92AF920C +:102C8000BF92CF92DF92EF92FF920F931F93CF9359 +:102C9000DF93EC016B01AB01BC0180E08DDF6624AA +:102CA00063945E0184E0A80EB11C4E01E0E18E0E3B +:102CB000911C8E01CE01DC0120E0EC91F0E0E857A0 +:102CC000FE4D30813C932F5F14962430B1F701966E +:102CD0008A159B0581F789819D81998399859D83BB +:102CE0009D8599878D878A819A859A838A878E8127 +:102CF0009E859E838E878B819F859B839B859F87E7 +:102D00009F819B878F8380910620861579F1F8013A +:102D100040807180842D8725E280F3803E2C3F2403 +:102D2000582E532476DF84258525F8018083872D4E +:102D30008E256FDF78267524F8017182832D69DF77 +:102D4000E826E524F801E282842D8F2562DFF8264B +:102D5000F524F801F3820C5F1F4F80169106B9F637 +:102D6000A601BE01862D28DF6394A3CFA601BE0174 +:102D7000862DDF91CF911F910F91FF90EF90DF9003 +:102D8000CF90BF90AF909F908F907F906F905F900B +:102D90004F903F9011CF4F925F926F927F928F92A0 +:102DA0009F92AF92BF92CF92DF92EF92FF920F93DA +:102DB0001F93CF93DF93EC016B01AB01BC018091BA +:102DC0000620FADEE0900620EA945E0184E0A80E78 +:102DD000B11C4E01E0E18E0E911C8D8599859D8779 +:102DE0009D81998799819D8389838A819A859A8318 +:102DF0008A878E819E859E838E878B819F819B8310 +:102E00009B859F839F859B878F878E01CE01DC01E9 +:102E100020E0EC91F0E0E857FF4D30813C932F5FCC +:102E200014962430B1F70196A816B90681F7A601C9 +:102E3000BE018E2DC1DEEE2009F455C0F8014080A0 +:102E40005180628073806EE0842DEEDEF82E6BE0A0 +:102E5000852DEADEF8266DE0862DE6DEF82669E0AF +:102E6000872DE2DEF826F801F08269E0842DDCDEB1 +:102E7000F82E6EE0852DD8DEF8266BE0862DD4DEA8 +:102E8000F8266DE0872DD0DEF826F801F1826DE09E +:102E9000842DCADEF82E69E0852DC6DEF8266EE0A8 +:102EA000862DC2DEF8266BE0872DBEDEF826F801FF +:102EB000F2826BE0842DB8DEF82E6DE0852DB4DE55 +:102EC000F82669E0862DB0DEF8266EE0872DACDEB0 +:102ED000F826F801F3820C5F1F4F8016910609F067 +:102EE000ADCFEA947ACFDF91CF911F910F91FF90F0 +:102EF000EF90DF90CF90BF90AF909F908F907F909A +:102F00006F905F904F900895FC016A3841F586E01C +:102F100090E0808391838CE090E08283938388E1CA +:102F200090E08483958380ED90E08683978340874B +:102F300085E796E28187928785E696E28387948784 +:102F400060930820808180930720828180930620EF +:102F500084818093052086818093042008956A3DB2 +:102F600079F488E090E0808391838EE090E0828322 +:102F7000938380E290E08483958380EF90E0D5CFC7 +:102F800084E090E0808391838AE090E08283938361 +:102F900080E190E08483958380EB90E0C6CFFC01D4 +:102FA000818592856CCD0F931F93CF93DF93EC01B6 +:102FB0008A0189859A8563DDAB85BC8580E1F8014E +:102FC00001900D928A95E1F7DF91CF911F910F91BA +:102FD0000895FC01CB01618572854ACEFC01CB01CD +:102FE00061857285D8CEAF92BF92CF92DF92EF9279 +:102FF000FF920F931F93CF93DF938C01EB016A0134 +:10300000DC011B96ED91FC91B12CA12CAC14BD04FC +:1030100098F0E801AB85BC8580E101900D928A951E +:10302000E1F7DF91CF911F910F91FF90EF90DF902B +:10303000CF90BF90AF9008957E019E01205F3F4FDB +:10304000D7018D917D019191119789278C93E2167B +:10305000F306B1F7F80161857285CE0109DEF0E172 +:10306000AF0EB11CFE01E701D1CFCF93FC01C085AB +:10307000C11104C0AEDF8C2FCF9108959A012F703B +:103080003327C1E0232BB9F7AEDFC0E0F4CFAF9216 +:10309000BF92CF92DF92EF92FF920F931F93CF9345 +:1030A000DF93CDB7DEB76097CDBFDEBF7C018B016C +:1030B0006A01B12CA12CAC14BD0470F06096CDBF98 +:1030C000DEBFDF91CF911F910F91FF90EF90DF90C6 +:1030D000CF90BF90AF90089580E1F801DE01119686 +:1030E00001900D928A95E1F7D70119966D917C9127 +:1030F000C80151DED7011B96ED91FC919801205F2C +:103100003F4FD8018D918D019191119789278C9313 +:1031100002171307B1F7F701A385B48580E1FE011B +:10312000319601900D928A95E1F7F0E1AF0EB11C56 +:10313000C2CFCF93FC01C085C11104C04FDF8C2FDB +:10314000CF9108959A012F703327C1E0232BB9F74F +:103150009EDFC0E0F4CFEF92FF920F931F93CF93C7 +:10316000DF937C01E901062F10E0F801EF54F84DE0 +:103170004083A801B9010E94624FF701808187FF57 +:103180000EC0FE01A2EBB7E20C0F1D1F81919D91B5 +:10319000EF01219789278883E017F107B9F7DF91BD +:1031A000CF911F910F91FF90EF9008953F924F9212 +:1031B0005F926F927F928F929F92AF92BF92CF92C7 +:1031C000DF92EF92FF920F931F93CF93DF93382EEE +:1031D0004B013A01E801A22EB12C27014A185B08E5 +:1031E000E114F10411F5A50170E060E0C8010E944E +:1031F000097180E888836501FE01E40DF51D9501E4 +:103200002E193F094E145F04B0F55191CF0101977B +:10321000D901A40DB51DAE53B84D4C914527DC0125 +:103220004C93BFEF4B1A5B0AEDCFC701B5010E946B +:10323000F86F009709F463C06701CA0CDB1CC81A59 +:10324000D90A80E8F801EE0DFF1D8083D5CF51919A +:103250009F0121503109DC01A40DB51DAE52B84DBE +:103260004C914527D9014C93BFEF4B1A5B0A4E1482 +:103270005F0468F367012AE13216B1F08AE4381678 +:10328000A9F180E0DF91CF911F910F91FF90EF9016 +:10329000DF90CF90BF90AF909F908F907F906F9076 +:1032A0005F904F903F900895AE014E0D5F1D8301DA +:1032B0009401BE01C60185D77E01EC0CFD1CA60160 +:1032C000B701CE010E94F870B6016A197B096C0F34 +:1032D0007D1FA50182EA97E20E94EF70A50162EAD4 +:1032E00077E2C7010E94EF7081E0CCCFAE014E0DB6 +:1032F0005F1D84019301BE01C6014DD9DDCFF801E8 +:10330000E40DF51DC5018E199F09B1CF8F929F92D3 +:10331000AF92BF92CF92DF92EF92FF920F931F93E3 +:10332000CF93DF93C82F6B014A01790158018A318D +:10333000B1F080E0CA3409F044C0E2E9F7E280E18C +:10334000DF011D928A95E9F78B019F0142EC57E25C +:10335000BF0180E190E01FD917E8D0E111C0E2E998 +:10336000F7E288E0DF011D928A95E9F78B019F0162 +:1033700042EC57E2BF0188E090E023D71BE1D8E0A0 +:1033800022ED37E2412F6D2F82EC97E2E4DE22EC52 +:1033900037E2412F6D2F82ED97E2DDDE84012D2F84 +:1033A000A501AB2859F44D2F50E070E060E082E9B0 +:1033B00097E20E9409712D2F42E957E2B6018C2F46 +:1033C000F5DEDF91CF911F910F91FF90EF90DF908D +:1033D000CF90BF90AF909F908F900895CF93DF9341 +:1033E000FC01DB01480F591FE417F50719F4DF91C1 +:1033F000CF91089581919D91EF012197892788832D +:10340000F3CFCF93DF93DC0150E040E0FB01319735 +:103410004E175F0740F0E80FF91F8081880F808307 +:10342000DF91CF9108952D914F5F5F4FED0121976F +:103430003C91331F3327331F220F232B2883E8CFE0 +:103440006F927F929F92AF92BF92CF92DF92EF9254 +:10345000FF920F931F93CF93DF93CDB7DEB7E09723 +:10346000CDBFDEBF182F3B015A0169018A31A1F09F +:103470008A34C9F180E0E096CDBFDEBFDF91CF9105 +:103480001F910F91FF90EF90DF90CF90BF90AF9082 +:103490009F907F906F90089528E0E22EF12C3BE101 +:1034A000932EA70170E060E0CE0101960E940971A1 +:1034B000A70170E060E0CE0181960E9409711A3187 +:1034C000C1F01A34B9F683019E012F5D3F4F41E0F0 +:1034D00050E04C0F5D1F4E0D5F1DBE016F5F7F4FB3 +:1034E000C70159D815C080E1E82EF12C97E8992E34 +:1034F000D8CF83019E012F5D3F4F41E050E04C0F3C +:103500005D1F4E0D5F1DBE016F5F7F4FC70159D616 +:1035100061E070E06C0F7D1F6E0D7F1DA701CE0175 +:1035200001960E94EF70A701BE016F5F7F4FC5013A +:103530000E94EF701981B701C50163DF17FF07C053 +:10354000F7013197EA0DFB1D808189258083A70152 +:10355000B501C6010E94EF70F5011081B701C601E7 +:1035600050DF17FF09C0F1E0EF1AF108F601EE0D88 +:10357000FF1D80819826908281E07DCF2F923F921F +:103580004F925F926F927F928F929F92AF92BF9273 +:10359000CF92DF92EF92FF920F931F93CF93DF931F +:1035A000CDB7DEB7E197CDBFDEBF89AB3B01BA0136 +:1035B0005901480117017A01E20EF31EA901C70162 +:1035C0000E94EF7089A98A3129F08A3409F45AC01F +:1035D00010E07EC008E01A2D198E1A8E86E1FE01D9 +:1035E0007B96DF01982F1D929A95E9F719821A822E +:1035F0007897DF011D928A95E9F79E012F5F3F4F73 +:10360000AE01475E5F4FB30189A91ADF95013327E9 +:10361000402E512CAA2049F08A2D602F0E94EC6F79 +:10362000911103C02C153D05A8F511E01A0D2E0DC2 +:103630003F1D80E8F9018083212F30E0812F602F2A +:103640000E94EC6F911120C02C153D05E8F0C901D6 +:1036500084199509A201BE016F5F7F4F8E0D9F1DDA +:10366000BDDEB9A9BA31F1F0BA3409F0B1CF812F7A +:1036700090E0A701480F591F83019401B7010E94F0 +:10368000CB1219C000E1A7CF1F5F2E0D3F1DD9013E +:103690001C92D2CFC90184199509A201BE01675EAF +:1036A0007F4FDCCF812F90E0A701480F591F830186 +:1036B0009401B70186D511E0892B09F410E021149B +:1036C000310409F485CFA201B401C1010E94EF7059 +:1036D000812FE196CDBFDEBFDF91CF911F910F917A +:1036E000FF90EF90DF90CF90BF90AF909F908F9022 +:1036F0007F906F905F904F903F902F900895CF9262 +:10370000DF92EF92FF920F931F93D12CC12C36DFE3 +:103710001F910F91FF90EF90DF90CF900895CF927F +:10372000DF92EF92FF920F931F93CF93DF937C0171 +:10373000EB016417750730F14830510569F56B01ED +:1037400088E0C81AD108CE0DDF1D01EF17E29601FF +:10375000AE0161E078E28AE1D9DD88E0FE01A2E90C +:10376000B7E201900D928A95E1F7B7016C0D7D1DCE +:1037700048E050E082E997E20E94E2709C0181E01B +:10378000232B09F080E0DF91CF911F910F91FF90E3 +:10379000EF90DF90CF9008954031510599F76B017C +:1037A00080E1C81AD108CE0DDF1D01EF17E29601A6 +:1037B000AE0161E078E28AE4A9DD80E1FE01A2E9E0 +:1037C000B7E201900D928A95E1F7B7016C0D7D1D6E +:1037D00040E150E0CFCFAF92BF92CF92DF92EF9215 +:1037E000FF920F931F93CF93DF938C016B017A01AC +:1037F00088E0F801A2E8B7E201900D928A95E1F71E +:1038000088E0F801AAE7B7E201900D928A95E1F706 +:1038100088E0F801A2E7B7E201900D928A95E1F7FE +:10382000E2E9F7E288E0DF011D928A95E9F75B01A2 +:10383000A40EB51ECA0187709927EA01892B51F0A1 +:10384000C87F2896AE014E195F0970E060E0C5019F +:103850000E940971A6014C0F5D1F22E937E2B601F3 +:10386000CE01AFD42897F601EC0FFD1F84E0A2E94A +:10387000B7E201900D928A95E1F784E0E2E9F7E280 +:10388000D50101900D928A95E1F7C7010496DF9169 +:10389000CF911F910F91FF90EF90DF90CF90BF904D +:1038A000AF900895AF92BF92CF92DF92EF92FF92C6 +:1038B0000F931F93CF93DF936C01EB015A016417B1 +:1038C000750708F45BC088E0E1E0F8E2A2E8B7E23F +:1038D00001900D928A95E1F788E0E1E0F8E2AAE72D +:1038E000B7E201900D928A95E1F788E0E1E0F8E215 +:1038F000A2E7B7E201900D928A95E1F7E2E9F7E2DB +:1039000088E0DF011D928A95E9F7CB01877099273E +:103910007B01892B79F0B8EFEB2288E0E80EF11CEF +:10392000A701461B570B70E060E0C6018C0F9D1F7E +:103930000E940971A6014E0D5F1D01E018E222E907 +:1039400037E2B601C7013DD4F7013897EC0DFD1DF4 +:1039500084E0A2E9B7E201900D928A95E1F7CE01E9 +:103960008A199B0944E050E062E977E28C0D9D1DC5 +:103970000E94E2709C0181E0232B09F080E0DF913E +:10398000CF911F910F91FF90EF90DF90CF90BF905C +:10399000AF9008952F923F924F925F926F927F92D5 +:1039A0008F929F92AF92BF92CF92DF92EF92FF924F +:1039B0000F931F93CF93DF93CDB7DEB76097CDBF43 +:1039C000DEBF4C011B014D835E8329833A832801AE +:1039D000ED86FE862DB73EB72F87388BDC01129619 +:1039E0002D913C91CB010197820F931FB9010E9449 +:1039F000F86F6F837887C101B9010E94F86F8987DA +:103A00009A87EDB7FEB7E21BF30BEDBFFEBF8DB794 +:103A10009EB701966C01ADB7BEB7A21BB30BADBF8D +:103A2000BEBFEDB7FEB731965F01A90101151105C3 +:103A300041F470E060E0CF010E940971712C612CAB +:103A400043C0B801CF010E94EF70F8CF93012F5F00 +:103A50003F4F2B833C83D40112960D911C91809192 +:103A6000E227813009F0C4C06114710409F069C013 +:103A7000A80170E060E0C6010E940971A8016D8193 +:103A80007E81C6010E94EF700A0D1B1DA601C501B3 +:103A90008017910709F04BC0D40112968D919C912B +:103AA0001397689EB001699E700D789E700D112469 +:103AB000E981FA816E0F7F1FED91FC914D855E8546 +:103AC000C60119956B807C802F813885621673063C +:103AD00009F0BCCF4114510441F0D40112964D912C +:103AE0005C91B501C2010E94EF7081E090E0E98530 +:103AF000FA85EF2B11F490E080E02F8538892DBFF7 +:103B00003EBF6096CDBFDEBFDF91CF911F910F9179 +:103B1000FF90EF90DF90CF90BF90AF909F908F90ED +:103B20007F906F905F904F903F902F900895DA01B3 +:103B30002D91FC013191CF012327FA012083AD01A2 +:103B4000A7CFC3010197809F7001819FF00C909FC8 +:103B5000F00C112429813A812E0D3F1D2B873C87C3 +:103B6000E00EF11E8D819E81E80EF91EA985BA85B1 +:103B7000A801AB2B39F1EF81F8852B813C81E2174D +:103B8000F30701F570E060E0C6010E940971C10110 +:103B9000B8010E94F86FAC016B857C85C6010E945C +:103BA000EF700E0D1F1DF601E016F10609F474CF3B +:103BB000DF012D91CD01D7013D917D012327208388 +:103BC000FC01F2CF6B857C85C6010E94EF700E0D63 +:103BD0001F1DF601E016F10609F45ECFDF012D91FD +:103BE000CD01D7013D917D0123272083FC01F2CF38 +:103BF000609E7001619EF00C709EF00C1124ED81AE +:103C0000FE81EE0EFF1E29853A85A801232B89F03F +:103C10008F819885AB81BC818A179B0751F470E036 +:103C200060E0C6010E940971C101B8010E94F86FED +:103C3000AC01B701C6010E94EF700A0D1B1DA60161 +:103C4000C5018017910749F5D40112968D919C9179 +:103C50001397689EB001699E700D789E700D1124B7 +:103C6000E981FA816E0F7F1FED91FC914D855E8594 +:103C7000C6011995D40112964D915C91649EB001D4 +:103C8000659E700D749E700D1124E981FA816E0F8E +:103C90007F1FC5010E94EF7015CFDA012D91FC0145 +:103CA0003191CF012327FA012083AD01CACF2F9292 +:103CB0003F924F925F926F927F928F929F92AF92BC +:103CC000BF92CF92DF92EF92FF920F931F93CF9309 +:103CD000DF93CDB7DEB72E97CDBFDEBF1C012B0122 +:103CE0003A0129833A834801EB86FC862DB73EB71B +:103CF0002D873E87DC0112962D913C91CB010197D7 +:103D0000820F931FB9010E94F86F6B837C83C201FD +:103D1000B9010E94F86F8D839E83EDB7FEB7E21B59 +:103D2000F30BEDBFFEBF8DB79EB701966C01ADB72B +:103D3000BEB7A21BB30BADBFBEBFEDB7FEB731968A +:103D40007F01A9010115110541F470E060E0CF0188 +:103D50000E94097110E000E042C0B801CF010E944A +:103D6000EF70F8CFD1011296AD90BC901397A09E42 +:103D7000B001A19E700DB09E700D1124F801319616 +:103D8000EF83F8878091E227813009F005C129810E +:103D90003A81620F731FED91FC914B855C85C601E2 +:103DA0001995D10112964D915C910115110509F0FB +:103DB0007BC0ED81FE81EF2B09F04EC0B601C3013F +:103DC0000E94EF70D10112962D913C912E0D3F1D56 +:103DD000B301C70182179307A9F50F811885EB81FD +:103DE000FC810E171F0709F0BDCF8114910441F02B +:103DF000D10112964D915C91B701C4010E94EF7000 +:103E000081E090E0ED81FE81EF2B11F490E080E005 +:103E10002D853E852DBF3EBF2E96CDBFDEBFDF91E7 +:103E2000CF911F910F91FF90EF90DF90CF90BF90B7 +:103E3000AF909F908F907F906F905F904F903F904A +:103E40002F900895DB014D91FC015191CF01452741 +:103E5000FB014083BD01BECF2B813C812130310568 +:103E600009F068C0C201BA010E94F86FAC01B60146 +:103E7000C3010E94EF70D10112966D917C91C20135 +:103E80000E94F86F8E0D9F1DB30197012817390707 +:103E900009F4A3CFDB014D91F90151919F01452711 +:103EA000FB014083BD01F2CF2D813E81232B09F41C +:103EB00041C08B819C81AF81B8858A179B07D1F562 +:103EC000049F9001059F300D149F300D1124C201F5 +:103ED000BA010E94F86FAC01B601C301820F931FB3 +:103EE0000E94EF70F1016281738101501109069FF8 +:103EF000F001079FF00D169FF00D112429813A81E2 +:103F00002E0F3F1FE60FF71F8F01060D171DC20171 +:103F10000E94F86F820F931F8217930709F45DCFF9 +:103F2000D8014D91F90151919F014527F801408336 +:103F30008D01F2CF049FC001059F900D149F900D3D +:103F40001124B601860D971D0E94EF70D1011296C3 +:103F50002D913C9101501109029FF001039FF00D3A +:103F6000129FF00D112489819A818E0F9F1FE20FFD +:103F7000F31FBF01660D771D280F391F281739075A +:103F800009F42BCFDB014D91FC015191CF01452765 +:103F9000FB014083BD01F2CF9301260F371F298714 +:103FA0003A878D819E81892BE1F1AB81BC81EF81C4 +:103FB000F885AE17BF07A9F5A50170E060E0C6015E +:103FC0000E940971C201B5010E94F86FAC016985B8 +:103FD0007A85C6010E94EF70D101ED91FC914B856D +:103FE0005C85B60189859A851995F1012281338115 +:103FF000029FF001039FF00D129FF00D1124BF01ED +:10400000660D771D2E0D3F1DC7012817390779F45E +:10401000D10112964D915C91B601C7010E94EF70DB +:10402000DCCE29813A81620F731FA501D2CFDB015B +:104030004D91FC015191CF014527FB014083BD010A +:10404000E4CF8F929F92AF92BF92EF92FF920F9325 +:104050001F93CF93DF9300D00F92CDB7DEB77801D7 +:104060008090482090904920A0904A20B0904B200A +:1040700089829A82AB82BC8289019A01AB01BC0120 +:10408000CE01019687DC2496CDBFDEBFDF91CF91B4 +:104090001F910F91FF90EF90BF90AF909F908F90E6 +:1040A00008958F929F92AF92BF92EF92FF920F93DB +:1040B0001F93CF93DF9300D00F92CDB7DEB7780177 +:1040C00080904C2090904D20A0904E20B0904F209A +:1040D00089829A82AB82BC8289019A01AB01BC01C0 +:1040E000CE010196E4DD2496CDBFDEBFDF91CF91F6 +:1040F0001F910F91FF90EF90BF90AF909F908F9086 +:1041000008958F929F92AF92BF92EF92FF920F937A +:104110001F93CF93DF9300D00F92CDB7DEB7780116 +:104120008090502090905120A0905220B090532029 +:1041300089829A82AB82BC8289019A01AB01BC015F +:10414000CE01019627DC2496CDBFDEBFDF91CF9153 +:104150001F910F91FF90EF90BF90AF909F908F9025 +:1041600008958F929F92AF92BF92EF92FF920F931A +:104170001F93CF93DF9300D00F92CDB7DEB77801B6 +:104180008090542090905520A0905620B0905720B9 +:1041900089829A82AB82BC8289019A01AB01BC01FF +:1041A000CE01019684DD2496CDBFDEBFDF91CF9195 +:1041B0001F910F91FF90EF90BF90AF909F908F90C5 +:1041C00008958F929F92AF92BF92EF92FF920F93BA +:1041D0001F93CF93DF9300D00F92CDB7DEB7780156 +:1041E0008090582090905920A0905A20B0905B2049 +:1041F00089829A82AB82BC8289019A01AB01BC019F +:10420000CE010196C7DB2496CDBFDEBFDF91CF91F3 +:104210001F910F91FF90EF90BF90AF909F908F9064 +:1042200008958F929F92AF92BF92EF92FF920F9359 +:104230001F93CF93DF9300D00F92CDB7DEB77801F5 +:1042400080905C2090905D20A0905E20B0905F20D8 +:1042500089829A82AB82BC8289019A01AB01BC013E +:10426000CE01019624DD2496CDBFDEBFDF91CF9134 +:104270001F910F91FF90EF90BF90AF909F908F9004 +:104280000895CF93DF93EB012097D9F0AB01495FFD +:104290005F4F403422E05207D8F423E0569547950B +:1042A0002A95E1F7BC0183E298E20E94EF70C134E5 +:1042B00082E0D80710F0C0E4D2E0C0932128D09368 +:1042C00022288091212890912228DF91CF91089572 +:1042D00048E450E0E7CF089580E00C94533508950A +:1042E0006F927F928F929F92AF92BF92CF92DF9206 +:1042F000EF92FF920F931F93CF93DF93CDB7DEB76B +:10430000A097CDBFDEBF7C01CB01009709F47DC033 +:10431000D7012C91243C09F078C04B01B2E08B1AF4 +:1043200091085401EFE0AE22BB24A114B10409F0BE +:104330007EC020E1E0E6F0E2DE01519601900D92B0 +:104340002A95E1F76701F2E0CF0ED11C3701660E26 +:10435000771E01E018E29E012F5E3F4FA601B301D8 +:10436000C4010E94AA13A401B301C6010E94F870FF +:10437000D70111966C9180910B20681739F18091CB +:10438000B22810D68E3011F520E130E0AE014F5F3B +:104390005F4FF70161818091B2281FD7F601AE010E +:1043A0004D5F5F4F22E1E20EF11C9191DA018D9198 +:1043B000AD019F01215031099827D9019C93EE1539 +:1043C000FF0599F782E1A82EB12C1EC0F701838862 +:1043D0009488C588D68863E170E0C7010E941815EB +:1043E000D70153968C91539788120EC054968C9196 +:1043F0005497981209C055968C915597C81204C0CD +:1044000056968C91D816F1F2C501A096CDBFDEBFAD +:10441000DF91CF911F910F91FF90EF90DF90CF90A0 +:10442000BF90AF909F908F907F906F9008955B01A9 +:10443000EBCF0F931F93CF93DF93EC01CB0100974A +:1044400009F44CC028812F3A19F02BE020930A2060 +:10445000BC01CE0145DF8C01AC01BE0183EE0E94A0 +:10446000614C80910A20843109F451C0C0F48E302F +:1044700009F443C058F48C30B1F18D30C9F18B3060 +:1044800039F181EC888381E090E026C08031D1F160 +:104490008231B9F7B801CE010E949E4A1DC0873112 +:1044A000D9F148F48531C1F1863159F7B801CE010F +:1044B0000E94494511C08831A1F1893111F7B80135 +:1044C00061507109CE0101960E94A93490E004C0A8 +:1044D000B801CE010E948B4910926B28DF91CF91D9 +:1044E0001F910F910895B801CE010E94C349F4CFE6 +:1044F000B801CE010E94E349EFCFB801CE010E947E +:104500000D2EEACFB801CE010E94ED49E5CFB801EA +:10451000CE010E948B4BE0CFB801CE010E945B45DB +:10452000DBCFCE010E948F34D7CFCF92DF92EF92B4 +:10453000FF920F931F93CF93DF93EC019B01295FB1 +:104540003F4FB90143E0769567954A95E1F72830EA +:104550003105E0F44091212850912228495F5F4FB6 +:1045600033E0569547953A95E1F763E278E20E9489 +:10457000EF708091212890912228DF91CF911F9197 +:104580000F91FF90EF90DF90CF90089588818093F6 +:10459000092020313105A0F199819F3A89F58039B0 +:1045A00011F081113CC08B01015011096E018FEF98 +:1045B000C81AD80AA801B601CE010E94F870B80145 +:1045C000CE0137DF8C01892BA1F08881FE01E00F3D +:1045D000F11F8083780181E0E81AF108A701B60194 +:1045E000CE010E94F870CE0DDF1D81E988830F5F38 +:1045F0001F4FC80123E0880F991F2A95E1F7BDCF0F +:104600002832310550F0803911F0811108C09A81AB +:10461000911103C09B81992329F0882329F0CE01B1 +:1046200008DFE8CF81110DC0CE010E94EA37009764 +:1046300041F09827892798278883998380E190E023 +:104640009CCF8C81082F10E099819883882341F0BA +:10465000A801BE016B5F7F4FCE0101960E94F870EA +:10466000B8016F5F7F4FCE01E4DE8C01892B09F426 +:10467000C0CF80910920882309F4BBCF8881FE0137 +:10468000E00FF11F8083780181E0E81AF108BE0194 +:104690006F5F7F4FA701A4CF8F929F92AF92BF927F +:1046A000CF92DF92EF92FF920F931F93CF93DF93FE +:1046B0000F920F92CDB7DEB78C017B014B0127E043 +:1046C000820E911CA8E4CA2ED12C80E4881682E0C8 +:1046D000980630F46401B3E0D694C794BA95E1F734 +:1046E0008091212890912228009761F08E159F05D6 +:1046F00049F4A60163E278E2C8010E94E270892BC6 +:1047000009F444C0B701C801BCDD8093212890930F +:10471000222898E0C916D10408F494C0F8018181D8 +:10472000803911F0811193C0F80182818F3A09F02C +:104730008EC0838181118BC08481811188C0A58046 +:10474000B12CC6010897A816B90629F00197A8163A +:10475000B90609F07CC080910A2094EF980F93303D +:1047600050F0982F9D7F903131F0843121F08851A5 +:10477000823008F06CC021E0A601B8018091E627E4 +:104780000E94B14F892B91F4F12CE12CC7010F90BD +:104790000F90DF91CF911F910F91FF90EF90DF90DD +:1047A000CF90BF90AF909F908F900895F801908028 +:1047B000828180838581E82EF12C882341F0A70136 +:1047C000B8016A5F7F4FC80101960E94F870B70177 +:1047D0006F5F7F4FC8012DDE0097B1F2F801408175 +:1047E0009082F9E0CF1AD108AC14BD0469F49C01A1 +:1047F0002F5F3F4F800F911F51E9FC015083F8015B +:10480000E20FF31F4083C901AC014F5F5F4FB80156 +:104810008091E6270E946E50BC01F3E0660F771F7F +:10482000FA95E1F7C8010F900F90DF91CF911F919A +:104830000F91FF90EF90DF90CF90BF90AF909F903F +:104840008F901FCDF3E0CF16D10408F499C1F80181 +:1048500022812F3A09F03FC080910A2094EF980FEF +:10486000933048F0982F9D7F903129F0843119F0D2 +:104870008851823080F5F8018081918189839A8303 +:1048800021E0A601B8018091E6270E94B14F7C018A +:10489000892B09F47BCFF2E0EF1AF108680122E0DE +:1048A000C20ED11CA701B601C8010E94F870B70161 +:1048B000C801BFDD7C01009729F0AC01B801C60139 +:1048C0000E94F87089819A81F80180839183A70101 +:1048D0004E5F5F4F9CCFF6E0CF16D10408F450C175 +:1048E000F8019081903911F09111B3C1F8018181E3 +:1048F0008F3A09F058C0211156C08381811153C0ED +:104900008481A601485051098417150609F04BC04F +:1049100080910A2034EF380F333048F0382F3D7F34 +:10492000303129F0843119F088518230E0F521E0EE +:10493000A601B8018091E6270E94B14F892B09F4A6 +:1049400023CFF801818180838481E82EF12C882394 +:1049500041F0A701B8016B5F7F4FC80101960E942B +:10496000F870B7016F5F7F4FC80163DD7C01892B51 +:1049700009F40ACFF8018081EE0DFF1D80836701E5 +:10498000F1E0CF1AD108B8016F5F7F4FA601C801CF +:104990000E94F870F801EC0DFD1D81E98083A701EC +:1049A0004D5F5F4F34CF88E0C816D10408F4E8C0EB +:1049B000903911F0911152C1211150C1F801838138 +:1049C00081114CC184819601285031098217130648 +:1049D00009F044C190930920A40173E056954795CE +:1049E0007A95E1F720E0B8018091E6270E94B14F67 +:1049F000BC01E3E0660F771FEA95E1F7C80195DD9A +:104A000007968830910508F4BFCEAC0163E0569557 +:104A100047956A95E1F7FBCE80E9C0C08330F1F499 +:104A200080910920F80180838FEA8183F4E0EF16FA +:104A3000F10450F0A70143505109B8016D5F7F4F59 +:104A4000C80105960E94F870F801128213828BEF5C +:104A50008E0D8483F2E0EF0EF11CC1C0823009F0AC +:104A6000BEC080910920F801808382818183A701E3 +:104A700043505109B8016D5F7F4FC80105960E94F0 +:104A8000F870F801128213828BEF8E0D8483A7C019 +:104A9000409708F4CFC022E0E21AF108CBC0F5E05D +:104AA000CF16D104B8F180910D20833011F08830F9 +:104AB00089F5F8018081803E69F1863259F18235AD +:104AC00049F1843539F1B701C8010E94643681117A +:104AD00021C021E0A601B8018091E6270E94B14FD4 +:104AE0008330910558F0BC0162507109C8010296EB +:104AF0000E948B49AC01892B09F0EACEB701C801AD +:104B00000E947636BC01089708F48CCE695F7F4F0F +:104B1000687F88CEF8E0EF16F10480F380910D20D5 +:104B2000833011F0883051F7F8018081803E31F3F5 +:104B3000863221F3823511F3843501F3B701C801C0 +:104B40000E9464368111DACFB601C8010E948B49F8 +:104B5000AC01892B99F25BCEF9E0CF16D10480F03D +:104B600081110EC0F801838181110AC084818111F5 +:104B700007C02581C60109972817190609F47FC0C7 +:104B8000B601C8010E94CF378093E427882309F437 +:104B900086CF813009F040CFF801828180930920CF +:104BA000F8018081918189839A8320E0A601B80170 +:104BB0008091E6270E94B14F7C01892B09F4E6CD54 +:104BC0008091E427813009F029CFF2E0EF1AF10853 +:104BD000A701B8016E5F7F4FC8010E94F870B7014E +:104BE00083E0660F771F8A95E1F7C8019EDC079680 +:104BF0007C0123E0F694E7942A95E1F72091E427DD +:104C00002130C1F088309105A8F06801CE0CDF1C7E +:104C1000F6012081222309F43BCFA701B801C80186 +:104C200001960E94F870F6018081F8018083F1E01E +:104C3000EF1AF108E114F10409F444CEA701B80118 +:104C4000C80102963DCE29E0C216D10408F08ACFF1 +:104C500097CF88E0C816D10408F492CFF80181817B +:104C6000803909F079CF83818111EDCF8481811161 +:104C7000EACF2581C60108972817190621F721E0F8 +:104C8000A601B8018091E6270E94B14F7C01892BD3 +:104C900009F47ACDF801B080818180930920F1E098 +:104CA000EF1AF10868012FEFC21AD20AA701B60164 +:104CB000C8010E94F870B70143E0660F771F4A955C +:104CC000E1F7C80132DC07968830910508F45CCD25 +:104CD00033E0969587953A95E1F77C01EFEFEE1A70 +:104CE000FE0AA701B801C6010E94F870F801B0825F +:104CF000A7018DCD80E00E9473308BE080930A2065 +:104D000008950E9461350C946F35ECEDF8E284E370 +:104D1000DF011D928A95E9F7E7ECF8E285E1DF0112 +:104D20001D928A95E9F7E3EBF8E284E1DF011D9239 +:104D30008A95E9F7E7E9F8E28BE1DF011D928A95B0 +:104D4000E9F7E6E8F8E280E1DF011D928A95E9F7EC +:104D50001092B2288FEF80939628CCDFD2CF1F938A +:104D6000CF93DF93182FD62FC42FCFDF8AE0809305 +:104D70000A201092E327D1506C2F812FD23058F4A3 +:104D80000E94EB4EC1110E94BF4C1092EF27DF91A1 +:104D9000CF911F9108950E949B4EF4CF40E060E0B8 +:104DA00088E1DDCF41E060E088E1D9CF40E061E01B +:104DB00086E1D5CF41E061E086E1D1CF40E061E01E +:104DC00088E1CDCF41E061E088E1C9CF40E062E019 +:104DD00088E1C5CF41E062E088E1C1CF0C94224F69 +:104DE0000C942B4F609117297091182945E150E0E0 +:104DF00087EC98E20C946A4C1F93CF93DF93CDB766 +:104E0000DEB76597CDBFDEBF182F8091C728681722 +:104E100000F56430F0F4E62FF0E0EE0FFF1FE953E9 +:104E2000F74D6585768545E150E0CE0101960E94FB +:104E3000634C8A859B85163019F1A8F4133099F1DB +:104E400058F4113069F18C81123059F18A811123A3 +:104E500041F190E080E014C088859985143081F498 +:104E60008E819F810DC08A899B89193049F078F421 +:104E70008C859D85173021F088899989183049F7EC +:104E80006596CDBFDEBFDF91CF911F9108958E85CE +:104E90009F851A30A9F38C899D891B3089F3D9CF5E +:104EA0008B8190E0EDCF8D81FCCFCF92DF92EF929E +:104EB000FF921F93CF93DF93CDB7DEB76597CDBF3A +:104EC000DEBF182F7A018091C7286817D8F46430A4 +:104ED000C8F4C62ED12CCC0CDD1CF601E953F74DDD +:104EE0006585768545E150E0CE0101960E94634CD0 +:104EF0001630E9F1B8F41330A9F178F4112319F15F +:104F0000123071F16596CDBFDEBFDF91CF911F9159 +:104F1000FF90EF90DF90CF900895143029F5EE8246 +:104F2000FF8212C0193049F138F4173019F11830E6 +:104F300049F7E88AF98A08C01A3011F11B3011F7D5 +:104F4000EC8AFD8A01C0EA82F601E953F74D6585D6 +:104F5000768545E150E0CE0101960E946A4CD2CFA1 +:104F6000EC82F2CFED82F0CFE886F986EDCFEA86CB +:104F7000FB86EACFEC86FD86E7CFEA8AFB8AE4CFA0 +:104F8000EE86FF86E1CF682F81E036CFCF93C62F24 +:104F9000633028F4F8DF982F81E0C91708F080E02B +:104FA000CF9108951F93CF93DF9300D0CDB7DEB795 +:104FB000162F8430D0F46330C0F4682F84E01CDFF7 +:104FC000BC0143E050E0CE0101960E94634CE1E059 +:104FD000F0E0EC0FFD1FE10FF11D80812396CDBFA6 +:104FE000DEBFDF91CF911F91089580E0F7CF60E0A1 +:104FF00080E0D8DF8470089560E08091B228D2DF2D +:1050000082700895EF92FF920F931F93CF93DF93D7 +:1050100000D0CDB7DEB7162F042F8430D8F463301C +:10502000C8F4682F84E0E8DE7C0143E050E0BC0176 +:10503000CE0101960E94634CE1E0F0E0EC0FFD1F11 +:10504000E10FF11D008343E050E0B701CE0101966E +:105050000E946A4C2396CDBFDEBFDF91CF911F9196 +:105060000F91FF90EF9008951F93CF93DF9300D09F +:10507000CDB7DEB7162F8430D0F46330C0F4682F7C +:1050800088E0BADEBC0143E050E0CE0101960E9408 +:10509000634CE1E0F0E0EC0FFD1FE10FF11D8081BA +:1050A0002396CDBFDEBFDF91CF911F91089580E0A1 +:1050B000F7CFEF92FF920F931F93CF93DF9300D020 +:1050C000CDB7DEB7162F042F8430D8F46330C8F480 +:1050D000682F88E091DE7C0143E050E0BC01CE0106 +:1050E00001960E94634CE1E0F0E0EC0FFD1FE10F40 +:1050F000F11D008343E050E0B701CE0101960E940C +:105100006A4C2396CDBFDEBFDF91CF911F910F91E7 +:10511000FF90EF9008950F931F93CF93DF9300D0EC +:10512000CDB7DEB7082F162F843048F080E02396E5 +:10513000CDBFDEBFDF91CF911F910F91089526DF84 +:105140008823A1F3602F89E057DEBC0143E050E0E3 +:10515000CE0101960E94634CE1E0F0E0EC0FFD1FF0 +:10516000E10FF11D8081E3CFDF92EF92FF920F9369 +:105170001F93CF93DF9300D0CDB7DEB7082F162F44 +:10518000D42E8430E0F402DF8823C9F0602F89E058 +:1051900033DE7C0143E050E0BC01CE0101960E9469 +:1051A000634CE1E0F0E0EC0FFD1FE10FF11DD08258 +:1051B00043E050E0B701CE0101960E946A4C23966D +:1051C000CDBFDEBFDF91CF911F910F91FF90EF9088 +:1051D000DF900895682F8BE00FCECF92DF92EF9291 +:1051E000FF920F931F93CF93DF930F920F92CDB740 +:1051F000DEB7082F162F6A0179018430D8F4C6DE95 +:105200008823C1F081E2E816F104A0F4802FE2DFE8 +:10521000612F70E0660F771F680F791F42E050E042 +:10522000CE0101960E94634C69817A81A701C60173 +:105230000E94634C0F900F90DF91CF911F910F91BF +:10524000FF90EF90DF90CF900895CF92DF92EF9292 +:10525000FF921F93CF93DF930F920F92CDB7DEB7DC +:10526000162F6A0179018430C0F46330B0F4213222 +:10527000310598F4AFDF612F70E0660F771F680F7C +:10528000791F42E050E0CE0101960E94634C698193 +:105290007A81A701C6010E946A4C0F900F90DF919E +:1052A000CF911F91FF90EF90DF90CF900895462F00 +:1052B00050E0682F82E0F9CD1F93CF93DF9300D0A9 +:1052C0000F92CDB7DEB7162F843098F4682F85E0A3 +:1052D00093DDBC0144E050E0CE0101960E94634C96 +:1052E000FE01319680E09191911721F08F5F84301B +:1052F000D1F784E02496CDBFDEBFDF91CF911F911F +:105300000895CF93DF9300D00F92CDB7DEB7682F0B +:10531000843030F02496CDBFDEBFDF91CF91089569 +:1053200085E06ADDBC0144E050E0CE0101960E94B8 +:10533000634CFE01319680E091919F3F59F38F5F5E +:105340008430D1F7E7CFEF92FF920F931F93CF9363 +:10535000DF9300D00F92CDB7DEB7162F042F843025 +:10536000D8F46430C8F4682F85E046DD7C0144E061 +:1053700050E0BC01CE0101960E94634CE1E0F0E0F8 +:10538000EC0FFD1FE10FF11D008344E050E0B70179 +:10539000CE0101960E946A4C2496CDBFDEBFDF91FC +:1053A000CF911F910F91FF90EF9008951F93CF938E +:1053B000DF93CDB7DEB72897CDBFDEBF162F843081 +:1053C00008F56430F8F46091B2288AE015DDBC017C +:1053D00048E050E0CE0101960E94634C612F70E0DE +:1053E000660F771F81E090E08C0F9D1F680F791F7B +:1053F000FB01808191812896CDBFDEBFDF91CF91E7 +:105400001F91089590E080E0F6CFCF93DF93CDB762 +:10541000DEB76B97CDBFDEBFC9DFBC018FEF611573 +:10542000710539F04BE150E0CE0101960E94634CCA +:1054300089816B96CDBFDEBFDF91CF910895CF9369 +:10544000DF93CDB7DEB76B97CDBFDEBFAFDFBC015B +:105450008FEF9FEF6115710541F04BE150E0CE01F8 +:1054600001960E94634C8B819C816B96CDBFDEBF01 +:10547000DF91CF9108951F93CF93DF9300D00F92C8 +:10548000CDB7DEB7162F8430D0F46430C0F4682F67 +:1054900086E0B2DCBC0144E050E0CE0101960E94FF +:1054A000634CE1E0F0E0EC0FFD1FE10FF11D8081A6 +:1054B0002496CDBFDEBFDF91CF911F91089580E08C +:1054C000F7CFEF92FF920F931F93CF93DF9300D00C +:1054D0000F92CDB7DEB7162F042F8430D8F4643086 +:1054E000C8F4682F86E088DC7C0144E050E0BC0111 +:1054F000CE0101960E94634CE1E0F0E0EC0FFD1F4D +:10550000E10FF11D008344E050E0B701CE010196A8 +:105510000E946A4C2496CDBFDEBFDF91CF911F91D0 +:105520000F91FF90EF9008951F93CF93DF93CDB726 +:10553000DEB72897CDBFDEBF162F843000F564306C +:10554000F0F4682F87E058DCBC0148E050E0CE0161 +:1055500001960E94634C612F70E0660F771F81E017 +:1055600090E08C0F9D1F680F791FFB018081918156 +:105570002896CDBFDEBFDF91CF911F91089590E0B7 +:1055800080E0F6CFCF92DF92EF92FF921F93CF93FE +:10559000DF93CDB7DEB72897CDBFDEBF162F7A01D8 +:1055A0008430F0F46430E0F4682F87E025DC6C018F +:1055B00048E050E0BC01CE0101960E94634CE12F0F +:1055C000F0E0EE0FFF1F81E090E08C0F9D1FE80FD1 +:1055D000F91FE082F18248E050E0B6010E946A4C77 +:1055E0002896CDBFDEBFDF91CF911F91FF90EF9046 +:1055F000DF90CF900895CF92DF92EF92FF921F93AA +:10560000CF93DF93CDB7DEB7A397CDBFDEBF6C01DD +:10561000142FCE0101967C018BE1F70111928A953E +:10562000E9F7643010F4443088F08BE1F601119210 +:105630008A95E9F7C601A396CDBFDEBFDF91CF9172 +:105640001F91FF90EF90DF90CF9008958AE0D4DB18 +:10565000BC0148E050E0CE014C960E94634CE12F23 +:10566000F0E0EE0FFF1FEE0DFF1D638D748D4BE11B +:1056700050E0C7010E94634C8BE1F701D601019015 +:105680000D928A95E1F7D6CFEF92FF921F93CF93B9 +:10569000DF93CDB7DEB72897CDBFDEBF162F7A01D7 +:1056A000843040F5643030F5452B21F1682F8AE0D5 +:1056B000A3DBBC0148E050E0CE0101960E94634CA0 +:1056C000612F70E0660F771F81E090E08C0F9D1FC7 +:1056D000680F791FFB01608171814BE150E0C701C8 +:1056E0000E946A4C8BE1F701A7E9B8E201900D92A4 +:1056F0008A95E1F72896CDBFDEBFDF91CF911F914C +:10570000FF90EF900895EF92FF920F931F93CF9326 +:105710007C0108EC18E2C0E043E050E0B701C801AA +:105720000E94E270892B29F0CF5F0D5F1F4FC430BC +:1057300099F78C2FCF911F910F91FF90EF900895C3 +:105740000F931F93CF93C82FE091B228E81741F130 +:10575000A82FB0E0AA0FBB1FA953B74D1D960D91FE +:105760001C9101151105E1F0EF3F69F0F0E0EE0F3B +:10577000FF1FE953F74D6585768545E150E082EBE3 +:1057800098E20E946A4C45E150E0B80182EB98E251 +:105790000E94634CC093B228CF911F910F9122CBEE +:1057A000CF911F910F910895AEDF843020F4C8DFB0 +:1057B00090E080E0089580EA90E0089580E0C0CF16 +:1057C00081E09091B228911180E008952F923F924C +:1057D0004F925F926F927F928F929F92AF92BF9201 +:1057E000CF92DF92EF92FF920F931F93CF93DF93AD +:1057F000CDB7DEB7C054D109CDBFDEBF7C01262EA8 +:10580000042F2DB73EB721962EAF3FAF2197DC0175 +:105810008C9181110FC011968C91119781110AC042 +:1058200012968C911091C728182B09F455C0882323 +:1058300009F48AC1C70167DF843009F085C110917E +:10584000C7288EEC90E0143050F51CAEE3E080E405 +:1058500090E0E21520F1E7ECF8E2332433941315DD +:1058600031F084819581892B9681892B29F033949D +:10587000339624E03212F3CF412E512C809119201F +:1058800090E00E94954C3201660C771CF301E953BD +:10589000F74D85879687892B11F58EE090E021964C +:1058A000EEADFFAD2197EDBFFEBFC05CDF4FCDBFBA +:1058B000DEBFDF91CF911F910F91FF90EF90DF90AE +:1058C000CF90BF90AF909F908F907F906F905F90A0 +:1058D0004F903F902F900895B1E0BCAFB7CFFE013D +:1058E000B69680E1DF011D928A95E9F719A381E060 +:1058F0008AA32BA21CA28091EF278DA38091182050 +:1059000090E00E94954CBC018EA39FA3892B29F2A5 +:1059100021E031E0029FC001039F900D11248A8392 +:105920009B83098343E050E08E010F5F1F4FC80146 +:105930000E946A4C8091172090E00E94954C6C0167 +:1059400088A799A7892B09F4A8CF44E050E06FEF0E +:1059500070E0C8010E94097144E050E0B601C8013E +:105960000E946A4C8091162090E00E94954CBC01E8 +:105970008AA79BA7892B09F490CF84E0F8011192A4 +:105980008A95E9F744E050E0C8010E946A4C809192 +:10599000152090E00E94954CBC018CA79DA7892BF7 +:1059A00009F47BCF8FE090E089839A838B839C837B +:1059B0008D839E838F83988748E050E0C8010E94C2 +:1059C0006A4C8091142090E00E94954CBC0188ABF9 +:1059D00099AB892B09F461CF83E0D8011D928A9598 +:1059E000E9F743E050E0C8010E946A4C809113201F +:1059F00090E00E94954C6C018AAB9BAB892B09F41B +:105A00004CCFEDB7FEB7EDAFFEAFA0901320B12C99 +:105A10002DB73EB72A193B092DBF3EBF8DB79EB7A4 +:105A200001964C01A50170E060E00E940971A5019A +:105A3000B601C4010E946A4CADADBEADADBFBEBFE4 +:105A40008091112090E00E94954CBC018EA79FA7E9 +:105A5000892B09F422CF88E0F80111928A95E9F7A1 +:105A600048E050E0C8010E946A4C8091122090E00A +:105A70000E94954C8CAB9DAB892B09F40ECF6E0127 +:105A8000F6E3CF0ED11C86E0D6011D928A95E9F788 +:105A90005601912C92104AC080E2D8011D928A953D +:105AA000E9F76EA97FA940E250E0C8010E946A4C64 +:105AB0006CA97DA946E050E0C6010E946A4CF30142 +:105AC000E953F74D6585768545E150E0CE01819635 +:105AD0000E946A4CBCADBB2349F085E1FE01B19642 +:105AE000A2EBB8E201900D928A95E1F7F70180816F +:105AF000F301E40DF51DE953F74D8183D7011196AC +:105B00008C911197828312968C91BFEF4B1A5B0A8E +:105B1000F201EE0FFF1FE40DF51DE953F74D8083F1 +:105B20003092C7285FD990E080E0B9CE80911020F4 +:105B300090E00E94954CF501819391935F01892B30 +:105B400009F4ABCE9394A6CF8EED90E0A8CEDBDD2A +:105B5000843041F1282F30E0F901EE0FFF1FE20FF2 +:105B6000F31FE953F74D118212822F5F3F4FF90166 +:105B7000EE0FFF1FE20FF31FE953F74D10829091D4 +:105B8000C728891708F4982F9093C7282BD980919C +:105B9000B228882311F080E0A6D280E0D1DD90E029 +:105BA00080E0089580EA90E0089510928628089594 +:105BB000AC019091862883E0989FF0011124E9536D +:105BC000F74D20E0943018F0822F91E00CC0318125 +:105BD0008281832B6381862BE9F02C3E40F09093E9 +:105BE0008628822F90E0A0E0BC018A2F0895DA0178 +:105BF000A20FB11D3C938281A1E0A20FA40FB52F8B +:105C0000B11D8C938381A2E0A20FA40FB52FB11D0B +:105C10002D5F8C939F5F3396D5CFCF93DF93EC01AD +:105C20000196C6DF9B01482F832F942F892B51F0BB +:105C300018828BE080930A20822F90E00196DF91FA +:105C4000CF9108958FEA88838EE0F4CFE091B32B53 +:105C5000F091B42B9581915081E0943008F080E070 +:105C60000895CF92DF92EF92FF920F931F93CF93FD +:105C7000DF93CDB7DEB7C057D109CDBFDEBF7B0103 +:105C8000E5DF81110EC089ECC059DF4FCDBFDEBF0B +:105C9000DF91CF911F910F91FF90EF90DF90CF9008 +:105CA00008956E012DE2C20ED11CDF92CF928E01BB +:105CB000075A1F4F1F930F938FED92E09F938F937F +:105CC000FF92EF920E945171CDBFDEBF892B09F484 +:105CD000FEC069961FAE6997F801178AA6016CE2AB +:105CE00070E0CE0101960E94825A7C016BED72E059 +:105CF000C8010E949F70892BD9F41981412F50E06F +:105D00004E155F0509F0BFCFCA010397429708F00F +:105D1000BACFBE016F5F7F4F88EF98E20E94EF70AD +:105D200010930C290E94264D0E94BF4C84E6ACCFF4 +:105D300066ED72E0C8010E949F70892B79F4F2E051 +:105D4000EF16F10409F09FCF89818093F6288A81AC +:105D50008093F72881E080931029E4CF6FEC72E004 +:105D6000C8010E949F70892B41F4EA94EF2809F042 +:105D70008ACF89818093E428D5CF68EC72E0C8018E +:105D80000E949F70892B41F4EA94EF2809F07BCFA1 +:105D900089818093E528C6CF6EEB72E0C8010E942E +:105DA0009F70892B41F4EA94EF2809F06CCF898128 +:105DB0008093E628B7CF62EB72E0C8010E949F7023 +:105DC000892B41F4EA94EF2809F05DCF8981809313 +:105DD000E928A8CF6BEA72E0C8010E949F70892B66 +:105DE00061F4F2E0EF16F10409F04DCF8981809360 +:105DF000E7288A818093E82895CF64EA72E0C80199 +:105E00000E949F70892B41F4EA94EF2809F03BCF60 +:105E100089818093EA2886CF6AE972E0C8010E94EE +:105E20009F70892B41F4EA94EF2809F02CCF8981E7 +:105E30008093EB2877CF6EE872E0C8010E949F70D4 +:105E4000892B41F4EA94EF2809F01DCF89818093D2 +:105E5000EE2868CF67E872E0C8010E949F70892B26 +:105E600061F4E2E0EE16F10409F00DCF8981809330 +:105E7000EC288A818093ED2855CF6FE772E0C80146 +:105E80000E949F70892B79F4F5E0EF16F10409F078 +:105E9000FACE85E0FE013196AFEEB8E201900D92A8 +:105EA0008A95E1F73FCF66E772E0C8010E949F70D4 +:105EB000892B09F0E8CE22E0E216F10409F0E3CEE6 +:105EC00089818093F4288A818093F5282BCF8AECEE +:105ED000DBCEEF92FF920F931F93CF93DF93CDB75B +:105EE000DEB76097CDBFDEBF7B01B0DE81110BC096 +:105EF00089EC6096CDBFDEBFDF91CF911F910F91EE +:105F0000FF90EF9008958E010F5F1F4F1F930F9327 +:105F100081E792E09F938F93FF92EF920E945171DD +:105F20000F900F900F900F900F900F90892B09F406 +:105F300041C0188A67E672E0C8010E949F70892BF1 +:105F400039F41092EF271092742888E892E2D1CFAA +:105F500069E572E0C8010E949F70892B31F481E0ED +:105F60008093EF2780937428F0CF67E472E0C80134 +:105F70000E949F70892B11F483E0F2CF65E372E0F9 +:105F8000C8010E949F70892B11F484E0E9CF63E27D +:105F900072E0C8010E949F70892B11F485E0E0CF68 +:105FA00061E172E0C8010E949F70892B09F0A0CFC7 +:105FB00086E0D6CF8AEC9DCFAF92BF92CF92DF9290 +:105FC000EF92FF921F93CF93DF93CDB7DEB7609729 +:105FD000CDBFDEBF7B013ADE182F81110EC089ECE8 +:105FE0006096CDBFDEBFDF91CF911F91FF90EF9004 +:105FF000DF90CF90BF90AF900895CE0101966C01D5 +:106000009F938F938CE092E09F938F93FF92EF92F8 +:106010000E9451710F900F900F900F900F900F9062 +:10602000892B09F44DC0188A6AE370E0C6010E940A +:1060300010717C01009781F15C01AC18BD088C15D2 +:1060400071F2BB24A50168E072E0C6010E94BB703A +:10605000892B31F1A50164E072E0C6010E94BB709A +:10606000B12EA12C892B09F0BACF60E072E0C701F4 +:106070000E949F70892BB9F41092E527AA2021F085 +:1060800081E081278093E227BB2021F081E018275F +:106090001093522684E6A4CFA12EB12E7601E5CF2F +:1060A000A12EB12CE2CF6CEF71E0C7010E949F706E +:1060B000892B09F094CF81E08093E52710E0DECFB3 +:1060C0008AEC8ECF60E281E098E20E945F6660E138 +:1060D00081EF97E20E945F661092E9278FEF80932D +:1060E0000B2084E60895811109C01092E827E1E0B1 +:1060F000F8E280E1DF011D928A95E9F7E1EFF7E22E +:1061000080E1DF011D928A95E9F71092F027109245 +:10611000E9278FEF80930B2010926F281092E727CA +:1061200008958091E92708958A3479F040F48A30FF +:1061300061F08A3111F081110AC088E108958A382E +:10614000E1F38A3D21F480E2089580E1089588E03A +:1061500008952A34310509F4BAC070F42A303105A3 +:1061600009F468C02A31310509F482C021303105B3 +:1061700009F44FC080E008952A38310509F4C2C0FF +:106180002A3D3105B9F724E0FB01DC0101900D92B5 +:106190002A95E1F7DC01149624E0FA0101900D92B2 +:1061A0002A95E1F7DC011896FB013C9624E001906A +:1061B0000D922A95E1F7DC011C96FA013C9624E049 +:1061C00001900D922A95E1F7DC015096FB01709643 +:1061D00024E001900D922A95E1F7DC015496FA0132 +:1061E000709624E001900D922A95E1F7DC01589613 +:1061F000FB01749624E001900D922A95E1F7DC01F1 +:106200005C96FA01749684E001900D928A95E1F70C +:106210000FC024E0FB01DC0101900D922A95E1F70B +:10622000DC01149694E0FA0101900D929A95E1F741 +:1062300081E0089524E0FB01DC0101900D922A9594 +:10624000E1F7DC01149624E0FA0101900D922A9501 +:10625000E1F7DC011896FB01349624E001900D92E1 +:106260002A95E1F7DC011C96FA01349694E0DCCF24 +:1062700024E0FB01DC0101900D922A95E1F7DC019D +:10628000149624E0FA0101900D922A95E1F7DC01C1 +:106290001896FB01369624E001900D922A95E1F7BD +:1062A000DC011C96FA01369624E001900D922A95A5 +:1062B000E1F7DC015096FB013C9624E001900D9241 +:1062C0002A95E1F7DC015496FA013C96CFCF24E001 +:1062D000FB01DC0101900D922A95E1F7DC01149697 +:1062E00024E0FA0101900D922A95E1F7DC0118965D +:1062F000FB013C9624E001900D922A95E1F7DC0128 +:106300001C96E2CF24E0FB01DC0101900D922A955E +:10631000E1F7DC01149624E0FA0101900D922A9530 +:10632000E1F7DC011896FB013C9624E001900D9208 +:106330002A95E1F7DC011C96FA013C9624E00190D5 +:106340000D922A95E1F7DC015096FB01709624E04E +:1063500001900D922A95E1F7DC015496FA017096AE +:1063600085CFE1E0F8E280E2DF011D928A95E9F74E +:106370000895CF93DF93CDB7DEB76B97CDBFDEBF68 +:10638000682F8091B22812D8009749F04BE150E075 +:10639000BC01CE0101960E9438618D819E816B9671 +:1063A000CDBFDEBFDF91CF910895FF920F931F9372 +:1063B000CF93DF93CDB7DEB76B97CDBFDEBFF82E9F +:1063C0008B018EE9672BC9F06F2D8091B2280E9456 +:1063D0005C29482F80EF443080F46091B228CE01D0 +:1063E000019609D98BE1FE013196D80101900D92F9 +:1063F0008A95E1F7F801F18280E06B96CDBFDEBFB0 +:10640000DF91CF911F910F91FF900895FB0130977D +:1064100019F08193BF01C9CF8EE90895CF93DF931F +:10642000EB01209789F0682F8091B2280E945C29A7 +:10643000682F80EF643028F4AE018091B22824D90F +:1064400080E0DF91CF9108958EE9FBCF9F92AF92CC +:10645000BF92CF92DF92EF92FF920F931F93CF9351 +:10646000DF93CDB7DEB72897CDBFDEBF082F962EBE +:106470005A0179018EE9232B29F08091B5288430C7 +:1064800080F08EEC2896CDBFDEBFDF91CF911F91BB +:106490000F91FF90EF90DF90CF90BF90AF909F90C3 +:1064A0000895602F8091B2280E945C29843008F4FE +:1064B00060C08091B2280E948129182F843008F78B +:1064C0008BE190E00E94954C6C01892B61F0F70103 +:1064D00082819381009749F00E94954CF701848353 +:1064E0009583892B21F48EE0CDCF148215824BE168 +:1064F00050E0B601C7010E946A4C6091B2288AE060 +:106500000E94FC267C0148E050E0BC01CE010196CF +:106510000E94634CE12FF0E0EE0FFF1F81E090E05E +:106520008C0F9D1FE80FF91FC082D18248E050E018 +:10653000B7010E946A4C402F612F8091B2280E94BF +:10654000A329492D612F8091B2280E94612AA501BB +:10655000612F8091B22816D86091B5286F5F609343 +:10656000B5288091B2280E9457290E94F22680E027 +:1065700089CF8EED87CFCF93DF93D82FE6E9F8E26E +:106580008CE1DF011D928A95E9F7109297282093FC +:106590009D2830939E282093992830939A2827E9A4 +:1065A00038E28D2F53DFC82F811108C06D2F8091E5 +:1065B000B2280E945C29843008F0C0EF8C2FDF9154 +:1065C000CF910895CF93DF93D82FE6E9F8E28CE1DD +:1065D000DF011D928A95E9F781E080939728209347 +:1065E0009D2830939E2820939F28209399283093AC +:1065F0009A2827E938E28D2F29DFC82F811108C09A +:106600006D2F8091B2280E945C29843008F0C0EF81 +:106610008C2FDF91CF9108957F928F929F92AF92AE +:10662000BF92CF92DF92EF92FF920F931F93CF937F +:10663000DF93CDB7DEB7782EE6E9F8E287E0DF0139 +:106640001D928A95E9F782E0809397280093A52808 +:106650001093A6282093A7283093A828C092A92891 +:10666000D092AA28E092AB28F092AC2880929D2884 +:1066700090929E28A0929F28B092A0288092A12854 +:106680009092A228A092A328B092A42889898093EE +:10669000AD281092AE281092AF281092B028109218 +:1066A000B1281092992810929A2827E938E2872D6C +:1066B000CDDE182F811108C0672D8091B2280E946D +:1066C0005C29843008F010EF812FDF91CF911F916A +:1066D0000F91FF90EF90DF90CF90BF90AF909F9081 +:1066E0008F907F900895DF92EF92FF920F931F9308 +:1066F000CF93DF93D62E642FA901F70126E938E264 +:106700009CE1D9011D929A95E9F780939728109200 +:106710009D2810929E2810929F281092A028E80190 +:1067200088819981AA818093A1289093A228A0931F +:10673000A32880819181A2818093A7289093A82883 +:10674000A093A928808191818093992890939A2879 +:1067500027E938E28D2D7ADEC82F811108C06D2D12 +:106760008091B2280E945C29843008F0C0EF8C2F01 +:10677000DF91CF911F910F91FF90EF90DF900895DF +:10678000EF92FF921F93CF93DF93CDB7DEB7289799 +:10679000CDBFDEBF182F80EF143008F040C08091CD +:1067A000B528882309F444C04FEF612F8091B228A7 +:1067B0000E94A32940E0612F8091B2280E94612AA3 +:1067C0004FEF5FEF612F8091B2280E94C22A609143 +:1067D000B2288AE00E94FC267C0148E050E0BC011F +:1067E000CE0101960E94634CE12FF0E0EE0FFF1FF7 +:1067F00081E090E08C0F9D1FE80FF91F108211823D +:1068000048E050E0B7010E946A4C6091B5286150A1 +:106810006093B5288091B2280E94572980E028967D +:10682000CDBFDEBFDF91CF911F91FF90EF90089514 +:106830008EECF5CFEF92FF920F931F93CF93DF93E0 +:10684000C82FD62F7A018901E6E8F8E280E1DF015E +:106850001D928A95E9F76C2F8091B2280E941F2A19 +:106860009C018DED9CE480938828909389280115E4 +:106870001105A9F42E193F09209386283093872803 +:106880008C2F77DD80938A2890938B288D2FDF9132 +:10689000CF911F910F91FF90EF900C94674D009353 +:1068A000862810938728ECCFEF92FF920F931F93C7 +:1068B000CF93DF93F82EE42EE901E6E8F8E280E1D9 +:1068C000DF011D928A95E9F76F2D8091B2280E9411 +:1068D0001F2AC00FD11F8C179D07C8F00093862870 +:1068E0001093872887EF9CE48093882890938928C9 +:1068F0008F2D3FDD80938A2890938B288E2DDF91FA +:10690000CF911F910F91FF90EF900C947D4D8EEBE6 +:10691000DF91CF911F910F91FF90EF900895CF934A +:10692000DF93EC0101960E942F4D9B01482F832F8E +:10693000942F892B51F018828BE080930A20822FAC +:1069400090E00196DF91CF9108958FEA888388E1E6 +:10695000F4CF0E94604D882319F08F3A29F00895F2 +:106960009BE090930A20089599E1FBCFF2DF90E03D +:106970000895682F8091B2280E945C298430F0F03D +:106980008091E927811102C08EEA08950E94E02BD0 +:10699000882321F080910B208111F6CF60910B208C +:1069A0008091B2280E94D227982F847092FD08C04F +:1069B0009091E827911105C08DE908958EED089515 +:1069C00080E00895CF93DF93CDB7DEB72897CDBF92 +:1069D000DEBF262F28232F702D83862397239C012B +:1069E00044E0369527954A95E1F72F702E83292F9D +:1069F0002F702F83892F992782958F7088879B010D +:106A000022273F7081E0232B09F480E0898321E075 +:106A1000CB01807F9927892B09F420E02A8321E08C +:106A2000CB018F709927892B09F420E02B836627EF +:106A3000707F81E0672B09F480E08C8330910B201C +:106A4000FE01319690E080E02191222359F0A5E0EB +:106A5000B0E0AC0FBD1FA80FB91F2C91231769F030 +:106A60002E3069F001968430910571F780E0289608 +:106A7000CDBFDEBFDF91CF91089581E0F8CF82E0F6 +:106A8000F6CF882341F080910C2080936D281092DE +:106A90006B2881E0089590916B289F5F90936B28FD +:106AA000993188F7089561E0ECCF80936D281092BA +:106AB0006B28089580930D2063E570E090E00C94BE +:106AC000624C83E080930D2080930C2010926B2801 +:106AD0001092232810922128109222280895F1DF85 +:106AE00010926D2881E080936C2880930E20109284 +:106AF000212810922228109223280895E2DF89E0AD +:106B0000D9CFDF92EF92FF920F931F93CF93DF9332 +:106B10008C017B01FC01D081D0906C286330710521 +:106B2000C0F082E0E81AF108E3E0EE16F10488F024 +:106B3000B701C8010E948A5181110BC050E040E0AA +:106B400070E060E081EC0E94614C81E0F80180839C +:106B50000EC0C0916D28C13029F1C23031F0C11191 +:106B600048C0F8018081803E29F0F801108284E05D +:106B700090E026C081818F7080930E2040910C2977 +:106B800050E068EF78E2C8010E94EF70C0910C29D4 +:106B9000D0E081E08ADFBE01C8010E941651CE011B +:106BA000029654C0F8018081807F803D89F481E0A5 +:106BB0007CDF61E070E0C8010E94165188E190E03E +:106BC000DF91CF911F910F91FF90EF90DF9008958B +:106BD0009D2F9870D3FF0FC0F2E0EF16F10438F04C +:106BE000F80181818F7020910E202813BECFC2E062 +:106BF00002C090E0C0E08D2F807C803899F1803C0D +:106C000009F453C08111B1CFD2FDCF5F81E0D11023 +:106C100080E080936C28D4FDA8CF91111DC08260C4 +:106C2000F8018083D0E0B7016C1B7D0BC8018C0F8D +:106C30009D1F0E941922009709F497CFC80FD91FF2 +:106C4000BE01C8010E9416512296CE0123E0880F92 +:106C5000991F2A95E1F7B4CF8A6090910E20F80130 +:106C60009183DECF8D2F8170D81609F47ECFD4FFAB +:106C700003C08D2D826A6ACF40912128509122282D +:106C80004115510509F471CF495F5F4F33E05695C7 +:106C900047953A95E1F763E278E2C8010E94EF7008 +:106CA00080912128909122288BCFD77FD23C09F068 +:106CB0005CCF15DF80916D2864E570E090E00E9464 +:106CC000624C1CDFD0E067CF6032710569F4FC01D3 +:106CD0002081203549F42181211106C062E070E055 +:106CE0000E948A518170089580E0FCCFEF92FF925C +:106CF0000F931F93CF93DF93CDB7DEB76297CDBFCE +:106D0000DEBF7C01CB01698B7A8B009709F467C0E9 +:106D1000F70110811632F9F450E040E070E060E0D5 +:106D200083E90E94614C83E0C5DE10926B2880915C +:106D30000D20883008F09EC0863008F0ECC083300B +:106D400009F4A5C08450823018F4133909F4AFC097 +:106D500080E0A9DE77C0123511F01435A9F450E0B7 +:106D600040E070E060E084E90E94614C8091702016 +:106D700090917120A091722089839A83AB83CE0178 +:106D800001960E94D42BCFCFC7019EDF882391F0BC +:106D900050E040E070E060E081E90E94614CAEDECE +:106DA00010926B2862E070E0C7010E94165180E2E9 +:106DB00090E015C0103EE9F480E077DE49895A89F9 +:106DC000BA01695F7F4F93E0769567959A95E1F7F1 +:106DD000C70197DE28E020930D2010926B28629661 +:106DE000CDBFDEBFDF91CF911F910F91FF90EF904C +:106DF0000895143439F482DE8AE0F701808384E058 +:106E000090E0EDCF1837A9F488E080930D20109220 +:106E10006B2889E0EBE9F2E2D70101900D928A95A7 +:106E2000E1F769E070E0C7010E94165188E590E043 +:106E3000D6CF123C21F01E3F11F0183831F45EDE3F +:106E400010926B28F7011082DACF80E02CDE8111DE +:106E5000A6CF49895A894930510508F068CFBA014F +:106E6000695F7F4F83E0769567958A95E1F7C70163 +:106E700048DEB5CF883009F485C0893009F068CF85 +:106E8000123519F0143509F063CF83E013DE8091D9 +:106E90000D2080930C2084E00DDE8091F728F7010F +:106EA00080838091F628818380E190E098CFE09103 +:106EB000562BF091572BCE010296199588E88983BD +:106EC000F7018181803291F404E024E0AE014F5F4C +:106ED0005F4FBE016F5E7F4FC7010E9445518823FF +:106EE00029F085E0E7DD89899A8979CFF7018181E9 +:106EF000803709F02DCF04E024E0AE014F5F5F4FF3 +:106F0000BE016F5E7F4FC7010E944551882309F47F +:106F10001FCF86E0E7CF153909F01ACF80915C2B9F +:106F2000873008F415CFE091562BF091572BCE0106 +:106F300001961995F7018181803279F400E024E00F +:106F4000AE014C5F5F4FBE016F5E7F4FC7010E9475 +:106F50004551882311F087E0C5CFF7018181803743 +:106F600009F0F6CE00E024E0AE014C5F5F4FBE01B9 +:106F70006F5E7F4FC7010E944551882309F4E8CE18 +:106F800088E0B0CF88E180936B28103E29F480E040 +:106F90008CDD49895A8963CF1739D9F753CFFC0162 +:106FA0006630710540F02381CB010697281719063A +:106FB00029F482E008956330710540F092819F3A90 +:106FC00039F06730710510F081E0911180E008958B +:106FD00083E00895FC016830710518F080818823F2 +:106FE00031F081E0809371288093702812C0109254 +:106FF000712810927028318192812381343A29F5C9 +:10700000892F8C7F49F482E091FF09C081E0809351 +:10701000712881E89AE608959B7FC1F783E0809309 +:107020007128822F807F09F03EC0237086E02230D5 +:1070300039F087E0233021F084E0213009F485E045 +:107040008093702890E080E00895343819F4922BF2 +:10705000C9F3C7CF303B79F497FF3AC0892F8076C8 +:107060009F70882371F181E080937028809371284C +:1070700086E89AE60895323BC1F410926E28911189 +:107080000AC08FEF80930F20822F887F51F081E01C +:1070900080937028EDCF9F7090930F2010926F28EF +:1070A000F3CF237079F281E09FCF323E81F2363DFB +:1070B00009F097CF97FF0CC0892F807309F091CF0B +:1070C000937090930F2010926F2820936E28BACF60 +:1070D0008FEF80930F20922B90936E28B3CFDC011B +:1070E0001D9287E0ECEDF8E201900D928A95E1F7B0 +:1070F00088E090E008950F931F93CF93DF93CDB76F +:10710000DEB72797CDBFDEBF8C018091E8278111C4 +:107110000DC08DE9F801808381E090E02796CDBF16 +:10712000DEBFDF91CF911F910F91089561307105FE +:1071300011F08EE7EFCF0E949130882321F08091EB +:107140000B20882311F08EEAE5CF87E0ECEDF8E222 +:10715000DE01119601900D928A95E1F78091E72862 +:107160009091EC28892B81F40E94844E87E0FE01E7 +:107170003196ACEDB8E201900D928A95E1F70E944C +:10718000264DF8011082C8CF8091E3280E94D14E8D +:10719000EDCFCF92DF92EF92FF920F931F93CF9399 +:1071A000DF93EC017B016230710578F48AE6888315 +:1071B00081E8898382E090E0DF91CF911F910F9168 +:1071C000FF90EF90DF90CF90089580916F288823F3 +:1071D00069F3809197288350823020F08BE6888372 +:1071E0001982E8CF609198288091B2280E945C298A +:1071F000182F8430D8F6682F8091B2280E94942AE4 +:107200006C01612F8091B2280E943B2A6FE07FE0E1 +:10721000C601D8DB811104C089E6888382E8C9CF22 +:1072200081E0E81AF1086091A7287091A828809160 +:107230009728833041F500919D2810919E280E0DCE +:107240001F1D0617170720F08AE6888384E8B1CF50 +:107250006E157F05C8F300939D2810939E286091BA +:107260009B2870919C28A701CE0101960E946A4C30 +:1072700000939F281093A02867E978E280919628D0 +:10728000CDD81882ADCF6E157F05F0F210E000E08A +:10729000843029F780919D2890919E28AB01415020 +:1072A00051098E0D9F1D4817590708F4CA01809394 +:1072B0009D2890939E2880919F289091A0288E0DC4 +:1072C0009F1D0E94F86F8C01CACF0F931F93CF931D +:1072D000DF93EC018B016130710551F08EE78883FB +:1072E00001E010E0C801DF91CF911F910F91089547 +:1072F0000E949130882321F08091E827811103C0FA +:107300008DE98883EFCF0E94E02B882321F08091C4 +:107310000B208111F5CF60910B208091B2280E9443 +:10732000D227898382E08A83188203E010E0DACFD3 +:10733000CF92DF92FF920F931F93CF93DF93EC01D5 +:107340008B016230710520F48AE6888381E80CC0E5 +:10735000F0900F208FE08F1548F480916F288111F5 +:107360001CC08AE6888386E8898350C06F2D80918F +:10737000B2280E945C29843020F08AE6888382E863 +:10738000F3CF66E978E28F2D41D88111F6CF81E005 +:1073900080936F288FEF80930F20609198288091C1 +:1073A000B2280E945C29F82EE3E0E81768F2682F03 +:1073B0008091B2280E94942A6C016F2D8091B2288E +:1073C0000E943B2A6FE07FE0C601FCDA811102C017 +:1073D00089E6D4CF80919728823010F089E6B5CF26 +:1073E0008FEF800F2091992830919A28013021F455 +:1073F0002E3F310508F0B5CF60916E28462F50E042 +:107400004217530768F08BE68883198282E090E088 +:10741000DF91CF911F910F91FF90DF90CF90089552 +:10742000F901E41BF50B8E171F0619F010F082E628 +:10743000A5CF811102C0822F861B082F10E0611199 +:1074400061E080919B28680F615070E0A801CE0137 +:1074500001960E946A4C18821982C8010296D8CF00 +:10746000CF92DF92EF92FF920F931F93CF93DF9310 +:10747000EC018B01672B21F48AE6888381E80CC03C +:10748000F0900F208FE08F1598F480916F28811174 +:1074900027C08AE6888386E8898382E090E0DF91CE +:1074A000CF911F910F91FF90EF90DF90CF900895B3 +:1074B0006F2D8091B2280E945C29843020F08AE6EA +:1074C000888382E8E9CF66E978E28F2D0E94063250 +:1074D0008111F5CF81E080936F288FEF80930F208B +:1074E000609198288091B2280E945C29F82E83E050 +:1074F0008F1510F26F2D8091B2280E94942A6C0192 +:107500006F2D8091B2280E943B2A6FE07FE0C60178 +:1075100059DA811102C089E6D3CF509197288DEFB7 +:10752000850F823010F089E6A8CFEE24EA94E00EB1 +:107530002091992830919A28013079F42E3F310515 +:1075400008F0A7CF60916E28E62FF0E0E217F3076E +:1075500048F08BE688831982A0CFE216130691F3D8 +:1075600088F397CFE11009C0C9018E1B9F0B8E3F96 +:10757000910510F08DEF90E0E82E0E2D10E05430C4 +:1075800069F5C9018E1B9F0B8017910738F5462FAF +:10759000421BD42EDE0CCE010296611161E02091D7 +:1075A0009B28620F615070E05430D1F4DD20C1F0AF +:1075B000ED18F12CA7010E94634C4D2D50E0609115 +:1075C0009B2870919C28C70102968C0F9D1F0E94DA +:1075D000634C18821982C801029661CFD12CDBCF8F +:1075E000A801F5CFCF92DF92FF920F931F93CF9315 +:1075F000DF93EC018B01672B21F48AE6888381E815 +:107600000CC0F0900F208FE08F1548F480916F2808 +:1076100081111DC08AE6888386E8898351C06F2D59 +:107620008091B2280E945C29843020F08AE6888309 +:1076300082E8F3CF66E978E28F2D0E94063281114D +:10764000F5CF81E080936F288FEF80930F206091BA +:1076500098288091B2280E945C29F82EE3E0E81770 +:1076600060F2682F8091B2280E94942A6C016F2DDD +:107670008091B2280E943B2A6FE07FE0C601A2D928 +:10768000811102C089E6D3CF80919728823010F40F +:1076900089E6B4CF8FEF800F2091992830919A28F6 +:1076A000013021F42E3F310508F0B4CF60916E28EF +:1076B000462F50E04217530768F08BE68883198203 +:1076C00082E090E0DF91CF911F910F91FF90DF90CA +:1076D000CF900895F901E41BF50B8E171F0619F0E2 +:1076E00010F082E6A4CF811102C0822F861B082FE2 +:1076F00010E0611161E080919B28680F615070E09B +:10770000A801CE0102960E94634C18821982C8011A +:107710000296D8CFFF920F931F93CF93DF9300D0A1 +:107720000F92CDB7DEB78C01CB016130710571F0DE +:107730008EE7F801808381E090E02496CDBFDEBF24 +:10774000DF91CF911F910F91FF9008952091E9272C +:10775000222321F0F0900B20FF2021F02EEAF801E7 +:107760002083EBCF6091B22885E00E94FC26BC010B +:1077700044E050E0CE0101960E94634CD80111967E +:10778000FE0131969E012B5F3F4F81918F3F11F09B +:107790008D93F394E217F307C1F7F80110828F2D50 +:1077A00090E00196CACFFF920F931F93CF93DF9380 +:1077B000EC018B018EE76230710529F48091E92795 +:1077C00081110BC08DE9888301E010E0C801DF91D1 +:1077D000CF911F910F91FF90089560910B208091A0 +:1077E000B2280E94D22783FFEDCF8091E82788231B +:1077F00049F30E94E02B882321F080910B20811116 +:10780000E1CFF9806F2D8091B2280E94C6278111A7 +:1078100002C080E4D8CF6F2D8091B2280E94342816 +:1078200089831882D3CFEF92FF920F931F93CF9348 +:10783000DF9300D0CDB7DEB78C017B0161157105F8 +:1078400029F48AE6F801808381E813C080917128C9 +:107850008130B9F390917028913099F3823069F5B5 +:1078600010926F286230710531F08AE6F80180834A +:1078700082E8818316C0F801F1806F2D8091B228D3 +:107880000E945C29843088F767E978E28F2D0E9496 +:10789000D5318111EACF81E080936F28F801108201 +:1078A000118282E090E02396CDBFDEBFDF91CF91C1 +:1078B0001F910F91FF90EF9008958330B9F481E00C +:1078C0000E947330F4E0EF16F10479F6F80181813B +:1078D0009281A38189839A83AB83CE0101960E9412 +:1078E000832B843010F60E94A02BD8CF8DE6AACF30 +:1078F000CF93DF93EC010E94714C282F30E08091F0 +:107900000D2990910E29281B390B32272327322766 +:10791000288339831A8283E090E0DF91CF91089524 +:10792000CF93DF93EC018EE76130710529F48091EC +:10793000B228882339F08DE9888381E090E0DF91D7 +:10794000CF9108950E94FC27811106C080910B20E1 +:10795000882311F08EEAF0CF0E94D52D61E070E00F +:10796000CE01DF91CF910C940D2EEF92FF920F93E9 +:107970001F93CF93DF93CDB7DEB72797CDBFDEBF81 +:107980008C017B0181E00E94733088E0E816F104ED +:1079900031F587E0E3E7F0E2DE01119601900D9208 +:1079A0008A95E1F747E050E0BE016F5F7F4FC80165 +:1079B00001960E94E270892BB1F40E94DE2B0E9496 +:1079C000F226F801108281E090E02796CDBFDEBF5D +:1079D000DF91CF911F910F91FF90EF900895F4E008 +:1079E000EF16F10421F08EE7F8018083ECCFF80167 +:1079F0008181898382818A8383818B83CE010196F1 +:107A00000E94D42BF1CF1F93CF93DF93EC018EE72D +:107A10006230710529F48091E927811108C08DE950 +:107A2000888381E090E0DF91CF911F91089560916C +:107A30000B208091B2280E94D22783FFF0CF809143 +:107A4000E927882361F380910B208111E8CF198108 +:107A50000E94E02B81111F70412F60910B208091BB +:107A6000B2280E9402281882DCCF0F931F93CF9375 +:107A7000DF93EC018FEA88830CED18E2F801808532 +:107A8000898381858A8382858B83CE0104960E94B7 +:107A90008D4DF80185858F838CE080930A2088E0E6 +:107AA00090E0DF91CF911F910F910895CF93DF93D5 +:107AB000EC016930710548F48AE6888381E889839E +:107AC00082E090E0DF91CF91089568E002960E94F5 +:107AD0005F66188219828AE090E0F4CFEF92FF92FD +:107AE0000F931F93CF93DF93EC017B018091E827E5 +:107AF000882331F081E090E02091B228211101C06B +:107B000080E00E9473308091E927811113C0809139 +:107B1000E82781110FC08091B228882359F08DE9A0 +:107B2000888381E090E0DF91CF911F910F91FF90CA +:107B3000EF90089582E0E816F10411F08EE7F0CF9F +:107B4000F9808091B228811102C0F110E8CF6F2D29 +:107B50000E94C627811102C08EE9E2CF6F2D80916D +:107B6000B2280E948B28823010F080E4D9CF81E0C7 +:107B70000E949430E82EF092752881E0809373285B +:107B800028E030E041E058E26F2D8091B2280E9459 +:107B9000ED28F12CA70161E078E280ED0E94614CB4 +:107BA00068E086E798E20E945F6648E050E066E79A +:107BB00078E281ED0E94614C48E050E061EF77E2AD +:107BC00083ED0E94614CAE014F5F5F4F01E018E210 +:107BD00021EF37E266E778E288E090E00E9421201A +:107BE00048E050E061EF77E283ED0E94614CA7012D +:107BF00070E060E0C8010E94097180E180930A2072 +:107C00008FEA888389E090E08ECFFC018EE76230B6 +:107C1000710509F48CE1808381E090E00895EF9292 +:107C2000FF920F931F93CF93DF93CDB7DEB76B9780 +:107C3000CDBFDEBF8C018EE76230710561F4F801C3 +:107C4000E1806E2D8091B2280E945C29F82EF3E02D +:107C5000F81778F48EE9F801808381E090E06B9664 +:107C6000CDBFDEBFDF91CF911F910F91FF90EF90BD +:107C70000895682F8091B2280E94942A6FE07FE0D7 +:107C80000E94E234811102C08EEAE5CF6F2D80910F +:107C9000B2280E94052A8230E9F6BE016F5F7F4F4D +:107CA0008E2D0E94D531F8011192CF014F81588558 +:107CB00069857A850E94824F85E090E0D0CFBF929F +:107CC000CF92DF92EF92FF920F931F93CF93DF93A8 +:107CD000CDB7DEB76B97CDBFDEBF8C018EE76230CC +:107CE000710529F48091E927811112C08EEAF8010B +:107CF000808381E090E06B96CDBFDEBFDF91CF91B6 +:107D00001F910F91FF90EF90DF90CF90BF9008955B +:107D1000F801B1806B2D8091B2280E945C29E82E79 +:107D2000F3E080EFFE1518F36E2D8091B2280E94CB +:107D3000942A6C016FE07FE00E94E234882341F1D5 +:107D4000823041F16E2D8091B2280E94052AF82ED2 +:107D50006E2D8091B2280E943B2AE82EBE016F5FF3 +:107D60007F4F8B2D0E94D531F1E0FF15B0F08B8154 +:107D70009C81F801F182E282C382D482858396835A +:107D80001782108687E0F801108290E00196B3CF49 +:107D90008DE9ADCF1092E627D5CFF2E0FF1222C0D9 +:107DA000F801F182E282C382D4824F8558896989C1 +:107DB0007A89C80105960E94824F4B895C896D893A +:107DC0007E89C80109960E94824F4F815885698536 +:107DD0007A85C8010D960E94824F8F89F801818BA8 +:107DE00081E1D1CF8DEF8F0D823028F5F801F1823E +:107DF000E282C382D4828B859C85AD85AC016A2FDB +:107E000070E0C80105960E948A4F89899A89AB89DA +:107E1000AC016A2F70E0C80108960E948A4F8E85D7 +:107E20009F85A889AC016A2F70E0C8010B960E945B +:107E30008A4F8DE0A8CF81EC5ACF1F93CF93DF9369 +:107E4000EC018EE76230710571F469818091B2288E +:107E50000E945C29182F80EF143028F48091E927C4 +:107E6000811108C08EEA888381E090E0DF91CF9194 +:107E70001F91089560910B208091B2280E94D22713 +:107E800082FFF0CF612F8091B2280E94942A60E097 +:107E900070EF0E94E234882331F0823031F0812F7C +:107EA0000E94C033E0CF8DE9DECF1092E627F7CFF6 +:107EB000AF92BF92CF92DF92EF92FF920F931F93F8 +:107EC000CF93DF93CDB7DEB76F97CDBFDEBF8C0109 +:107ED0008EE76630710561F4F801A1806A2D80910A +:107EE000B2280E945C29B82EF3E0F81798F48EE9C6 +:107EF000F801808381E090E06F96CDBFDEBFDF9117 +:107F0000CF911F910F91FF90EF90DF90CF90BF9096 +:107F1000AF900895C80102960E94914F6B017C01B9 +:107F2000F7FCE5CF6B2D8091B2280E94942A6FEF69 +:107F30007FE00E94E234811102C08EEAD9CF6B2D1E +:107F40008091B2280E94052A823089F6BE016F5FB7 +:107F50007F4F8A2D0E94D5318111CACF8B859C8598 +:107F6000AD85BE858C199D09AE09BF094F8558891D +:107F700069897A8984179507A607B7074CF04B895A +:107F80005C896D897E89481759076A077B0714F455 +:107F90008EEBAECF8B879C87AD87BE87888D998D02 +:107FA000AA8DBB8D8C199D09AE09BF09888F998F49 +:107FB000AA8FBB8FBE016F5F7F4F8A2D0E940E324A +:107FC00097CFAF92BF92CF92DF92EF92FF920F9333 +:107FD0001F93CF93DF93CDB7DEB76F97CDBFDEBFD3 +:107FE0008C018EE76630710561F4F801A1806A2D7D +:107FF0008091B2280E945C29B82EF3E0F81798F41B +:108000008EE9F801808381E090E06F96CDBFDEBFFE +:10801000DF91CF911F910F91FF90EF90DF90CF9064 +:10802000BF90AF900895C80102960E94914F6B01D6 +:108030007C01F7FCE5CF6B2D8091B2280E94052AC8 +:108040008230F1F6BE016F5F7F4F8A2D0E94D531DD +:108050008111D7CF8F89811102C08DE9D2CF8B8555 +:108060009C85AD85BE858C0D9D1DAE1DBF1D4F85AC +:10807000588969897A8984179507A607B7074CF04C +:108080004B895C896D897E89481759076A077B0788 +:1080900014F48EEBB6CF8B879C87AD87BE87BE016D +:1080A0006F5F7F4F8A2D0E940E32ABCFAF92BF928F +:1080B000CF92DF92EF92FF920F931F93CF93DF93B4 +:1080C000CDB7DEB76F97CDBFDEBF8C018EE76630D0 +:1080D000710561F4F801A1806A2D8091B2280E9497 +:1080E0005C29B82EF3E0F81798F48EE9F801808344 +:1080F00081E090E06F96CDBFDEBFDF91CF911F9101 +:108100000F91FF90EF90DF90CF90BF90AF900895C8 +:10811000C80102960E94914F6B017C01F7FCE5CFEC +:108120006B2D8091B2280E94942A6FE070E00E942B +:10813000E234811102C08EEAD9CF6B2D8091B22832 +:108140000E94052A823089F6BE016F5F7F4F8A2D1B +:108150000E94D5318111CACF8B859C85AD85BE85A6 +:108160008C0D9D1DAE1DBF1D4F85588969897A896B +:1081700084179507A607B7074CF04B895C896D8972 +:108180007E89481759076A077B0714F48EEBAECF38 +:108190008B879C87AD87BE87BE016F5F7F4F8A2D1F +:1081A0000E940E32A3CF0F931F93CF93DF9300D083 +:1081B00000D0CDB7DEB78C018EE76430710509F0D1 +:1081C00055C0F80181818C8322812D8393819E8308 +:1081D000822B892B61F48DE9808381E090E02696E3 +:1081E000CDBFDEBFDF91CF911F910F910895809198 +:1081F000E927882321F080910B20882311F08EEA53 +:1082000035C08091E827811123C0E091B2288E2FDC +:1082100090E0FC01EE0FFF1FE80FF91FE953F74D47 +:1082200081819281A38189839A83AB8343E050E06B +:10823000BE016C5F7F4FCE0101960E94E270892BD8 +:10824000A1F40E94C64D82FFDACF0E94DE2B08C047 +:108250000E94E02B8823C9F280910B208111D5CF99 +:10826000CE0104960E94A72D01C08DE9F801B4CF7C +:10827000AF92BF92CF92DF92EF92FF920F931F9334 +:10828000CF93DF93CDB7DEB76F97CDBFDEBF6C0165 +:108290006130710599F08EE7F601808381E090E00E +:1082A0006F96CDBFDEBFDF91CF911F910F91FF90F1 +:1082B000EF90DF90CF90BF90AF9008956091B2287B +:1082C00085E00E94FC26BC0144E050E0CE014C96C3 +:1082D0000E94634CCE014C967C0100E0F701819135 +:1082E0007F018F3F41F1602F8091B2280E94052AC3 +:1082F000823009F5BE016F5F7F4FF70182915F0108 +:108300000E94D531182F81111AC08B859C85AD85AF +:10831000BE858F839887A987BA87188E198E1A8E83 +:108320001B8EBE016F5F7F4FF50180810E940E3270 +:10833000182F811104C00F5F043081F610E01092F5 +:108340000F290E94264DF6011083A8CFAF92BF924D +:10835000CF92DF92EF92FF920F931F93CF93DF9311 +:10836000CDB7DEB76F97CDBFDEBF6C016130710551 +:1083700099F08EE7F601808381E090E06F96CDBFA3 +:10838000DEBFDF91CF911F910F91FF90EF90DF90B3 +:10839000CF90BF90AF9008956091B22885E00E9481 +:1083A000FC26BC0144E050E0CE014C960E94634C98 +:1083B000CE014C967C0100E0F70181917F018F3F57 +:1083C00041F1602F8091B2280E94052A823009F580 +:1083D000BE016F5F7F4FF70182915F010E94D5312F +:1083E000182F81111AC08F819885A985BA858B872E +:1083F0009C87AD87BE87188E198E1A8E1B8EBE0184 +:108400006F5F7F4FF50180810E940E32182F81111E +:1084100004C00F5F043081F610E010920F290E9413 +:10842000264DF6011083A8CF7F928F929F92AF9234 +:10843000BF92CF92DF92EF92FF920F931F93CF9351 +:10844000DF93EC018EE76231710531F47980872D7D +:108450000E94B934882389F0888381E090E0DF911D +:10846000CF911F910F91FF90EF90DF90CF90BF9031 +:10847000AF909F908F907F9008958D849E84AF845D +:10848000B888C984DA84EB84FC840D811E812F8135 +:1084900038854B815C8181E09989911101C080E030 +:1084A0008F936A81872D0E940C3388830F90D5CFDC +:1084B000EF92FF920F931F93CF93DF93EC018EE720 +:1084C0006830710549F419810A81EB80FC80812FA5 +:1084D0000E94B934882351F0888381E090E0DF91D5 +:1084E000CF911F910F91FF90EF9008952D813E81C4 +:1084F000A701602F812F0E94E232EECFDF92EF9230 +:10850000FF920F931F93CF93DF93EC018EE76B30B5 +:10851000710531F4D9808D2D0E94B934882359F02A +:10852000888381E090E0DF91CF911F910F91FF90C0 +:10853000EF90DF900895888599852D813E8182177F +:10854000930710F0892B11F48EEBEACF7E0188E0BF +:10855000E80EF11C8E010B5F1F4F2B813C814A817D +:108560006D2D83E00E947333DBCFDF92EF92FF9299 +:108570000F931F93CF93DF93EC018EE76B30710560 +:1085800031F4D9808D2D0E94B934882359F0888325 +:1085900081E090E0DF91CF911F910F91FF90EF90DC +:1085A000DF90089588859985AA852D813E814F8128 +:1085B00082179307A40718F0892B8A2B11F48EEBEE +:1085C000E6CF7E0188E0E80EF11C8E010B5F1F4FA5 +:1085D0002B813C814A816D2D84E00E947333D7CF7B +:1085E0006F927F928F92AF92BF92CF92DF92EF9273 +:1085F0000F931F93CF93DF93EC018EE768307105E3 +:1086000049F469818091B2280E945C29182F843036 +:1086100088F08EE9888381E090E0DF91CF911F910F +:108620000F91EF90DF90CF90BF90AF908F907F90A1 +:108630006F900895CA80DB80EC806D807E808F8093 +:10864000682F8091B2280E94942A5C01612F80914A +:10865000B2280E943B2A082F6FE07FE0C5010E94EC +:10866000E2348823F1F08230F1F0612F8091B2285A +:108670000E94052A8350823060F6612F8091B228D3 +:108680000E941F2A9C0140E02C153D054E0538F044 +:108690002C193D094E0926153705480530F48EEB97 +:1086A000B9CF8EEAB7CF00E0E0CF4C2D50E0930178 +:1086B000602F812F0E941A348111ACCFCE01DF913F +:1086C000CF911F910F91EF90DF90CF90BF90AF901F +:1086D0008F907F906F900C948F342F923F924F9297 +:1086E0006F927F928F92AF92BF92CF92DF92EF9272 +:1086F000FF920F931F93CF93DF93EC016B016830D0 +:108700007105A8F48EE7888381E090E0DF91CF9136 +:108710001F910F91FF90EF90DF90CF90BF90AF909F +:108720008F907F906F904F903F902F900895698128 +:108730008091B2280E945C29182F843010F08EE9B5 +:10874000E2CF6A807B808C802D803E804F80682FB6 +:108750008091B2280E94942A6FEF70E00E94E23468 +:10876000811102C08EEACFCF612F8091B2280E9482 +:10877000052A8350823018F788E0C81AD108C6014C +:10878000A0E0281639064A0608F4BCCF612F809174 +:10879000B2280E941F2AA0E0681679068A0638F4DB +:1087A00086199709A80982159305A40510F48EEB84 +:1087B000AACF89E180930A205301672819F081E04C +:1087C000A81AB108812F0E94B9317C01BE01685FEF +:1087D0007F4FA601CE010E94F870EA0C0E2D10E02A +:1087E000A601B801CE010E946A4C87EF9CE48093F9 +:1087F0008828909389280C0D1D1D00938A281093BA +:108800008B28188281CF2F923F924F925F926F9266 +:108810007F928F929F92AF92BF92CF92DF92EF9210 +:10882000FF920F931F93CF93DF93CDB7DEB72797B8 +:10883000CDBFDEBF7C016B012DB73EB72E833F83DA +:108840008EE76830710558F0F70161818091B22898 +:108850000E945C29382EF3E0F817F8F48EE9F7014E +:10886000808381E090E02E813F812DBF3EBF27961F +:10887000CDBFDEBFDF91CF911F910F91FF90EF90A1 +:10888000DF90CF90BF90AF909F908F907F906F9030 +:108890005F904F903F902F900895682F8091B2285D +:1088A0000E94942A8C01632D8091B2280E943B2A59 +:1088B000782E6FEF70E0C8010E94E234882371F1D6 +:1088C000823071F1632D8091B2280E94052AB82E62 +:1088D000F1E0F81718F2F70145805680678088EFBD +:1088E0008C0D90E0A0E084159505A60508F4B6CFA0 +:1088F00082809380A480632D8091B2280E941F2AD9 +:10890000A0E088169906AA0638F488199909AA09D8 +:1089100084159505A60530F48EEBA1CF8EEA9FCF86 +:10892000712CD0CFAA2DC401840D951DA61D8F3F9B +:108930009105A10519F010F081EC91CF9601285016 +:10894000310929833A83670138E0C30ED11C8114B1 +:108950009104A10489F18DB79EB78B839C83EDB7F9 +:10896000FEB7E819F909EDBFFEBF0DB71EB70F5FDF +:108970001F4F832D0E94B931BC01A401C801A3D7A8 +:1089800049815A81B601C40101968E0D9F1D0E9436 +:10899000F8706701FFEFCF1ADF0AA401B801C60122 +:1089A0000E94EF7029813A81280D391D29833A836D +:1089B0008B819C818DBF9EBF82019401472D6B2DC1 +:1089C000832D0E94543481114ACFF3E07F125BC0A3 +:1089D00040E150E061EF77E283ED73D789809A80C0 +:1089E0008C0C9D1C01E018E221EF37E2A601B401D6 +:1089F00089819A810E94AA1349815A81B401C601D2 +:108A00000E94F870A62DC20181329105A10518F0CF +:108A100080E290E0A0E089839A834601880E991E47 +:108A2000F40140808C010F5F1F4F0C0D1D1DF801DC +:108A300050803C01F2E06F0E711C6C0C7D1CF30148 +:108A4000F081FB831C0123E0220E311C2C0C3D1C09 +:108A5000F101F081FD83BC01685F7F4FC7010E9477 +:108A60001815F40180814812F9CEF801808158125E +:108A7000F5CEF3018081FB81F813F0CEF101808106 +:108A8000FD81F813EBCE69817A81C6010E94B6346C +:108A9000E6CE2CE1FC01208381E090E008952CE1FA +:108AA000FC01208381E090E008952CE1FC0120830B +:108AB00081E090E008952CE1FC01208381E090E0CA +:108AC0000895FC01808187FF04C080E880838AE4E8 +:108AD0000895982F907486FF03C090838AE10895CB +:108AE0008FEF0895AF92BF92CF92DF92EF92FF92F5 +:108AF0000F931F93CF93DF930F92CDB7DEB77C0117 +:108B00008B01CB01877F429789F08EE7F701808345 +:108B100081E090E00F90DF91CF911F910F91FF9036 +:108B2000EF90DF90CF90BF90AF900895F7018181D3 +:108B30008983862F877F8231E9F5CE010196C1DFD7 +:108B4000D82E69818091B2280E94C627811102C067 +:108B50008EE9DCCF8091E827811102C08DE9D6CF64 +:108B60000E94E02B882319F089818111F7CF698158 +:108B70008091B2280E94D227C82EB82EB2942FE03E +:108B8000B222FEE0BF16C1F08FE0B8121FC00E94F3 +:108B90009130882319F389818111E0CFC0FEDECFA7 +:108BA0000250EFEFDE121DC00831C9F09AE4D92E51 +:108BB0000031B9F080E4AACF0E949130882371F28D +:108BC000998180910B209813C9CFEACF0E949130F0 +:108BD000882321F280910B208B11C0CFE1CF8AE155 +:108BE000D82E69818091B2280E943428C82E10E0C6 +:108BF0005701F2E0AF0EB11CA801B50180ED61D6BE +:108C00009801A50169818091B2280E94252941E03F +:108C10004C0D69818091B2280E9459284D2D69819F +:108C20008091B2280E94B428A80170E060E0C501DC +:108C30000E940971F70110826BCFCF92DF92EF9201 +:108C4000FF920F931F93CF93DF930F92CDB7DEB7B1 +:108C50007C016B018091E827882331F081E090E06E +:108C60002091B228211101C080E00E9473308091D0 +:108C7000E927811117C08091E827811113C08091E5 +:108C8000B228882379F08DE9F701808381E090E0B4 +:108C90000F90DF91CF911F910F91FF90EF90DF9098 +:108CA000CF9008958EE7F2E0CF16D10469F7F7016F +:108CB00081818983CE01019604DF8091B2288111E0 +:108CC00003C099819111DFCF69810E94C62781116C +:108CD00002C08EE9D9CF69818091B2280E948B2889 +:108CE000182F8A3441F08A3831F08A3D21F08823E8 +:108CF00011F080E4C9CF0E94B1318091EF270E942A +:108D000094306981609375281A3431F01A3821F053 +:108D10001A3D11F011114BC010937328C82ED12C9D +:108D2000960141E058E28091B2280E94ED28A60108 +:108D300061E078E280EDC5D5809173288A34D9F559 +:108D40008AEE97E20E949B128AEE97E20E94AC1292 +:108D500060E186E798E20E945F6640E150E066E7E6 +:108D600078E281EDAED540E150E061EF77E283ED4E +:108D7000A8D5B7016F5F7F4F809173288A3489F53A +:108D800001E018E221EF37E2AB0166E778E280E12B +:108D900090E00E94CB12182F40E150E061EF77E2A3 +:108DA00083ED8FD5112321F1F70110836FCF9AE462 +:108DB00090937328B3CF4091E527612F85E697E222 +:108DC0000E94841761E078E285E697E20E94CF175F +:108DD00041EF57E261E078E285E697E20E94D3171F +:108DE000B7CF40E150E085E697E20E943518D3CF37 +:108DF000A60170E060E081E098E20E94097184E1E0 +:108E000080930A208FEAF701808381E190E040CFD0 +:108E1000CF92DF92EF92FF920F931F93CF93DF9346 +:108E20007C01EB018091E827882331F081E090E01C +:108E30002091B228211101C080E00E9473308091FE +:108E4000E927811116C08091E827811112C0809115 +:108E5000B228882371F08DE9F701808381E090E0EA +:108E6000DF91CF911F910F91FF90EF90DF90CF9006 +:108E700008958EE7229781F7F701D1818091B2287A +:108E8000811102C0D111E7CF6D2F0E94C627811139 +:108E900002C08EE9E1CFD09375286D2F8091B22862 +:108EA0000E948B28C82F882319F08A3109F05CC0F2 +:108EB0008AE10E9494309AE190937328C82ED12CB5 +:108EC000960141E058E26D2F8091B2280E94ED2872 +:108ED000C13091F488E0E1E0F8E2A9E0B8E2019065 +:108EE0000D928A95E1F788E0E1E0F8E2A1E1B8E2CD +:108EF00001900D928A95E1F7A60161E078E280ED9C +:108F0000E0D460E186E798E20E945F6640E150E0CD +:108F100066E778E281EDD5D4A7014F5F5F4F01E0AE +:108F200018E221EF37E266E778E280E190E0CA31AB +:108F300019F0C23008F03EC00E94E12040E150E04C +:108F400061EF77E283EDBDD4A60170E060E081E0DF +:108F500098E20E94097182E180930A208FEAF7016A +:108F6000808381E190E07CCF8A3421F08A3811F04F +:108F70008A3D61F462E070E0C701DF91CF911F91FB +:108F80000F91FF90EF90DF90CF9057CE813069F432 +:108F900062E070E0C701DF91CF911F910F91FF90C8 +:108FA000EF90DF90CF900C946E3D8AE00E94943059 +:108FB0009AE082CF0E948120C1CFAF92BF92CF9220 +:108FC000DF92EF92FF920F931F93CF93DF93CDB772 +:108FD000DEB7A097CDBFDEBF6C015B018091E627B5 +:108FE000811118C08091E9278823A1F060910B209E +:108FF0008091B2280E948B288A3461F4CE010196B8 +:109000007C0101EF17E29501A60161E078E28AE4B4 +:109010000E947F1BA096CDBFDEBFDF91CF911F9135 +:109020000F91FF90EF90DF90CF90BF90AF90089599 +:10903000CF92DF92EF92FF920F931F93CF93DF9324 +:1090400000D0CDB7DEB78C018EE768307105D9F559 +:1090500068E070E0C801B1DFF801D180C280E38030 +:10906000F4808D2D0E94B934F801882379F0808333 +:1090700081E090E02396CDBFDEBFDF91CF911F91BD +:109080000F91FF90EF90DF90CF9008958681282F69 +:1090900030E0322F22278581820F932F911D092ED8 +:1090A000000CAA0B89839A83AB8342E050E0BE0197 +:1090B0006F5F7F4F8CEE05D429813A81A7016C2D1B +:1090C0008D2D0E94BB32F801D2CFEF92FF920F9309 +:1090D0001F93CF93DF9300D0CDB7DEB78C018EE71F +:1090E0006630710549F466E070E0C80166DF809182 +:1090F000E827811103C08DE9F8010FC0F8018181D3 +:10910000898382818A8383818B8385818F70F82E06 +:109110008FEF8F0D833070F08EE9808381E090E0D7 +:109120002396CDBFDEBFDF91CF911F910F91FF90AE +:10913000EF900895E4800E94F727882351F08091F2 +:10914000E927882321F080910B20882311F08EEAF3 +:10915000D3CF4E2D6F2DCE0101960E94E62BCCCFA2 +:109160006F927F928F929F92AF92BF92CF92DF9237 +:10917000EF92FF920F931F93CF93DF93CDB7DEB79C +:10918000C054D109CDBFDEBF8C018EE768307105B8 +:1091900079F468E070E0C80110DFF8016181809126 +:1091A000B2280E945C29F82EF3E0F817D0F480EF83 +:1091B000F8018083EE24E394F12CC701C05CDF4FFB +:1091C000CDBFDEBFDF91CF911F910F91FF90EF9048 +:1091D000DF90CF90BF90AF909F908F907F906F90D7 +:1091E0000895682F8091B2280E94942A6C016F2DF7 +:1091F0008091B2280E943B2AE82E0E94FC27811110 +:109200000AC06FE07FE0C6010E94E234882361F06B +:10921000823009F4E12C6F2D8091B2280E94052A3A +:10922000823020F08EE9C4CF8EEAC2CFF80162808E +:1092300073808480A580B680C7806F2D8091B2280E +:109240000E941F2A9C0140E062167306840638F4CF +:109250002619370948092A153B054C0510F48EEBF1 +:10926000A7CF9501A3016E2D8F2D0E941A34982E41 +:10927000882319F0F80180839DCFF3E0C801EF1235 +:1092800046C00E948F346C017801E80EF91EF80187 +:1092900081915F01F7018083B601C5010E94181515 +:1092A000B6016F5F7F4F600F711F44E050E0C70150 +:1092B0000E94F870C60104967C0193E09C0D9F709B +:1092C00079F020E130E0291B3109F801EE0DFF1D96 +:1092D00010829FEFE91AF90A939492161306ACF3E1 +:1092E00001E018E221EF37E2AE014F5F5F4FB501B9 +:1092F0006701E1E0CE1AD108C6010E94CB12A60197 +:10930000BE016F5F7F4FC5010E94EF7056CF0E9474 +:109310008F347C0152CFCF93DF93DC018EE961154E +:109320007105C9F0CC918FE290E030E020E0F901C6 +:10933000E80FF91FAF0156954795EE7FE40FF51F33 +:10934000EC55FD4DD081CD1310C00180F281E02D90 +:10935000309739F48CE18C9381E090E0DF91CF91EC +:109360000895CD01DF91CF911994DC1748F49A014B +:109370002F5F3F4F82179307D0F690E080E0EECF4B +:10938000CA010197F7CF0F931F93CF93DF93EC019F +:109390008FEA88830CED18E2F80180858983868541 +:1093A0008A8387858B83CE010496C4D3F801828992 +:1093B0008F838DE080930A2088E090E0DF91CF9149 +:1093C0001F910F910895FC011192CF01C2D38BE040 +:1093D00080930A208FE090E00895AF92BF92DF92D1 +:1093E000EF92FF920F931F93CF93DF93CDB7DEB72A +:1093F000A097CDBFDEBF7C018BE080930A208EE773 +:109400006131710509F04EC0D090752881E00E944D +:10941000943028E030E041E058E26D2D8091B22890 +:109420000E94ED285701FFEFAF1ABF0A01E018E2D2 +:1094300021EF37E2A501BE016F5F7F4F80E190E031 +:109440000E94512048E050E061EF77E283ED39D28D +:1094500048E050E0BE016F5E7F4FCE01099632D5E5 +:1094600088E0FE013196DE01599601900D928A95B1 +:10947000E1F748E050E0BE016F5E7F4F86E798E27B +:109480000E94E27048E050E0892BE9F066E778E25C +:1094900081EE17D248E050E0BE016F5E7F4F81EE53 +:1094A00010D28EEAF701808381E090E0A096CDBFD4 +:1094B000DEBFDF91CF911F910F91FF90EF90DF9072 +:1094C000BF90AF900895BE016F5F7F4FCE01499668 +:1094D000E8D448E050E061EF77E283EDF2D101E0BB +:1094E00018E221EF37E2A501BE016F5F7F4F88E0F0 +:1094F00090E00E94212048E050E061EF77E283EDA8 +:10950000E0D121E030E0AE014F5E5F4FBE01675E0B +:109510007F4FC8010E94A93081E08093E927D09253 +:109520000B208091B228D82A81E009F080E0809356 +:10953000E827F701108289E090E0B8CFAF92BF92A0 +:10954000CF92DF92EF92FF920F931F93CF93DF930F +:10955000CDB7DEB7C054D109CDBFDEBF6C01F090EE +:1095600073288BE080930A208EE76132710509F041 +:109570006CC08F2D0E949430E0907528282F30E029 +:1095800041E058E26E2D8091B2280E94ED28809132 +:109590007328813091F488E0E1E0F8E2A9E0B8E2D4 +:1095A00001900D928A95E1F788E0E1E0F8E2A1E10F +:1095B000B8E201900D928A95E1F75601FFEFAF1ADC +:1095C000BF0A8AE1F81621F0E1E0EF1508F450C077 +:1095D00001E018E221EF37E2A501BE016F5F7F4F86 +:1095E00080E290E00E94112140E150E061EF77E2DB +:1095F00083ED67D140E150E0BE016F5D7F4FCE014A +:10960000419660D480E1FE013196DE01D196019051 +:109610000D928A95E1F740E150E0BE016F5D7F4F0A +:1096200086E798E20E94E27040E150E0BE01892B9B +:1096300061F16F5C7F4F81EE44D140E150E0BE01AB +:109640006F5D7F4F81EE3DD18EEAF601808381E030 +:1096500090E0C05CDF4FCDBFDEBFDF91CF911F91A7 +:109660000F91FF90EF90DF90CF90BF90AF90089553 +:1096700001E018E221EF37E2A501BE016F5F7F4FE5 +:1096800080E290E00E94B120AFCF6F5F7F4FCE01AC +:10969000C19607D440E150E061EF77E283ED11D14C +:1096A000FAE101E018E221EF37E2A501BE016F5FA8 +:1096B0007F4FFF1619F081E08F1540F180E190E0B7 +:1096C0000E94E12040E150E061EF77E283EDF9D0C4 +:1096D0002F2D30E0AE014F5D5F4FBE016F5C7F4FBD +:1096E00081E098E20E94A93081E08093E927E0922E +:1096F0000B208091B228E82A81E009F080E0809375 +:10970000E827F601108281E190E0A3CF80E190E0AC +:109710000E948120D7CFCF92DF92EF92FF920F93DA +:109720001F93CF93DF93CDB7DEB7C054D109CDBF20 +:10973000DEBF7C018BE080930A206132710591F0DD +:109740008EE7D7018C9381E090E0C05CDF4FCDBF06 +:10975000DEBFDF91CF911F910F91FF90EF90DF90CF +:10976000CF9008958091EF270E949430D090752873 +:10977000C0907328282F30E041E058E26D2D809191 +:10978000B2280E94ED28BAE4CB1242C001E018E2F0 +:1097900021EF37E2A7014F5F5F4FBE016F5F7F4F41 +:1097A00080E290E00E94AA1340E150E061EF77E28E +:1097B00083ED87D040E150E0BE016F5D7F4FCE0169 +:1097C000419680D380E1FE013196DE01D196019071 +:1097D0000D928A95E1F740E150E0BE016F5D7F4F49 +:1097E00086E798E20E94E27040E150E0BE01892BDA +:1097F000C9F06F5C7F4F81EE64D040E150E0BE0164 +:109800006F5D7F4F81EE5DD08EEAF70180839BCF45 +:1098100040E250E0BE016F5F7F4F85E697E20E9415 +:109820009918C2CF6F5F7F4FCE01C1963AD340E106 +:1098300050E061EF77E283ED44D0FAE4CF1237C015 +:1098400001E018E221EF37E2A7014F5F5F4FBE0151 +:109850006F5F7F4F80E190E00E94CB1240E150E0CB +:1098600061EF77E283ED2DD02C2D30E0AE014F5D1E +:109870005F4FBE016F5C7F4F81E098E20E94A9308C +:1098800081E08093E927D0920B209091B228D92AC9 +:1098900011F48093E827E1EFF7E280E1DF011D9208 +:1098A0008A95E9F7F701108281E190E04ECF40E11F +:1098B00050E0BE016F5F7F4F85E697E20E9435184A +:1098C000CDCF08950895611520E2720710F40C942D +:1098D00000620895611520E2720710F40C9465622D +:1098E00008959091E3289651953070F481E001C07D +:1098F000880F9A95EAF7857141F08091132990912C +:109900000D29890F8195089580E00895865185304D +:1099100048F4E82FF0E0EE0FFF1FEC5CFC4D808177 +:109920009181089590E080E008950F931F93CF9365 +:10993000DF9300910D2910910E29E801C80FD91F5E +:10994000C017D107C8F08091E328E0DFC817D90716 +:1099500098F4C11580E2D80778F4C0930D29D0930C +:109960000E29C0931329D093142970D0C801DF9118 +:10997000CF911F910F91089510E000E0F7CFA091D3 +:10998000B32BB091B42B84E3ECEDF8E21C9601907C +:109990000D928A95E1F70C947D6681110E9476669E +:1099A000E091B32BF091B42B84E33C96ACEDB8E29C +:1099B00001900D928A95E1F708950F931F93CF932D +:1099C000DF93C62FD0E006E818E2F80164817581C4 +:1099D000AE010E943861F80164817581C60FD71FFE +:1099E000C483D583DF91CF911F910F9108950F9379 +:1099F0001F93CF93DF93C62FD0E006E818E2F8015B +:109A000064817581AE010E948C61F8016481758169 +:109A1000C60FD71FC483D583DF91CF911F910F91BC +:109A200008951092192910921A2984E390E08093E6 +:109A300017299093182989E490E080931329909333 +:109A40001429809315299093162908956091192956 +:109A500070911A2944E350E08CED98E23BCF1F93BC +:109A6000CF93DF93C0918628D0918728209721F14A +:109A7000C134D10510F0C0E4D0E01C2FE09188285B +:109A8000F09189286C2F199520918628309187288C +:109A90002C1B3D0B209386283093872881E090E093 +:109AA000232B11F090E080E0212F382F892FB9016E +:109AB000DF91CF911F91089581E090E010E0F4CF05 +:109AC000E0918828F0918928199580E008958330E5 +:109AD00091F030F4882319F0813041F08EE9089537 +:109AE0008430E1F780E18093F027F8CF80E1809324 +:109AF000F02780E0089588E1FACF813051F028F016 +:109B00008350823030F08EE908951092F02780E083 +:109B1000089580E18093F027FACFFC01ACEDB8E224 +:109B20001B968C911B9780831C968C9181838AE174 +:109B300082830895FC01ACEDB8E250968C91509769 +:109B4000808351968C915197818317968C91828353 +:109B50000895CF93DF93EC018CED98E227E0FC01B0 +:109B6000DE0101900D922A95E1F725E0EFEEF8E293 +:109B7000DE01179601900D922A95E1F7FC01208DE8 +:109B80002C87818D8D87DF91CF91089560E080E0F3 +:109B90000C94D227CF93DF93CDB7DEB7A397CDBF79 +:109BA000DEBF80917A2090917B20A0917C2089A3B8 +:109BB0009AA3ABA34FE063E0CE0181960E94E62B0F +:109BC0000E94DE2BAE014F5F5F4F80E2FA011192DF +:109BD0008A95E9F720E230E060E080E00E942529E4 +:109BE0000E94F22633DFA396CDBFDEBFDF91CF9177 +:109BF0000895DF92EF92FF920F931F93CF93DF931D +:109C0000CDB7DEB72C97CDBFDEBF87ECE82E88E25C +:109C1000F82E85E1D701E82F1D92EA95E9F7E2EBEE +:109C2000F8E2DF011D928A95E9F767E0CE0101961F +:109C30000E945F6687E0FE013196ACEDB8E20190CC +:109C40000D928A95E1F70CED18E288E0F801808327 +:109C500083E0828F94E0D92ED38E1092102965E094 +:109C6000CE0108960E945F6685E0FE013896AFEE51 +:109C7000B8E201900D928A95E1F781E0D8015896FB +:109C80008C93589795E059969C9359971896DC9227 +:109C9000189719968C9319971A968C931A971D9664 +:109CA0009C931D971E968C931E971F968C931F97BF +:109CB00052969C93529786E05C968C935C9795E7BE +:109CC0005D969C935D975E961C925E9791E85F9679 +:109CD0009C935F9792E090969C93909790E89196D2 +:109CE0009C939197D0968C93F70110820E94F22654 +:109CF00051DF2C96CDBFDEBFDF91CF911F910F9129 +:109D0000FF90EF90DF900895ECEDF8E284E3DF013F +:109D10001D928A95E9F7809111298783138681E046 +:109D20008487108A818B809113299091142981ABAB +:109D300092AB8CDE5ECFCF93DF93C82FD62F71DE30 +:109D40008C2F90E080931129909312290E94EA624F +:109D50006091192970911A2944E350E08CED98E242 +:109D6000B2DDDD2349F050E040E070E060E08AEED3 +:109D7000A8DDDF91CF91C8CF80E00FDE6091172979 +:109D80007091182945E150E087EC98E29CDD81E074 +:109D9000809310298FEF8093B228DF91CF910C949C +:109DA000DE2BCF93DF93CCEDD8E294E3FE0111924A +:109DB0009A95E9F78F8381E08B878C87888B898BD5 +:109DC00030DE809113299091142989AB9AAB3EDE45 +:109DD000DF91CF910ECFCF93DF93C82FD62F21DE07 +:109DE0008C2F90E080931129909312290E94EA62AF +:109DF0006091192970911A2944E350E08CED98E2A2 +:109E000062DDDD2351F050E040E070E060E08AEE7A +:109E100058DD8C2FDF91CF91C4CF80E0BEDD609103 +:109E200017297091182945E150E087EC98E24BDD45 +:109E300081E0809310298FEF8093B228DF91CF913A +:109E40000C94DE2BDC0187E0ECEDF8E201900D9242 +:109E50008A95E1F70895CF93DF93EC0187E0FE0147 +:109E6000ACEDB8E201900D928A95E1F7809110294E +:109E700081110CC08881883069F083E08093F628D6 +:109E800084E48093F72881E080931029DFDDDF915F +:109E9000CF9175CD83E08093F62884E08093F728F6 +:109EA000F5CFDC012D91FB01E40FF51F31972083E5 +:109EB000FB01840F951FA817B90709F408952D9188 +:109EC0002193F9CF0F931F93CF93DF93DB018A0187 +:109ED000EC0121E030E02017310758F0F801E80FDD +:109EE000F91F319780818C93DF91CF911F910F9152 +:109EF00008956991AD01420F531FFA0160832F5FEE +:109F00003F4FE9CFFC01892B21F0408351836283CD +:109F100073830895FC01892B19F040835183628378 +:109F20000895CF93DF9300D00F92CDB7DEB7FC0139 +:109F3000892B91F080819181A281B38189839A8359 +:109F4000AB83BC8369817A818B819C812496CDBF50 +:109F5000DEBFDF91CF91089519821A821B821C8285 +:109F6000F1CFAF92BF92DF92EF92FF920F931F93C8 +:109F7000CF93DF937B01EA01D22E833009F46BC0CB +:109F800080F4882309F497C0813059F1CE01DF9124 +:109F9000CF911F910F91FF90EF90DF90BF90AF9006 +:109FA0000895843009F479C08550823078F785E6C9 +:109FB00097E20E949918AE01B7016C0F7D1FC7018F +:109FC0000E94F870C131D105A8F040E150E0BE0117 +:109FD000C7010E948F1B882369F0DD20B9F26097CA +:109FE000D5CF80917328813011F08A3089F4C53043 +:109FF000D10518F4D0E0C0E0C9CF44E050E0BE0184 +:10A00000C7010E94521C8823A9F384E090E01DC080 +:10A010008A3171F44930510568F348E050E0BE01DF +:10A02000C7010E948F1B882329F388E090E00DC0B0 +:10A0300041315105F8F240E150E0BE01C7010E94F4 +:10A040008F1B8823B9F280E190E0DD2009F49ECFD8 +:10A05000C81BD90B9BCF01E018E221EF37E25B016F +:10A06000A40EB51EA501CE010E941121AE01B501BD +:10A07000C7010E94F870C930D10508F4BBCF48E091 +:10A0800050E0BE01C7010E948F1B882309F4B2CFA4 +:10A09000DD2009F47BCF289779CF01E018E221EF8A +:10A0A00037E25B01A40EB51EA501CE010E94AA13E2 +:10A0B000AE01B50184CF4330510508F49BCF5A015E +:10A0C00082E0A81AB108B501C70124D1882309F498 +:10A0D00091CFDD2009F45ACFE50158CFCF92DF921E +:10A0E000EF92FF920F931F93CF93DF937B016A014F +:10A0F0008330B9F1843009F466C0813009F090C032 +:10A1000080917328813011F08A3071F4A601B70173 +:10A1100081E098E2DF91CF911F910F91FF90EF9036 +:10A12000DF90CF900C94EB1B01EF17E29A01AB018B +:10A1300061E078E20E948619C82FD0E0AE014C1988 +:10A140005D09B7016C0D7D1DC8010E94EF70CE0145 +:10A15000DF91CF911F910F91FF90EF90DF90CF9003 +:10A160000895EA01C770DD27209731F088E090E07C +:10A170009C012C1B3D0BE90101EF17E29601A701A1 +:10A1800061E078E28AE10E948619C82ED12CAE01E6 +:10A1900070E060E0C7018C0D9D1D0E940971CC0D1F +:10A1A000DD1D6701CC0EDD1E01E018E221EF37E274 +:10A1B000A601B701CE010E94E120AE01B601C701A0 +:10A1C0000E94F870C4CFEA01CF70DD27209731F0EC +:10A1D00080E190E09C012C1B3D0BE90101EF17E2AF +:10A1E0009601A70161E078E28AE40E948619C82EF0 +:10A1F000D12CAE0170E060E0C7018C0D9D1D0E9466 +:10A200000971CC0DDD1D6701CC0EDD1E01E018E2E9 +:10A2100021EF37E2A601B701CE010E94CB12CDCFCC +:10A22000BA01C70103D0E601229691CFDC0180E498 +:10A230008093D00086EC8093D5008093D40081E099 +:10A240008093D0006A0F7B1FA617B707B1F4E09187 +:10A25000D500F0E0E25DFB4FE491EC93E091D40097 +:10A26000F0E0E25DFB4FE4911196EC9311971092B0 +:10A27000D0009C9111968C910895ED91F0E0E25DF3 +:10A28000FB4FE491E093D300DFCFEF92FF920F9367 +:10A29000CF93DF93EC017B01BA01E114F10431F0BB +:10A2A000F701808191810796409728F4F701108289 +:10A2B000118280E029C08981803299F08037B1F71E +:10A2C000422F50E0CE0102960E94E270892B71F776 +:10A2D0000062088361E070E0CE01A8DF88E190E0D1 +:10A2E0000FC0422F50E0CE010E94EF70888199810B +:10A2F00089279A8189279B8189278C8388E290E02E +:10A30000F7018083918381E0DF91CF910F91FF90DE +:10A31000EF900895CF93DF9320E42093D00026ECB4 +:10A320002093D5002093D40021E02093D000EC01AD +:10A33000DE016150710999916F3F7607D1F4E09188 +:10A34000D500F0E0E25DFB4FE491E9130BC0E09132 +:10A35000D400F0E0E25DFB4FE49181E090E01196E3 +:10A360002C912E1380E01092D0008170DF91CF915C +:10A370000895E92FF0E0E25DFB4FE491E093D30014 +:10A38000D7CF1F93CF93DF93CDB7DEB7A097CDBFC5 +:10A39000DEBF873009F4F5C008F03DC0843009F411 +:10A3A000C9C088F4823009F47BC0833009F49CC0B2 +:10A3B00010E0813009F457C0A096CDBFDEBFDF9119 +:10A3C000CF911F910895853009F0D8C0E091562BA8 +:10A3D000F091572BCE010196199580915C2B41E0AD +:10A3E000815008F44AC04423D9F3282F30E0E1E03B +:10A3F000F0E0EC0FFD1FE20FF31F908141E091119F +:10A4000040E061E070E06C0F7D1F260F371F915018 +:10A41000F9019083E5CF8A3009F4B9C088F4883017 +:10A4200009F4B2C0893041F680910008813009F00A +:10A43000B6C080918C08833009F0B1C043D2BCCF44 +:10A440008B3009F4A7C08C3009F0B6CF81E992E2D5 +:10A45000A3C00E945C66E1E0F0E0EC0FFD1FE10F9D +:10A46000F11D80831F5F80915C2B181790F3809102 +:10A470005E2B853011F480EE8983E091582BF091AA +:10A48000592BCE0101961995E091692BF0916A2B19 +:10A4900040915C2BBE016F5F7F4F83E119958CCF9C +:10A4A00011E080915C2B873009F010E0E091562B91 +:10A4B000F091572BCE010196199520915C2BE1E08C +:10A4C000F0E0EC0FFD1FE10FF11D91E01217A8F66F +:10A4D000992339F0808191E08F3F09F090E08F5F00 +:10A4E00080831F5F3196F2CFE091562BF091572B6E +:10A4F000CE010196199580915C2B41E0815008F4C2 +:10A50000BCCF4423D9F3282F30E0E1E0F0E0EC0F9A +:10A51000FD1FE20FF31F908141E09F3F09F040E0F3 +:10A5200061E070E06C0F7D1F260F371F9F5FF90100 +:10A530009083E4CF11E080915C2B873009F010E02C +:10A54000E091562BF091572BCE0101961995209151 +:10A550005C2BE1E0F0E0EC0FFD1FE10FF11D91E05D +:10A56000121708F08ACF992331F0808191E0811190 +:10A5700090E0815080831F5F3196F2CF0E94D866B1 +:10A580001BCF0E94996318CF0E94EA6215CF0E94E8 +:10A59000935F12CF8BE892E20E9417680DCF6DD1C6 +:10A5A0000BCFE0E0F6E080E6828388E1868B858B46 +:10A5B0000895CF9380910806C82FC09586FD1DC0D1 +:10A5C00080911C298A3070F48F5F80931C29C5FF0D +:10A5D00030C080911B298A3008F58F5F80931B293A +:10A5E000CF9108958A3099F7E091B32BF091B42B75 +:10A5F0008181C7DE80911C29E7CF8C2F807639F7C7 +:10A6000080911C2981508A3030F4E091B32BF09175 +:10A61000B42B8081B6DE10921C29D9CF8A3001F785 +:10A62000E091B32BF091B42B8381ABDE80911B2999 +:10A63000D4CFC076A9F680911B2981508A3030F49E +:10A64000E091B32BF091B42B82819BDE10921B29F9 +:10A65000C7CFAC019B016DE089EE92E00C94EA60FB +:10A66000E82FF0E0EE54F44D6383DF01AD5BBF4FA4 +:10A670006C93ED57FF4F608308950F931F939B01D9 +:10A680008A01E091B32BF091B42BE80FF11D4081CA +:10A690006DE089EE92E00E94AA601F910F910895EB +:10A6A0000F931F93CF93DF930F92CDB7DEB7082F91 +:10A6B000AB019E012F5F3F4F6DE089EE92E00E945B +:10A6C000C360182F882319F06981802FC9DF812F7B +:10A6D0000F90DF91CF911F910F9108950E943A67DB +:10A6E0000E9476660E947A5B0E94EF650E94086174 +:10A6F0001092520684E08093420682E6809386019F +:10A70000C1E0C0932606C093210686E0809322060E +:10A71000C093310612E01093320610922A0610926E +:10A720002B068FE08093290689E5809380018AE5D6 +:10A730008093810180E48093410680934606909146 +:10A74000B200907F9093B2009091B200926090938B +:10A75000B20090E390934106909346068093500692 +:10A76000C09346061093450603E00093410683E13B +:10A770008093010821E030E02093260830932708D9 +:10A78000209328083093290810928C088093800821 +:10A790001092230310922103D8E0D093220381E189 +:10A7A00080932003E091B32BF091B42B82859385A5 +:10A7B00080933803909339038CE380938203D09382 +:10A7C000800380938303D09381032BD70E94966DDF +:10A7D0000E943C66E6DE91B580B580930C029093B2 +:10A7E0000D02C09300021092010210930202009326 +:10A7F0000402C0932002D09321020E94965E0E9420 +:10A80000C667D2E0C1E18091030481FF27C0809137 +:10A81000010480FDFCCFD093030470D70E94F06543 +:10A820000E946E660E94C86DC4DEE091522BF091CA +:10A83000532B19950E9437600E94DC680E94161104 +:10A84000E091B32BF091B42B8781813011F4C09348 +:10A85000622B8681813011F4C093612BE091502BE3 +:10A86000F091512B1995E091482BF091492B1995B6 +:10A870000E94945D0E949A6DC6CF8091000881303D +:10A88000E1F480918C088330C1F4089581E08093D5 +:10A89000000893E090938C0880932B2B10922C2B24 +:10A8A0008EB19FB12091080430910904822B932B23 +:10A8B00080932E2B90932F2B089580912D2B8823FE +:10A8C00029F3089510928C0810920008EBE2FBE245 +:10A8D000108211820895A0E2B6E081E015968C9373 +:10A8E00015972BE23AE228B939B92BEA3AE22AB9AC +:10A8F0003BB910B813B812B816B817B811B8E0E0E1 +:10A90000F9E010A211A22FEF30E026A337A32FEF1A +:10A910003FEF20A731A7808398E8938390E1948745 +:10A9200093E097831C968C931C9782E01A968C93E5 +:10A9300008958F931F9280E0182E88B78F9318BECA +:10A940008BB78F931BBE9F93EF93FF93E0E0F9E0EB +:10A9500013828FE790E086AB97AB81E190E080AF08 +:10A9600091AFE0E0FAE010A211A28FEF9FEF86A373 +:10A9700097A389E88383168281E084878EE08083B1 +:10A9800010922A06FF91EF919F918F918BBF8F912B +:10A9900088BF1F908F9118951F920F920FB60F923C +:10A9A000112408B60F9218BE0BB60F921BBE2F9340 +:10A9B0003F938F939F93EF93FF9381B1823098F0F1 +:10A9C00081B18D3080F4E1B1F0E0EE0FFF1FE25C69 +:10A9D000FC4D0190F081E02D19948FE790E0809379 +:10A9E000260A9093270AFF91EF919F918F913F91B3 +:10A9F0002F910F900BBE0F9008BE0F900FBE0F90BF +:10AA00001F9018958E9A8EE0809340088FE390E017 +:10AA10008093260A9093270A85E081B9E4CF8E9827 +:10AA200086E081B98FEF82B914B815B8E8B1F9B1F1 +:10AA3000808180B9D8CF009B06C08E9A82B1809564 +:10AA400082B987E0EACF8E98FCCF009B11C08E9828 +:10AA500080B1869580B984B195B1019684B995B9D4 +:10AA600084B195B187709927892B21F488E0D5CFDF +:10AA70008E9AEECF24B135B186B197B12817390738 +:10AA800051F58AE0CACFEAB1FBB1309731F080814D +:10AA9000882329F08E9A89E0C0CF82B1F9CF8E98B1 +:10AAA000FACFEAB1FBB13097D1F080818823A9F0C9 +:10AAB0008E983196EAB9FBB924B135B186B197B118 +:10AAC00028173907F1F2E8B1F9B1CF01019688B939 +:10AAD00099B9818180B986E0A0CF8E9AEACF82B100 +:10AAE000882321F08E988FEF82B9E6CF8E9AFBCF24 +:10AAF0008E988BE092CF8E988CE08FCF1092000AC8 +:10AB00001092060A109240081092410881E080934A +:10AB1000312B69CF1F921FB61F9211242F9328B794 +:10AB20002F9318BE2BB72F931BBE3F938F939F93EA +:10AB3000EF93FF939091280683B1967021E009F07E +:10AB400020E0880F822B83B982B1882309F476C074 +:10AB500012B883B187708730D9F51092000980E16F +:10AB600080930C091092030A1B9B2DC08CEA94E081 +:10AB70008093260A9093270A82E081B981E080932E +:10AB80000C0A83E08093060A86B197B1877039F08A +:10AB900090B18F5F8930D1F4E8B1F9B1908381E051 +:10ABA0008093302B88E880930309FF91EF919F9168 +:10ABB0008F913F912F912BBF2F9128BF2F911F90E5 +:10ABC0001FBE1F9018958CE694E0D2CF9695E1CFEA +:10ABD00093B1892F8C7031F3947081B181111EC0B3 +:10ABE00080B186959923C1F090E0892B80B926B178 +:10ABF00037B12F5F3F4F26B937B927703327232B43 +:10AC000089F6E8B1F9B19F012F5F3F4F28B939B9F3 +:10AC1000808381E081B9C6CF90E8E7CF81B18130F0 +:10AC200009F0C0CFEAB1FBB19F012F5F3F4F2AB9B6 +:10AC30003BB9911180E0808311B8B4CF82B1809587 +:10AC400082B9B0CFCF93DF93E0E3FBE210821182B1 +:10AC500088E597E58093292990932A2989E994E545 +:10AC600080932729909328298CEC94E580932329BD +:10AC700090932429E0E4F6E0128A84E08283C0E81D +:10AC8000D1E082E68E83A0E2B6E081E016968C9356 +:10AC9000169711968C93119796E012969C931297A3 +:10ACA00051968C93519732E052963C9352971A9654 +:10ACB0001C921A971B961C921B979FE019969C93C7 +:10ACC00099E598839AE5998390E491839683A0EB24 +:10ACD000B0E012962C911297207F12962C93129727 +:10ACE00012962C911297226012962C9320E32183C6 +:10ACF0002683908B8683358383E08183E0E0F8E0D0 +:10AD000083E1818321E030E026A337A320A731A788 +:10AD1000E0E8F8E014868083E0E2F3E01382118239 +:10AD200088E0828391E19083A091B32BB091B42B02 +:10AD30001A962D913C91208F318FE0E8F3E09CE34F +:10AD40009283808393838183DF91CF91C4CDA0E2EE +:10AD5000B6E01A961C921A97E0E3FBE21082118289 +:10AD6000E0E0F9E010821382178280E18487E0E05E +:10AD7000FAE010821382168281E08487E0E4F8E032 +:10AD80001082118216968C938E980895CF93DF933C +:10AD90008091302B882309F476C01092302BC6B1F5 +:10ADA000D7B1C730D10508F47AC0AE01495F5F4F13 +:10ADB00093E0569547959A95E1F7E091692BF091CC +:10ADC0006A2B6BE27AE280E41995E091B32BF09163 +:10ADD000B42B8781883019F483E18093622B8681BC +:10ADE000883019F483E18093612BE091542BF0912A +:10ADF000552BBE018BE29AE21995EC0194FF4CC0F1 +:10AE0000DF7E8BEA9AE28AB99BB9209709F447C0A2 +:10AE1000AE01495F5F4F83E0569547958A95E1F70C +:10AE2000E091692BF0916A2B6BE27AE281E419954B +:10AE3000E091B32BF091B42B8781893019F483E131 +:10AE40008093622B8681893019F483E18093612B92 +:10AE5000C6B9D7B98BE29AE288B999B9109260085D +:10AE6000109261088FE090E08093660890936708E5 +:10AE700088E090E080936A0890936B0883E2809367 +:10AE8000410883E081B98091312B882371F01092C1 +:10AE9000312BDF91CF911FCD1AB81BB8B6CF1092CE +:10AEA000000A1092060A17DDEECFDF91CF910895C8 +:10AEB0001F921FB61F9211242F9328B72F9318BEED +:10AEC0002BB72F931BBE3F938F939F93EF93FF93CB +:10AED000E0E0F9E080E484871782E0E8F3E082E0D4 +:10AEE000878389EB81838BE29AE28AB99BB981E0FF +:10AEF00090E084B995B916B88EB19FB1209108043D +:10AF000030910904822B932B8093332B9093342B15 +:10AF100081E08093372B18B817B81092322B88E055 +:10AF200080938706FF91EF919F918F913F912F9191 +:10AF30002BBF2F9128BF2F911F901FBE1F901895D8 +:10AF4000E0E0F9E08FEF94E086A397A380E68487A2 +:10AF500080E387838FEF90E086AB97AB88E08093A8 +:10AF6000870608951F921FB61F9211248F9388B7EA +:10AF70008F9318BE8BB78F931BBEEF93FF93E0E8C0 +:10AF8000F3E081818F7C8183E0E0FAE088E88383CD +:10AF900081E08083FF91EF918F918BBF8F9188BF6C +:10AFA0008F911F901FBE1F9018958F931F9280E066 +:10AFB000182E88B78F9318BE8BB78F931BBE9F93A5 +:10AFC000EF93FF9384E080938506E0E0F9E013823D +:10AFD0008FE790E086AB97AB81E190E086AF97AFCB +:10AFE00010922B06FF91EF919F918F918BBF8F91C4 +:10AFF00088BF1F908F9118951F921FB61F92112422 +:10B000002F9328B72F9318BE2BB72F931BBE3F93B8 +:10B010004F935F938F939F93EF93FF9390912806A5 +:10B0200084B1967021E009F020E0880F822B84B96A +:10B0300083B1882309F4F8C013B884B187708730CE +:10B0400009F0C5C084E0809386061092000980E86C +:10B0500080930C09109207091092290686B197B1C6 +:10B06000877041F090B18F5F893009F07BC0E8B103 +:10B07000F9B1908386B197B180933C2B90933D2B8F +:10B0800080913C2B90913D2B079708F46DC081E097 +:10B090008093402B2BE239E22CB93DB921E030E01E +:10B0A0002093382B3093392B16B817B815B899E878 +:10B0B000909380031092000A1092200A1092210AA5 +:10B0C0004FEF5FEF4093260A5093270A2FE530E0B9 +:10B0D00020932A0A30932B0A1092060A20E220932A +:10B0E0000C0A9CE09093070A109260091092610983 +:10B0F000409366095093670940EA50E040936A091B +:10B1000050936B091092460920934C09909347097C +:10B1100090E19093820110928A01109281038093B2 +:10B12000870389EB809380038EB19FB1209108043F +:10B1300030910904822B932B80933E2B90933F2BCD +:10B1400082E081B9FF91EF919F918F915F914F9133 +:10B150003F912F912BBF2F9128BF2F911F901FBE82 +:10B160001F90189596957FCF8CE0809329068BE2EF +:10B170009AE288B999B98BEA9AE28AB99BB910B870 +:10B1800014B813B816B817B811B810922009109255 +:10B1900021098FEF90E080932609909327098FEF84 +:10B1A0009FEF80932E0990932F0981E080930009EF +:10B1B00088E88093030980E880930C0980EC8093F1 +:10B1C000070982E080932C0680932B06BBCF94B1B5 +:10B1D000892F8C70F1F081B1811121C080B18695E9 +:10B1E00092FF1BC090E0892B80B926B137B12F5F49 +:10B1F0003F4F26B937B927703327232B51F4E8B1D5 +:10B20000F9B19F012F5F3F4F28B939B9808381E0A1 +:10B2100081B988E88093030995CF90E8E4CF81B1A4 +:10B220008130B9F711B8F5CF83B1809583B9F1CFEB +:10B230001F921FB61F9211242F9328B72F9318BE69 +:10B240002BB72F931BBE3F934F935F938F939F9387 +:10B25000EF93FF931092070A1092000A1092030ACC +:10B260001092470910924009809180038E7F80934D +:10B2700080038091382B9091392B80FF15C085B1C8 +:10B280008695806885B986B197B1019686B997B9D8 +:10B2900087709927892B41F4ECB1FDB1CF0101965C +:10B2A0008CB99DB985B1808386B197B18770992794 +:10B2B000892BC9F085B146B157B1E6B1F7B193E03A +:10B2C000F695E7959A95E1F7E55DF64D90E04770C4 +:10B2D000552728E030E0241B350B02C09595879553 +:10B2E0002A95E2F7808386B197B180933A2B9093A9 +:10B2F0003B2B86B197B1049718F081E08093412BE6 +:10B300001092000A1092070A1092820110928A018C +:10B310008CE38093820388E0809380038CE08093A9 +:10B3200029068BE29AE288B999B98BEA9AE28AB93E +:10B330009BB910B814B813B816B817B811B8109252 +:10B340002009109221098FEF90E0809326099093B5 +:10B3500027098FEF9FEF80932E0990932F0981E0AB +:10B360008093000988E88093030980E880930C09A2 +:10B3700080EC8093070982E080932C0680932B0653 +:10B38000FF91EF919F918F915F914F913F912F91FD +:10B390002BBF2F9128BF2F911F901FBE1F90189574 +:10B3A000CF93DF93E0E0F2E083E0848311821382A5 +:10B3B000C0E0D9E01E82A0E4B9E017961C9217976E +:10B3C000E0E0FAE01682178218821C921082E0E810 +:10B3D000F3E08CE3828388E08083DF91CF9108954E +:10B3E0001F921FB61F9211242F9328B72F9318BEB8 +:10B3F0003F934F935F938F939F9384B195B1409107 +:10B40000600950916109880F991F21E030E04530B3 +:10B41000510510F430E020E0822B932B84B995B9CC +:10B4200010926009109261099F918F915F914F91E5 +:10B430003F912F9128BF2F911F901FBE1F901895ED +:10B440001F920F920FB60F92112408B60F9218BEDA +:10B4500009B60F9219BE0BB60F921BBE2F933F93E6 +:10B460004F935F936F937F938F939F93AF93BF930C +:10B47000EF93FF9381E08093432B92DFFF91EF9155 +:10B48000BF91AF919F918F917F916F915F914F91FC +:10B490003F912F910F900BBE0F9009BE0F9008BEE9 +:10B4A0000F900FBE0F901F901895CF93DF93FC0164 +:10B4B00061507109DA01EA01C20FD31F50E040E088 +:10B4C000AC17BD0729F0CB01841B950B029728F41C +:10B4D0001082CA01DF91CF9108959D91392F329545 +:10B4E0003F70903A58F4305D30839F709A3040F44A +:10B4F000905D918332964E5F5F4FE2CF395CF4CF1F +:10B50000995CF7CFCF93DF93EC01DA01F0E0E0E054 +:10B510004C91442341F011969C911197992351F13C +:10B52000E617F70721F4CF01DF91CF91089580ED61 +:10B53000840F8A3020F08FEB840F8630D8F480EDB2 +:10B54000890F8A3020F02FEB290F263098F4242F12 +:10B5500030E0413450F42295207F913448F4982F04 +:10B56000292B299331961296D3CF27533109F3CF44 +:10B570009753F6CFF0E0E0E0D6CF089590E080E07A +:10B5800008950895089508950895089508950895D3 +:10B590000895CF93DF93C82FD62FE091462BF091DB +:10B5A000472B19950E941169E091B32BF091B42BB0 +:10B5B000C5838BE1C89FB0011124625D7A4F4BE1D6 +:10B5C00050E084E49BE20E949670E091442BF0915D +:10B5D000452B1995DD23F1F0E0914C2BF0914D2B8B +:10B5E000309799F01995CE5DE091B32BF091B42B83 +:10B5F0008781843011F4C093622B8681843011F4EA +:10B60000C093612BDF91CF910895E0914A2BF09187 +:10B610004B2BE8CFE0914A2BF0914B2B1995C05E54 +:10B62000E3CF4BE150E06EE275E084E49BE20E94E0 +:10B630009670E091B32BF091B42B60E08581A9CF97 +:10B640000F931F939C018B01E091B32BF091B42BCE +:10B65000458165E085EB95E07DD51F910F910895BB +:10B66000CF93DF930F92CDB7DEB7AC019E012F5F72 +:10B670003F4F65E085EB95E086D50F90DF91CF9148 +:10B680000895EF92FF920F931F93CF93DF930F9242 +:10B69000CDB7DEB78C01E62E9E012F5F3F4FAC0188 +:10B6A00065E085EB95E06FD5F82E8823A1F06E2D2F +:10B6B00089816FDFC80140E0FC01208101962223CF +:10B6C00019F04F5F4F31C1F7E091692BF0916A2B70 +:10B6D000B80181E119958F2D0F90DF91CF911F91C6 +:10B6E0000F91FF90EF900895AC019B0165E085EB11 +:10B6F00095E070C588E18093010608958091612BE3 +:10B70000823139F148F4803181F18131F1F08823BF +:10B7100091F11092612B2FC08331F9F090EE980FC8 +:10B720009830B8F790915F2B21E0290F911121C03B +:10B730009091040693FF15C098E09093060680321E +:10B7400041F381508093612B16C088E080930506F9 +:10B75000E0CF88E080930706DCCF8091040683FD6C +:10B7600004C088E08093050606C088E08093060642 +:10B77000D0CF20935F2B8091622B823131F140F446 +:10B78000803181F18131E9F081111092622B0895AD +:10B790008331F9F090EE980F9830B8F79091602BC4 +:10B7A00021E0290F911121C09091040694FF15C04A +:10B7B00090E190930606803241F381508093622B92 +:10B7C000089580E180930506E0CF80E1809307062D +:10B7D000DCCF8091040684FD04C080E180930506DF +:10B7E000089580E180930606D0CF2093602B0895C2 +:10B7F000AC019B016BE082E396E0ECC4E2EBFBE280 +:10B8000022E73CE2982F9071887091116287811134 +:10B810006187E05CFF4F2E173F07B9F7992329F0A6 +:10B8200090E1909306061092622B882329F088E01D +:10B83000809306061092612B08950F931F939B012E +:10B840008A01803161F4E091B32BF091B42B4781F0 +:10B850006BE082E396E07ED41F910F9108958830CB +:10B86000D9F7E091B32BF091B42B4681F1CF0F9330 +:10B870001F93CF93DF930F92CDB7DEB7082FAB01A5 +:10B880009E012F5F3F4F6BE082E396E07CD4182F40 +:10B89000882319F06981802FB1DF812F0F90DF910C +:10B8A000CF911F910F910895DA01292F332722306C +:10B8B000310531F12330310551F02130310591F45A +:10B8C00082E190E023ED37E02D933C9308959C01B5 +:10B8D0003327813061F02230310579F0E1E9F7E07A +:10B8E000232B39F090E080E030E020E0EDCFE5E67A +:10B8F000F7E0849190E09F01E7CFE5E4F7E0F9CF2E +:10B900008EE390E025E937E0DFCF0895CF92DF9214 +:10B91000FF920F931F93CF93DF93F42EEEB1FFB1FD +:10B920002091080430910904F894C42ED12C409140 +:10B930006C2B50916D2BD6011F96C091AE2BD091E0 +:10B94000AF2B4A175B0708F06BC0CE56DB4209F4F9 +:10B9500052C0E091672BF091682BC080D18012819A +:10B96000C381D4818091642B882389F08DE190E29A +:10B970000E941E0B10927A2C10927B2C10927D2C20 +:10B98000612F70E0C6010E94906D2097E9F50EE6E8 +:10B990001BE20093AE2B1093AF2BC0E4D0E0C0931A +:10B9A0006C2BD0936D2B1092652B1092662B1092FE +:10B9B000672B1092682B1092642B1092632B8DE1F1 +:10B9C00090E20E941E0B10927A2C10927B2C109207 +:10B9D0007D2C0093AE2B1093AF2BC0936C2BD09388 +:10B9E0006D2B1092652B1092662B1092672B109284 +:10B9F000682B1092642B7894DF91CF911F910F9157 +:10BA0000FF90DF90CF900895C880D9801A810B8075 +:10BA1000DC81C02D8091642B81508093642BA2CF58 +:10BA2000E22BF32B9C2F937024E0291B30E08E0136 +:10BA3000020F131FD9011896CA0FDB1F4850510976 +:10BA4000421B530B40936C2B50936D2B9E012F5F29 +:10BA50003F4F2093AE2B3093AF2B8883A091AE2B1A +:10BA6000B091AF2BCD0101968093AE2B9093AF2B6D +:10BA7000FC92A091AE2BB091AF2BCD01019680939B +:10BA8000AE2B9093AF2BFC93A091AE2BB091AF2B2C +:10BA9000CD0101968093AE2B9093AF2BEC93A60132 +:10BAA0008091AE2B9091AF2B0E94EF708091AE2BC6 +:10BAB0009091AF2B8C0D9D1D8093AE2B9093AF2B4F +:10BAC00080916C2B90916D2B04978C199D0980931C +:10BAD0006C2B90936D2BF801C083D18344E04F0D04 +:10BAE0004283138214828091672B9091682B892B5B +:10BAF00091F0E091652BF091662B309761F0038314 +:10BB000014830093652B1093662B8091642B8F5FB9 +:10BB10008093642B70CF0093652B1093662B00935A +:10BB2000672B1093682BF1CF08954F925F926F921D +:10BB30007F928F929F92AF92BF92CF92DF92EF92BD +:10BB4000FF920F931F93CF93DF938C012A013B0148 +:10BB5000E901C0901A20D0901B20C601825C9F434F +:10BB6000AC0170E060E0441655066606770608F002 +:10BB700072C022E0C21A20E4D20A530142018C0EA4 +:10BB80009D1EA11CB11C84169506A606B70608F4D6 +:10BB900042C044195509C81BD90B7E01E40CF51CA1 +:10BBA000EA0199249394C601B0E0A0E0B2014816DE +:10BBB00059066A067B0608F045C06E5F7F4BA301FD +:10BBC00092012C0F3D1F411D511D281739074A07AF +:10BBD0005B0728F5AE01C8014BD3992051F0EC0E5C +:10BBE000FD1EF801EE0DFF1DC00FD11FEC17FD0764 +:10BBF00081F581E0DF91CF911F910F91FF90EF9040 +:10BC0000DF90CF90BF90AF909F908F907F906F907C +:10BC10005F904F900895F12CE12C912CC4CF5601E8 +:10BC2000A418B508A501C80123D3A2014C195D09C8 +:10BC30004C0F5D1F6EE67BE2C8018A0D9B1D0E94C2 +:10BC4000EF70CBCF6C197D096259744DAE01C801FC +:10BC5000F6CF1292CBCF80E0CDCFEEE6FBE2209183 +:10BC60006C2B30916D2B8EEA9BE2821B930BE817B5 +:10BC7000F90751F58EE69BE28093AE2B9093AF2BA4 +:10BC800080E490E080936C2B90936D2B82E090E4A5 +:10BC900080931A2090931B2042E050E060E070E413 +:10BCA0008AE190E239D3E091B32BF091B42B8781F4 +:10BCB0008A3019F480E18093622B86818A3019F4EE +:10BCC00080E18093612B08951192D1CF80916C2BEC +:10BCD00090916D2B905820911A2030911B20821B3F +:10BCE000930B08958093B92B8093F92B8093392C73 +:10BCF000E091B32BF091B42B8483813069F08230D2 +:10BD000081F0811108C010926B2B85E89CE580932F +:10BD1000692B90936A2B089580936B2B8DEE9EE593 +:10BD2000F6CF10926B2B86E89CE5F1CFCF93DF9393 +:10BD30000F92CDB7DEB7E091B32BF091B42B848195 +:10BD4000D1DF8EE69BE28093AE2B9093AF2B80E405 +:10BD500090E080936C2B90936D2B41E050E0BE01FE +:10BD60006F5F7F4F80E090E099D6E091AE2BF0912D +:10BD7000AF2B80E4DF011D928A95E9F78981882342 +:10BD8000A1F042E050E060E070E48AE190E270D21D +:10BD9000E091692BF0916A2B40E070E060E08FEF5A +:10BDA00019950F90DF91CF91089582E090E48093F0 +:10BDB0001A2090931B2042E050E060E070E48AE19A +:10BDC00090E2AAD281E0898341E050E0BE016F5F3A +:10BDD0007F4F80E090E09AD6DBCF0F931F93CF93F5 +:10BDE000DF93CEB1DFB1E0910804F0910904209116 +:10BDF0006C2B30916D2BA42FB0E08D010C5F1F4F89 +:10BE00002017310708F44DC0EC2BFD2B24503109CD +:10BE10002A1B3B0B20936C2B30936D2BA091AE2BE8 +:10BE2000B091AF2B9D012F5F3F4F2093AE2B3093EE +:10BE3000AF2B8C93A091AE2BB091AF2BCD0101967F +:10BE40008093AE2B9093AF2B4C93A091AE2BB091DF +:10BE5000AF2BCD0101968093AE2B9093AF2BFC932B +:10BE6000A091AE2BB091AF2BCD0101968093AE2B5C +:10BE70009093AF2BEC93415028F4DF91CF911F9119 +:10BE80000F910895FB01A091AE2BB091AF2BCD0186 +:10BE900001968093AE2B9093AF2B81918C93BF0131 +:10BEA000EACF80E01FDFE091B32BF091B42B8781C4 +:10BEB0008A3019F481E18093622B86818A30E9F619 +:10BEC00081E18093612BD9CF1F93CF93DF930F92A2 +:10BED000CDB7DEB7AC019E012F5F3F4F63E085EE2B +:10BEE00097E051D1182F882311F08981FBDE812F33 +:10BEF0000F90DF91CF911F9108950F931F939C0195 +:10BF00008B01E091B32BF091B42B448163E085EE7B +:10BF100097E020D11F910F910895AC019B0163E040 +:10BF200085EE97E057C10F931F93CF93DF938091D6 +:10BF30006C2B90916D2B8034910508F08BC0009193 +:10BF40001A2010911B20C0E0D0E8C01BD10B40E4A8 +:10BF500050E0481B590BC417D507B0F1B8018EE665 +:10BF60009BE2DAD120916C2B30916D2B80911A20BD +:10BF700090911B20805C9F4F821B930B80931A2013 +:10BF800090931B20EEE6FBE28EEA9BE2821B930B72 +:10BF90008E179F07B9F48EE69BE28093AE2B9093A9 +:10BFA000AF2B80E490E080936C2B90936D2B42E05C +:10BFB00050E060E070E48AE190E2DF91CF911F9160 +:10BFC0000F91AAC11192E4CF209779F1AE01B80187 +:10BFD0008EE69BE2A1D1A801405C5F47BE01625999 +:10BFE000744D8EE69BE20E94F87010588091AE2B43 +:10BFF0009091AF2B080F191F0093AE2B1093AF2B0E +:10C0000080916C2B90916D2B8C0F9D1F80936C2BCE +:10C0100090936D2B80911A2090911B20C80FD91FEF +:10C02000C0931A20D0931B20C2CFE091B32BF09184 +:10C03000B42B87818A3019F497E29093622B968112 +:10C040009A3069F427E22093612B8A3051F087E21D +:10C050008093612BDF91CF911F910F9108958A30CA +:10C06000C9F787E28093622B9A30A1F7F0CFEF9265 +:10C07000FF921F93CF93DF93E091B32BF091B42BFA +:10C080008481823009F05CC08091632B8F5F809344 +:10C09000632B837009F042C0E091672BF091682B0D +:10C0A000E080F1801281C381D4818091642B882348 +:10C0B00089F08DE190E20E941E0B10927A2C109272 +:10C0C0007B2C10927D2C612F70E0C7010E94906D37 +:10C0D000209751F58EE69BE28093AE2B9093AF2B89 +:10C0E00080E490E080936C2B90936D2B1092652BE5 +:10C0F0001092662B1092672B1092682B1092642B73 +:10C100001092632B8DE190E20E941E0B10927A2C0C +:10C1100010927B2C10927D2C1092632BDF91CF918B +:10C120001F91FF90EF900895E880F9801A810B80AD +:10C13000DC81C02D8091642B81508093642BB5CF1E +:10C1400080916B2B882351F3DF91CF911F91FF904A +:10C15000EF90E9CE0F931F93FC01942FA80161117A +:10C1600002C080E00BC08491615089130AC0BF01F6 +:10C170006F5F7F4FC9010E94D37081E01F910F91C3 +:10C1800008957996ECCFCF92DF92EF92FF921F93B2 +:10C19000CF93DF93EC01162F7A016901111102C0D0 +:10C1A00080E00EC0BE016F5F7F4FC7010E94B2707A +:10C1B0001150892B69F4FE01C491F601C08381E01E +:10C1C000DF91CF911F91FF90EF90DF90CF90089576 +:10C1D0006996E4CFDA0101965CE2611104C0232B79 +:10C1E00009F01C920895FC014491411109C062308C +:10C1F00020F021153105B1F35D9361504996EDCFE3 +:10C200002115310579F34D93319621503109ECCF49 +:10C21000E0E6F6E080E1858382E0868388E085833E +:10C220008AE18183E0EAF9E01682178280EC858357 +:10C2300088E18483E0E0F1E0128A8BE6838B148A44 +:10C24000158A20EA208F99E0918F128E148E158E18 +:10C25000168E84E0808B12A23CE633A314A215A2B2 +:10C2600010A611A612A624A795A716A680A3089526 +:10C270004115510509F44FC020E12093660623E0E3 +:10C280002093A0092091A10927FFFCCF2091A009AC +:10C29000272F33272093A0092091A10927FFFCCF46 +:10C2A0002091A0096093A0092091A10927FFFCCF4C +:10C2B0002091A00921E02093120180931C01892F75 +:10C2C000992780931D0140931401509315011092FA +:10C2D000220180EB9BE280932801892F992780938C +:10C2E0002901409324015093250180911001806819 +:10C2F00080931001809120018068809320018091BB +:10C30000100187FDFCCF80E3809311018093210110 +:10C3100080E18093650608954115510509F46FC0C9 +:10C3200020E12093660626E02093A0092091A10930 +:10C3300027FFFCCF2091A00920E120936506000093 +:10C3400000002093660622E02093A0092091A10915 +:10C3500027FFFCCF2091A009272F33272093A00986 +:10C360002091A10927FFFCCF2091A0096093A0098B +:10C370002091A10927FFFCCF2091A0091092120162 +:10C3800020EB3BE220931C01232F332720931D0138 +:10C39000409314015093150120E1209322018093D2 +:10C3A0002801892F992780932901409324015093D4 +:10C3B00025018091100180688093100180912001F7 +:10C3C0008068809320018091100187FDFCCF80E37D +:10C3D000809311018093210180E180936506E091B3 +:10C3E000B32BF091B42B8781863019F481E18093CF +:10C3F000622B8681863019F481E18093612B089548 +:10C400009A01215031092F3F3F4108F05DC0209132 +:10C41000B22B30E0322F22273295330F307E260F99 +:10C42000371F2617370708F44FC060E16093660690 +:10C4300063E06093A0096091A10967FFFCCF609160 +:10C44000A009632F77276093A0096091A10967FF76 +:10C45000FCCF3091A0092093A0092091A10927FFCA +:10C46000FCCF2091A00921E02093120180931C01B0 +:10C47000892F992780931D01409314015093150132 +:10C480001092220180EB9BE280932801892F99274B +:10C49000809329014093240150932501809110013C +:10C4A0008068809310018091200180688093200132 +:10C4B0008091100187FDFCCF80E380931101809370 +:10C4C000210180E18093650608959A012150310988 +:10C4D0002F3F3F4108F07DC02091B22B30E0322F3A +:10C4E00022273295330F307E260F371F2617370746 +:10C4F00008F46FC060E16093660666E06093A0098F +:10C500006091A10967FFFCCF6091A00960E1609391 +:10C510006506000000006093660662E06093A00973 +:10C520006091A10967FFFCCF6091A009632F772775 +:10C530006093A0096091A10967FFFCCF3091A00929 +:10C540002093A0092091A10927FFFCCF2091A009E9 +:10C550001092120120EB3BE220931C01232F332782 +:10C5600020931D01409314015093150120E1209365 +:10C57000220180932801892F9927809329014093D4 +:10C58000240150932501809110018068809310014F +:10C59000809120018068809320018091100187FDA7 +:10C5A000FCCF80E3809311018093210180E180938F +:10C5B0006506E091B32BF091B42B8781863019F496 +:10C5C00081E18093622B8681863019F481E180932A +:10C5D000612B0895CF92DF92EF92FF92CF93DF937A +:10C5E000C090B22BD12CF12CE12C3DE0CC0CDD1C09 +:10C5F000EE1CFF1C3A95D1F7C11480EFD806E10478 +:10C60000F10408F053C080E18093660686E08093D1 +:10C61000A0098091A10987FFFCCF8091A00980E14A +:10C6200080936506000000008093660682E0809398 +:10C63000A0098091A10987FFFCCF8091A0091092E9 +:10C64000A0098091A10987FFFCCF8091A0091092D9 +:10C65000A0098091A10987FFFCCF80E1D80E81E07D +:10C66000E81EF11C8091A009C0E0D0E1C701B6012D +:10C670000E944E0A8093A0092091A10927FFFCCFB8 +:10C680002091A009892F99278093A0098091A10961 +:10C6900087FFFCCF8091A00982E0C80ED11CE11C6D +:10C6A000F11C219719F780E18093650680910104C0 +:10C6B00080FDFCCF82E080930304DF91CF91FF9057 +:10C6C000EF90DF90CF900895CF92DF92EF92FF929C +:10C6D000CF93DF93C090B22BD12CF12CE12C8DE0C5 +:10C6E000CC0CDD1CEE1CFF1C8A95D1F7C11480EF29 +:10C6F000D806E104F10438F0DF91CF91FF90EF907C +:10C70000DF90CF9067CF80E1D80E81E0E81EF11C6A +:10C71000C1E2D0E0219781F30E94690AC701B60106 +:10C720000E94550A0E94690A8FEFD81AE80AF80A8F +:10C73000F1CFCF92DF92EF92FF920F931F93CF939F +:10C74000DF93C090B22BD12CF12CE12C8DE0CC0CDE +:10C75000DD1CEE1CFF1C8A95D1F7C11480EFD806B2 +:10C76000E104F10448F580E18093660683E080935C +:10C77000A0098091A10987FFFCCF8091A0091092A8 +:10C78000A0098091A10987FFFCCF8091A009109298 +:10C79000A0098091A10987FFFCCF80E1D80E81E03C +:10C7A000E81EF11C8091A00901E210E0015011097E +:10C7B00071F580E180936506E091B32BF091B42B85 +:10C7C0008781863019F490E19093622B96819630A0 +:10C7D00009F04CC020E12093612B853041F483E1C6 +:10C7E0008093622B953019F483E18093612B8091C3 +:10C7F000010480FDFCCF82E080930304DF91CF91A0 +:10C800001F910F91FF90EF90DF90CF9008950E94BD +:10C81000690A0E94660A0E94690AD0E0C0E010928C +:10C82000A0098091A10987FFFCCF6091A00970E069 +:10C830001092A0098091A10987FFFCCF8091A009E7 +:10C84000782BCE010E945B0A0E94690A2296C115CC +:10C8500081E0D80721F7C701B6010E94600A0E9453 +:10C86000690A8FEFD81AE80AF80AA0CF853009F0D4 +:10C87000B9CFB5CFCF92DF92EF92FF920F931F9374 +:10C880004115E0E25E076105710508F071C089019C +:10C8900030E020E0C12CE0E2DE2EE12CF12CC41AC5 +:10C8A000D50AE60AF70A0C151D052E053F0508F402 +:10C8B000680120E12093660626E02093A0092091DC +:10C8C000A10927FFFCCF2091A00920E12093650654 +:10C8D000000000002093660622E02093A00920912A +:10C8E000A10927FFFCCF2091A009252F33272093F2 +:10C8F000A0092091A10927FFFCCF2091A009409316 +:10C90000A0092091A10927FFFCCF2091A009109236 +:10C91000120120EB3BE220931C01232F33272093AD +:10C920001D01C0921401D092150120E12093220133 +:10C9300080932801892F992780932901C09224018F +:10C94000D092250180911001806880931001809120 +:10C9500020018068809320018091100187FDFCCF29 +:10C9600080E3809311018093210180E1809365062B +:10C9700081E01F910F91FF90EF90DF90CF9008958D +:10C98000CF92DF92EF92FF920F931F934115E0E257 +:10C990005E076105710508F069C0890130E020E09B +:10C9A000C12CE0E2DE2EE12CF12CC41AD50AE60AF5 +:10C9B000F70A0C151D052E053F0508F4680120E156 +:10C9C0002093660623E02093A0092091A10927FF68 +:10C9D000FCCF2091A009252F33272093A009209177 +:10C9E000A10927FFFCCF2091A0094093A009209125 +:10C9F000A10927FFFCCF2091A00921E0209312017B +:10CA000080931C01892F992780931D01C0921401E6 +:10CA1000D09215011092220180EB9BE280932801B5 +:10CA2000892F992780932901C0922401D092250152 +:10CA300080911001806880931001809120018068AE +:10CA4000809320018091100187FDFCCF80E38093CB +:10CA500011018093210180E18093650681E01F919F +:10CA60000F91FF90EF90DF90CF90089580E0F7CF87 +:10CA70008091CF0187FDFCCF0895FADF8091CF012F +:10CA800081FF0BC086E38093CA0188ED90E021E02E +:10CA900030E0EBECF1E084BF20830895CF92DF9289 +:10CAA000EF92FF920F931F93CF93DF938C01EB01D3 +:10CAB0007A011092C201DCDF90E080E046E068ED90 +:10CAC00070E0CC24C394D12CEBECF1E09C01200F5E +:10CAD000311F8E159F0549F4DF91CF911F910F9162 +:10CAE000FF90EF90DF90CF900895202F280F209394 +:10CAF000C001232F2F712093C1014093CA0164BF4D +:10CB0000C0822091C40129930196E0CF3F924F92B9 +:10CB10005F926F927F928F929F92AF92BF92CF92CD +:10CB2000DF92EF92FF920F931F93CF93DF93EC016D +:10CB30008B016A018F71582EC81BD1099EDF98DFC7 +:10CB400083E38093CA011092C1011092C201760161 +:10CB500085E3382E98EDA92EB12C88248394912C4E +:10CB60003BEC632E7724739443E3442EC6018E1965 +:10CB70009F09E114F10491F4DF91CF911F910F917E +:10CB8000FF90EF90DF90CF90BF90AF909F908F90ED +:10CB90007F906F905F904F903F9008955092C001AA +:10CBA000F80181918F018093C401F1E0EF1AF1083F +:10CBB00021F0539480E25812D9CFC093C0018D2F39 +:10CBC0008F718093C1013092CA01C501F30184BF06 +:10CBD0008082A0964DDF4092CA01512CC7CF0895A4 +:10CBE0008091B12B833040F081508093B12B823003 +:10CBF00019F481E0809386060895AC019B0168E0FA +:10CC000080E398E0E7CA8093B12B882359F091E044 +:10CC100090938106823019F490938606089590933C +:10CC20008506089581E08093820608950F931F93EF +:10CC30009C018B014091B12B68E080E398E08ADA97 +:10CC40001F910F9108951F93CF93DF930F92CDB74C +:10CC5000DEB7AC019E012F5F3F4F68E080E398E0B4 +:10CC600092DA182F882311F08981CDDF812F0F9060 +:10CC7000DF91CF911F9108952EB13FB1E0E0F4E034 +:10CC8000408551858EB19FB160857185862B972B2C +:10CC9000B0E0A0E064E1880F991FAA1FBB1F6A954E +:10CCA000D1F788279927A07FBF71422B532B5D5F57 +:10CCB000842B952B0C948B700C94887008951F9383 +:10CCC000CF93DF93EC01162F115020F4DF91CF9119 +:10CCD0001F9108950E9488708993F6CF0E948870F2 +:10CCE0000E9488700E9488700C94887043EC50E019 +:10CCF00062EB7BE281E090E0D1CE43EC50E062EB6E +:10CD00007BE281E090E002CF0F931F93CF93DF93FC +:10CD1000D82FCFEFC80F80E0C33008F044C081D2D5 +:10CD20008091B22BC81779F104DDC093B22B80E457 +:10CD3000C89F900111242B54344D2093B32B309372 +:10CD4000B42B48DCE091B32BF091B42B60E08581EB +:10CD50000E94C95AE091B32BF091B42B84810E94B8 +:10CD6000725E81E090E08C01025B1B426091B22B0D +:10CD70000E943F776091B32B7091B42BC8018D5402 +:10CD8000944D0E944877D15EE091B32BF091B42B83 +:10CD90008781843011F4D093622B8681843011F422 +:10CDA000D093612B81E0DF91CF911F910F91089576 +:10CDB000CF93DF939091B22B44E0C3E0D0E0415099 +:10CDC00019F4DF91CF910895892F90E00196BE016B +:10CDD0000E94F86F9C01982F86E0220F331F8A95DE +:10CDE000E1F7F901EE54F44D8085882341F381E0A9 +:10CDF000890FDF91CF9188CFFC018091B22B8F5C9E +:10CE0000808311820895CF93DC0111968C91119744 +:10CE100081110DC0CC91E091692BF0916A2B41E01A +:10CE2000BD0182E1199580ED8C0FCF916DCF80E02F +:10CE3000CF9108950F920FB60F921F92112408B64A +:10CE40000F9218BEFFCF1F921FB61F9211248F930F +:10CE500088B78F9318BE9F938EB19FB180589F4F14 +:10CE60008EB99FB99F918F9188BF8F911F901FBEE0 +:10CE70001F9018958091780083FF0AC088E0809306 +:10CE8000780088ED84BF81E0809380000D94FE00DF +:10CE90008BEC80935200809150008860809350000A +:10CEA0008091510083FFFCCF82EC809355008091EC +:10CEB00050008061809350008091510084FFFCCF2E +:10CEC00088ED84BF84E0809340001EB81FB881E0E5 +:10CED000809343002FE730E020930A0430930B0443 +:10CEE00020930C0430930D0480930004809302047B +:10CEF00080E880930001089588ED84BF81E08093ED +:10CF00007900089588ED84BF8BE1809380000895B7 +:10CF1000809150008260809350008091510081FF89 +:10CF2000FCCF82E08093CA01EDE1F0E0E491E09370 +:10CF30006200ECE1F0E0E491E09363001092CA013A +:10CF400080E8809365008BEB8093660080915600AB +:10CF5000897F8093560080915600846080935600AC +:10CF6000809160008160809360000895E0E4F0E0CB +:10CF700084818E7F8483E0E6F0E080818E7F8083F1 +:10CF8000E0E5F0E080818D7F8083089587E08093E5 +:10CF9000A20078940895282F90E080E0FC01EF5FD4 +:10CFA000F64FE491E21303C08E5F964F0895819689 +:10CFB000893231E0930791F790E080E00895FC0119 +:10CFC000862FBA018F33E1F476962591349121159D +:10CFD000310559F18DE79CE2F90119958F3F31F543 +:10CFE00091E09093772C2EB13FB14091080450917D +:10CFF0000904242B352B2093752C3093762C08951F +:10D000008D3359F47496259134912115310569F0C9 +:10D010008DE79CE2F9011995E1CF811102C070966C +:10D02000D4CF803211F47296EECF89EC08950F932D +:10D030001F93CF93DF938C01CAE2DAE0BE01C801EF +:10D040000E94B270892B49F450E040E060E0CE01CC +:10D05000DF91CF911F910F91B2CF68968DE0C23DC5 +:10D06000D80761F7DF91CF911F910F910895EF924B +:10D07000FF920F931F93CF93DF939FE9980F2FEBAE +:10D08000280F2A3140F19A3140F190ED980F9A30F3 +:10D0900040F08F3531F0982F9D7F9D3311F0803215 +:10D0A000F1F420917A2C30917B2C2F3F310558F4EC +:10D0B000A9014F5F5F4F40937A2C50937B2C2358EC +:10D0C000334DF901808381E0DF91CF911F910F9162 +:10D0D000FF90EF9008959A3120F78052E2CF8D3083 +:10D0E00009F053C0E0917A2CF0917B2CE358F34D7A +:10D0F000108210927A2C10927B2C0091772C0111C7 +:10D10000E2CF80917D2C982F9F7D99F488EC43DFAE +:10D11000F7D48EEF98E0F4D40023A9F280917D2C0F +:10D12000882389F28DE79CE2E6D48BEF98E0E8D47F +:10D13000CACF8D7F8D3351F3EDE7FCE27F01119172 +:10D14000112331F01F3321F01D3311F01032B1F7EC +:10D15000F7011082CAE2DAE0BE018DE79CE20E948C +:10D16000B270892B61F410927D2CA7014F5F5F4F45 +:10D17000612FCE0124DF01E08F3F49F6A4CF6896EE +:10D18000FDE0C23DDF0741F7C1CF883069F48091EF +:10D190007A2C90917B2C009709F495CF019780937E +:10D1A0007A2C90937B2C8FCF8B3109F08CCF1092FF +:10D1B0007A2C10927B2C87CF8091772C882381F159 +:10D1C000E091B32BF091B42B2085318521153105E9 +:10D1D00039F18EB19FB14091080450910904842B1C +:10D1E000952B4091752C5091762C841B950B64E601 +:10D1F00070E0FED66217730798F01092772C8BECD4 +:10D20000CADE7ED488EF98E07BD4E091782CF09150 +:10D21000792C309729F019951092782C1092792C4E +:10D2200008958091772C882399F01092772C8BECBD +:10D23000B2DE66D488EF98E063D4E091782CF09168 +:10D24000792C309729F019951092782C1092792C1E +:10D2500008952CE63FE03F932F9326E63FE03F936F +:10D260002F932FE53FE03F932F9324E53FE03F933B +:10D270002F9324EB3EE03F932F9321E02F931F92B7 +:10D280009F938F93D8D78DB79EB70E968DBF9EBFB5 +:10D2900085E6089560E071E00E94205B85E60895D0 +:10D2A000CF93DF93EB0128812F3359F4298121118A +:10D2B00008C060E071E00E94745B85E6DF91CF9169 +:10D2C0000895CE010E94305B882391F061E0CE0189 +:10D2D0000E94415BE091B32BF091B42BCF018F5FA3 +:10D2E0009F4F65818D5A9B420E943F7784E6E6CF2F +:10D2F0008AECE4CFEF92FF920F931F93CF93DF93CB +:10D30000CDB7DEB7A097CDBFDEBF8C0180915C2B7F +:10D31000E82EF12C81111BC08CEA9EE09F938F9325 +:10D3200081E08F931F921F930F9385D70F900F90DB +:10D330000F900F900F900F9085E6A096CDBFDEBFA7 +:10D34000DF91CF911F910F91FF90EF900895E091A1 +:10D35000562BF091572BCE01019619959701AE01EE +:10D360004F5F5F4F60E071E0C8010E94555AE4CF03 +:10D37000DF92EF92FF920F931F93CF93DF93CDB77E +:10D38000DEB7A097CDBFDEBF7B01D0905C2B65EAF6 +:10D390007EE0C701E7D68E010F5F1F4F892B59F53D +:10D3A00078018E2D801B8D1508F180915E2B8530C4 +:10D3B00011F480EE8983E091582BF091592BC8012C +:10D3C0001995E091692BF0916A2B40915C2BB80183 +:10D3D00083E1199584E6A096CDBFDEBFDF91CF91A2 +:10D3E0001F910F91FF90EF90DF90089565DCF7019A +:10D3F00081937F01D6CFA70160E270E0C8010E944F +:10D40000825AD8161906B9F28AECE5CFFC01809150 +:10D410005D2B882329F081E38083118285E60895BE +:10D4200080E3FACFFB012181211126C02081213325 +:10D4300029F481E080935D2B84E60895203319F46C +:10D4400010925D2BF9CF2F33B9F41F9220E32F9365 +:10D450001F9221E32F932FE93EE03F932F9321E08A +:10D460002F931F929F938F93E6D68DB79EB70A9600 +:10D470008DBF9EBF85E608958AEC08958AE394E601 +:10D48000EED38EE6089580EC94E605D48EE60895FA +:10D49000E0ECF4E081818E7F81830E942D102CDDF1 +:10D4A00084E60895E0ECF4E081818E7F81830E9420 +:10D4B0002D1028DD84E60895E4E4FBE227892F930C +:10D4C00026892F932CE93EE03F932F9321E02F9361 +:10D4D0001F929F938F93AFD68DB79EB708968DBF3F +:10D4E0009EBF85E6089520915C2B1F922F9329E91A +:10D4F0003EE03F932F9321E02F931F929F938F93B2 +:10D500009AD68DB79EB708968DBF9EBF85E60895C3 +:10D51000BC0140E051E080E00E943D5385E6089563 +:10D52000FB0120812F3349F42181211106C060E0E5 +:10D5300071E00E94295385E60895BF0180E00E94B2 +:10D540005053882319F0D9DB84E608958AEC0895B6 +:10D55000BC0140E051E081E00E943D5385E6089522 +:10D56000FB0120812F3349F42181211106C060E0A5 +:10D5700071E00E94295385E60895BF0181E00E9471 +:10D580005053882319F0B9DB84E608958AEC089596 +:10D59000BC0140E051E082E00E943D5385E60895E1 +:10D5A000FB0120812F3349F42181211106C060E065 +:10D5B00071E00E94295385E60895BF0182E00E9430 +:10D5C0005053882319F099DB84E608958AEC089576 +:10D5D000BC0140E051E083E00E943D5385E60895A0 +:10D5E000FB0120812F3349F42181211106C060E025 +:10D5F00071E00E94295385E60895BF0183E00E94EF +:10D600005053882319F079DB84E608958AEC089555 +:10D61000BC0140E051E080E10E941D5C85E6089578 +:10D62000FB0120812F3349F42181211106C060E0E4 +:10D6300071E00E94F85B85E60895BF0180E10E94D9 +:10D64000375C882319F059DB84E608958AEC089545 +:10D65000BC0140E051E088E00E941D5C85E6089531 +:10D66000FB0120812F3349F42181211106C060E0A4 +:10D6700071E00E94F85B85E60895BF0188E00E9492 +:10D68000375C882319F039DB84E608958AEC089525 +:10D6900060E071E0CBDA85E60895FB0120812F334D +:10D6A00041F42181211105C060E071E0A6DA85E630 +:10D6B0000895CF01C8DA811102C08AEC089584E68A +:10D6C000089560E071E00E947D5F85E60895FB01AA +:10D6D00020812F3349F42181211106C060E071E0DF +:10D6E0000E948D5F85E60895CF010E94645F8823C4 +:10D6F00019F003DB84E608958AEC0895CF93DF9355 +:10D70000EC010E94665E9C018034910510F420E4D7 +:10D7100030E0205431093F932F939F938F9389E7F3 +:10D720009EE09F938F9381E08F931F92DF93CF931F +:10D7300082D58DB79EB70A968DBF9EBF85E6DF91D5 +:10D74000CF91089585E99DE5A6D28EE608950E94C1 +:10D75000935F84E608950E942D5E84E6089560E05C +:10D7600071E04ADB85E60895CB014DDB811102C0F3 +:10D770008AEC089584E608950E94646384E608951F +:10D780000E94996384E608950E94EA6284E60895FF +:10D7900090916806917089E7891B0895DF92EF9256 +:10D7A000FF920F931F93CF93DF93EC010FEF10E0E5 +:10D7B0008AE2E82E8AE0F82E9CE2D92EB70180E9B1 +:10D7C00092E2D0D4892B19F00115110509F52197A2 +:10D7D000188285E6DF91CF911F910F91FF90EF9016 +:10D7E000DF900895488331968901EC014491CE0180 +:10D7F0000196980121503109442319F00130110597 +:10D8000089F7D882890128E1E20EF11CEC01D6CF1C +:10D81000F701ECCFCF93DF9300D00F92CDB7DEB7F7 +:10D82000FC01809120028068809320028091230275 +:10D8300080FFFCCF81E080932302A0911002B09181 +:10D840001102AE5BB109B7FF02C0B0E0A0E020E07A +:10D8500038EB4BE050E0E0D369837A838B839C8381 +:10D86000AA27BB279F938F9382E79EE09F938F9376 +:10D8700081E08F931F92FF93EF93DDD4CDBFDEBF86 +:10D8800085E62496CDBFDEBFDF91CF9108952EB1FE +:10D890003FB14091080450910904242B352B3F934C +:10D8A0002F932CE63EE03F932F9321E02F931F927E +:10D8B0009F938F93C0D48DB79EB708968DBF9EBFA0 +:10D8C00085E60895E091B32BF091B42B4085518506 +:10D8D00064E6649F9001659F300D11243F932F9360 +:10D8E00026E63EE03F932F9321E02F931F929F93D4 +:10D8F0008F93A1D48DB79EB708968DBF9EBF85E646 +:10D900000895CF93DF930F920F92CDB7DEB7FB014F +:10D9100020812F33C9F42181211116C024E33EE078 +:10D920003F932F9321E02F931F929F938F9383D444 +:10D930000F900F900F900F900F900F9085E60F9023 +:10D940000F90DF91CF91089589E592E089839A83C2 +:10D95000CE0101969F938F9380E39EE09F938F93D8 +:10D96000FF93EF939ED40F900F900F900F900F9016 +:10D970000F90892BA9F069817A81693582E0780757 +:10D9800078F4E091B32BF091B42B60877187CF01CD +:10D990008F5F9F4F8A5A9B420E94487784E6CFCF81 +:10D9A0008AECCDCFE091B32BF091B42B23852F934C +:10D9B00022852F932DE23EE03F932F9321E02F937A +:10D9C0001F929F938F9337D48DB79EB708968DBFC4 +:10D9D0009EBF85E60895CF93DF930F920F92CDB748 +:10D9E000DEB7FB0120812F33C9F42181211116C03C +:10D9F0002FE02F932FEF2F932CED3DE03F932F93AC +:10DA000021E02F931F929F938F9315D4CDBFDEBF3C +:10DA100085E60F900F90DF91CF91089519821A82B9 +:10DA2000CE0101969F938F9388ED9DE09F938F93F6 +:10DA3000FF93EF9336D40F900F900F900F900F90AD +:10DA40000F90892BC9F069817A81611590E179077E +:10DA500098F46093380370933903E091B32BF091FD +:10DA6000B42B62877387CF018F5F9F4F885A9B4289 +:10DA70000E94487784E6CDCF8AECCBCFFB01208192 +:10DA80002F33D1F42181211122C01F9220E32F9343 +:10DA90001F9221E32F9322ED3DE03F932F9321E04E +:10DAA0002F931F929F938F93C6D38DB79EB70A96DD +:10DAB0008DBF9EBF85E60895213321F40E943D5419 +:10DAC00084E60895203319F40E946254F9CF8AEC59 +:10DAD0000895FC0180910008813021F480918C0828 +:10DAE000833029F080E38083118285E6089581E305 +:10DAF000FACF89EC0895BC018DE190E20C94AB0A59 +:10DB0000CF93DF93EC01FE0164912196611103C074 +:10DB1000DF91CF9108958DE190E20E94F30AF3CF57 +:10DB2000AB01BC018DE190E20C94CF0A80E28093BE +:10DB300062060895CF93DF9380917C2C823029F583 +:10DB40008DE190E20E945E0B0E94610D8DE190E2FA +:10DB50000E94790BEC0197FD18C0E091B32BF09176 +:10DB6000B42B8781833019F483E18093622B868103 +:10DB7000833019F483E18093612B8C2FA2D0811123 +:10DB800004C08C2FDF91CF9172CADF91CF9108959D +:10DB900080917C2C823011F168F4811113C0809146 +:10DBA000680685FF09C08FE080931C2081E0809388 +:10DBB0007C2C02C08330D9F080917C2C823021F5FE +:10DBC000D0D1FACA80911C20815080931C208111F1 +:10DBD000F3CF9ED90E94681082E0E9CF8091680659 +:10DBE00085FDEACF8FE080931C2083E0E0CF809119 +:10DBF0001C20815080931C208111DECF0E942D10AB +:10DC0000B5D910927C2CD8CF0895E091B32BF09128 +:10DC1000B42B8781823019F481E18093622B868155 +:10DC2000823019F481E18093612B0895E091B32B48 +:10DC3000F091B42B8781823019F480E18093622BBC +:10DC40008681823019F480E18093612B08958DE103 +:10DC500090E20C94860A8DE190E20C94C90B9C0131 +:10DC600091E090938A2D9093892D8CE38093872D5A +:10DC700085E090E08093852D9093862D10927F2DE6 +:10DC80001092802D1092812D1092822D20937D2D47 +:10DC900030937E2D089527E020938A2D2CE231E0E9 +:10DCA0002093852D3093862D10927F2D1092802DFC +:10DCB0001092812D1092822D80937D2D90937E2D38 +:10DCC0000895CF9390918A2D963009F4B7C0A0F4AF +:10DCD000943009F48DC0953009F49CC0933030F431 +:10DCE00091116CC0C0E08C2FCF9108959330D1F783 +:10DCF0008093882D84E069C0983009F4FBC0993086 +:10DD000009F46DC0973071F7853109F0F0C01092B9 +:10DD1000892D8091892D8F5F8093892D40917F2D52 +:10DD20005091802D6091812D7091822DE0917D2DFB +:10DD3000F0917E2D20E830E08DE79CE21995C82F08 +:10DD4000882309F407C161E08DE190E20E94F30AA3 +:10DD50006091892D8DE190E20E94F30A6091892DF6 +:10DD600060958DE190E20E94F30A60E870E08DE733 +:10DD70009CE2D6DE60E08DE79CE2FC01019620810A +:10DD8000620F5CE28D3F9507C1F78DE190E20E9442 +:10DD9000F30A80917F2D9091802DA091812DB091DB +:10DDA000822D80589F4FAF4FBF4F80937F2D909310 +:10DDB000802DA093812DB093822D95CF813041F499 +:10DDC0001092832D1092842D83E080938A2D0EC0B3 +:10DDD000843041F466E08DE190E20E94F30A1092F3 +:10DDE0008A2D04C08831D9F38B31C9F3C1E07BCFD0 +:10DDF0009091882D2FEF30E0291B310982171306EF +:10DE000011F485E0E2CF65E18DE190E20E94F30A32 +:10DE100082E0DBCF2091832D3091842DA9014F5FCB +:10DE20005F4F4093832D5093842D2358334DF90138 +:10DE3000808386E040385105C9F6C7CF2091882DF0 +:10DE40009091892D29134BC090E02DE73CE2F90118 +:10DE50002F5F3F4F4081940FFCE22D3F3F07B9F702 +:10DE60008913D1CF40917F2D5091802D6091812DCC +:10DE70007091822DE0917D2DF0917E2D20E830E093 +:10DE80008DE79CE21995C82F882311F18091892D87 +:10DE90008F5F8093892D80917F2D9091802DA0910F +:10DEA000812DB091822D80589F4FAF4FBF4F8093EF +:10DEB0007F2D9093802DA093812DB093822D66E0CD +:10DEC0008DE190E20E94F30A82E080938A2D0BCFCD +:10DED00068E18DE190E20E94F30A68E17CCF492F6E +:10DEE0004150550B24171506C1F766E08DCF8B31D5 +:10DEF00009F475CF883109F46DCF863009F409CF64 +:10DF0000853109F073CF61E08DE190E20E94F30A60 +:10DF10006091892D8DE190E20E94F30A6091892D34 +:10DF200060958DE190E20E94F30A60E870E08DE771 +:10DF30009CE2F6DD60E08DE79CE2FC010196208129 +:10DF4000620FECE28D3F9E07C1F78DE190E20E94E7 +:10DF5000F30A4CCF64E08DE190E20E94F30A89E07D +:10DF600034CF80918A2D813019F0873029F10895BE +:10DF70008091852D9091862D9C012150310920930F +:10DF8000852D3093862D892B31F58091872D9FEF3C +:10DF9000980F9093872D882361F065E18DE190E2E1 +:10DFA0000E94F30A85E090E08093852D9093862D62 +:10DFB000089510928A2DF6CF8091852D9091862D0F +:10DFC0009C01215031092093852D3093862D892B7A +:10DFD00011F410928A2D0895991B79E004C0991FBD +:10DFE000961708F0961B881F7A95C9F780950895B3 +:10DFF000AA1BBB1B51E107C0AA1FBB1FA617B7076F +:10E0000010F0A61BB70B881F991F5A95A9F780958A +:10E010009095BC01CD010895B7FF04C003D0821BC9 +:10E02000930B089509D0A59F900DB49F900DA49FC8 +:10E03000800D911D11240895A29FB001B39FC001CE +:10E04000A39F700D811D1124911DB29F700D811D24 +:10E050001124911D0895CF92DF92EF92FF92CF93FA +:10E06000DF93CDB7DEB72A97CDBFDEBF89879A870A +:10E07000A985BA852D913D914D915C9129833A8373 +:10E080004B835C83232B242B252B41F424E239ED95 +:10E090004BE557E029833A834B835C8369817A811E +:10E0A0008B819C812DE133EF41E050E018D769016D +:10E0B0007A01A7EAB1E49B01AC01B4DF69837A83FA +:10E0C0008B839C83ACEEB4EFA7019601A7DF9B0185 +:10E0D000AC0189819A81AB81BC81820F931FA41FFF +:10E0E000B51FB7FF03C00197A109B048E985FA85BC +:10E0F00080839183A283B3839F772A96CDBFDEBFAF +:10E10000DF91CF91FF90EF90DF90CF900895A3CF54 +:10E1100080E090E2A0CFB0E0A0E080930020909358 +:10E120000120A0930220B09303200895FB01DC019D +:10E1300002C005900D9241505040D8F70895FB0160 +:10E14000DC018D9181341CF08B350CF4805E65917F +:10E1500061341CF06B350CF4605E861B611189F331 +:10E16000990B0895FB01DC018D9105908019011038 +:10E17000D9F3990B0895FB01DC014150504088F020 +:10E180008D9181341CF08B350CF4805E6591613487 +:10E190001CF06B350CF4605E861B611171F3990BFA +:10E1A0000895881BFCCFFB01DC014150504048F032 +:10E1B00005900D920020C9F701C01D9241505040BA +:10E1C000E0F70895FB01DC0104C08D9101908019F6 +:10E1D00021F441505040C8F7881B990B0895FB016A +:10E1E000DC0102C001900D9241505040D8F70895D3 +:10E1F0006817790768F4FB01DC01E40FF51FA40F31 +:10E20000B51F02C002900E9241505040D8F70895B9 +:10E21000E6CFDC0101C06D9341505040E0F7089516 +:10E22000FC018191861721F08823D9F79927089559 +:10E230003197CF0108950F931F93CF93DF93CDB7FD +:10E24000DEB72E97CDBFDEBF0E891F89888D998DD1 +:10E250002EE02C8309831A8397FF02C080E090E8A8 +:10E2600001978D839E83AE01445E5F4F6A8D7B8DE7 +:10E27000CE01019631D04D815E8157FD0AC02F81BC +:10E280003885421753070CF49A01020F131FF80147 +:10E2900010822E96CDBFDEBFDF91CF911F910F91DF +:10E2A0000895CF93DF93CDB7DEB72E97CDBFDEBFF6 +:10E2B0008DE08C838C899D8989839A83AE01485E29 +:10E2C0005F4F6E897F89CE0101968ED32E96CDBF8A +:10E2D000DEBFDF91CF9108952F923F924F925F92D0 +:10E2E0006F927F928F929F92AF92BF92CF92DF9266 +:10E2F000EF92FF920F931F93CF93DF93CDB7DEB7CB +:10E300002F97CDBFDEBF7C013B018A01DC01169651 +:10E310001D921C92179713968C9181FFC8C19AE0A9 +:10E32000292EFE0131964F01D70113969C91F301DE +:10E3300093FD859193FF81913F01882309F43EC1AC +:10E34000853239F493FD859193FF81913F018532A8 +:10E3500021F4B70190E0DAD4E7CFB12C412C512C55 +:10E36000BFE1B51538F08B3209F188F4803201F144 +:10E37000833221F157FC3AC020ED280F2A3040F5B6 +:10E3800056FE1FC0B29C200D1124B22E06C08D3245 +:10E3900091F0803379F7689450F8F30193FD8591FB +:10E3A00093FF81913F018111DBCF20C0689451F828 +:10E3B000689452F8F2CF689453F8EFCF689454F809 +:10E3C000ECCF429C200D1124422E689455F8E5CFE5 +:10E3D0008E3229F456FCF2C0689456F8DECF8C36A3 +:10E3E00019F4689457F8D9CF8836B9F2982F9F7DE1 +:10E3F00095549330B8F0833691F18337B1F183357A +:10E4000009F056C0D801CD90DD908D016B2D70E0E4 +:10E4100056FC02C06FEF7FEFC60124D45C01689404 +:10E4200057F80AC00C5F1F4FEFE3E983AA24A394B7 +:10E43000B12C6401E89457F853FC04C04A141B043F +:10E4400009F008F5342CA114B10419F5332009F4AE +:10E450006BCFB70180E290E059D43A94F7CFD8015E +:10E460008C9189830E5F1F4FE1CFF801C190D1904D +:10E470008F016B2D70E056FC02C06FEF7FEFC6017D +:10E48000FCD35C01D7CFB70180E290E03FD44A943F +:10E49000D5CFF60157FC859157FE81916F01B701E9 +:10E4A00090E034D431103A94B1E0AB1AB108CBCF3C +:10E4B000843619F0893609F070C0F80157FE66C03D +:10E4C00061917191819191918F01E52DEF76DE2E11 +:10E4D00097FF09C090958095709561957F4F8F4FFC +:10E4E0009F4F6894D7F82AE030E0A40157D4C82E93 +:10E4F000C818AC2C5D2CD6FE0CC0E89450F8CB1498 +:10E5000040F4D4FE05C0D2FC03C05D2D5E7E552EC6 +:10E51000AB2C54FEA6C0FE01EC0DF11D80818033B2 +:10E5200009F098C0652D697E562E752D7870372EAE +:10E5300053FCA5C050FE9FC0BC2CA41418F44C0C76 +:10E54000B42CBA1854FEA1C0B70180E390E0DED32A +:10E5500052FE08C088E790E051FE02C088E590E0D6 +:10E56000B701D4D3CB1408F49CC0CA94D12C8FEF3C +:10E57000C81AD80AC80CD91CD6018E916D01B701F2 +:10E5800090E0C4D38C149D04B9F760CF6191719170 +:10E59000072E000C880B990B97CFD52CE894D4F854 +:10E5A0002AE030E08537C9F1F52DF97FDF2E80377D +:10E5B00039F1E8F4883539F18F3669F1F701868150 +:10E5C00097812F96CDBFDEBFDF91CF911F910F9125 +:10E5D000FF90EF90DF90CF90BF90AF909F908F9083 +:10E5E0007F906F905F904F903F902F900895883765 +:10E5F00029F7D4FE02C06894D2F820E130E00DC0C3 +:10E600006894D4F8F6CF54FE03C02F2F2660D22E84 +:10E6100020E132E002C028E030E0F801D7FE14C06B +:10E6200041915191619171914C875D876E877F8790 +:10E630008F01A4016C857D858E859F85AFD3C82E03 +:10E64000C818E894D7F855CF81919191AC0170E04A +:10E6500060E0EACF52FC02C0A39467CFA394A394D6 +:10E6600064CF852D867809F460CFF6CFB70180E2BC +:10E6700090E04CD3A394A414C8F3312C63CF342C72 +:10E680003A18A41408F45ECFF8CF852D867809F4E3 +:10E6900069CF8BE251FE80E257FC8DE2B70190E03A +:10E6A00060CFB70180E390E031D3BA945BCF8FEFB6 +:10E6B0009FEF87CFFC01CA01DB0120FD08C023FDCD +:10E6C00005C022FF02C0B383A28391838083089593 +:10E6D000CF92DF92EF92FF92CF93DF9300D00F9211 +:10E6E000CDB7DEB76B017C0183E044FD10C084E050 +:10E6F00046FD0DC0D601F701AA0FBB1FEE1FFF1F7D +:10E700001094D1F7CA0EDB1EEE1EFF1E81E0CC0C6A +:10E71000DD1CEE1CFF1C8150D1F7D701C601820F12 +:10E72000911DA11DB11DBC01CD012496CDBFDEBF41 +:10E73000DF91CF91FF90EF90DF90CF9008950F93EE +:10E740001F93CF93DF938C01C801A2D2EC0197FDF8 +:10E7500006C075D2892BC1F7B801CE0107D3CE010F +:10E76000DF91CF911F910F910895AF92BF92CF92F9 +:10E77000DF92EF92FF920F931F93CF93DF938C0161 +:10E78000C62F5A01F22E84D2FC019927EB3221F0D8 +:10E790008D97A9F46894F7F8C15061F480E0DF9197 +:10E7A000CF911F910F91FF90EF90DF90CF90BF908E +:10E7B000AF900895C8016CD2FC0197FDEFCFDF2D1B +:10E7C000DD7F8F2D8073F9F4E033E9F4EE24EA94D1 +:10E7D000EC0EC13081F0C8015BD2FC0197FD0BC08B +:10E7E0008F7D883561F4D264C25029F0C80150D2BF +:10E7F000FC0197FF08C0C12CD12C76011BC0F6FE8E +:10E800002AC0D260CE2DC12CD12C760120ED2E0F46 +:10E81000283020F1D4FD09C02A3000F1D6FF05C010 +:10E820002F7D8FEE820F8630C0F0B801CF019ED2CF +:10E83000D1FFB4CFD7FF08C0F094E094D094C09437 +:10E84000C11CD11CE11CF11C2D2FB701A601C50173 +:10E8500031DF81E0A4CFD261D5CF27504D2FC70142 +:10E86000B60136DF6B017C01D260C15019F3C801DB +:10E870000FD2FC0197FFCACFDBCF8F929F92AF924E +:10E88000BF92CF92DF92EF92FF920F931F93CF939D +:10E89000DF93CDB7DEB7A097CDBFDEBF6C01962E5C +:10E8A0007A01CE0101965C0180E2F50111928A9510 +:10E8B000E9F7F6018380890150E040E0B0E020E014 +:10E8C000A0E061E070E0F80183FC959183FE9191F6 +:10E8D000892F8F01911113C010E000E0C801A096AC +:10E8E000CDBFDEBFDF91CF911F910F91FF90EF90D1 +:10E8F000DF90CF90BF90AF909F908F9008959E35FE +:10E9000019F44115510531F1A4171506ECF49D35A4 +:10E9100049F19D32C9F4222309F1E82FE695E695E5 +:10E92000E695EA0DFB2DF11D982F97709B0101C014 +:10E93000220F9A95EAF79081292B20838B1781F07B +:10E940008B1730F48F5FE9CF2111E7CFB92FE5CFD7 +:10E950008150E3CFA1E04F5F5F4FB5CF21E0FBCF08 +:10E9600020E0F9CF222319F08E8180628E83AA23C2 +:10E9700061F0F5019E012F5D3F4F8081DF013196EF +:10E9800080958C93E217F307C1F788248394C6011E +:10E990007FD197FD15C0E82FE695E695E695EA0D3F +:10E9A000FB2DF11D208130E0AC014770552702C0DE +:10E9B000359527954A95E2F720FD05C0B601D6D1D9 +:10E9C000882059F089CFE114F10419F0F7018193FF +:10E9D0007F019A94812C9110DACFE114F10409F4AB +:10E9E0007DCFF70110827ACF6F927F928F929F92A4 +:10E9F000AF92BF92CF92DF92EF92FF920F931F934D +:10EA0000CF93DF9300D000D0CDB7DEB75C016D832C +:10EA10007E83742E652EDC0116961D921C9217972C +:10EA2000C12CD5011396FC90ED81FE81F3FC8591FC +:10EA3000F3FE8191182FED83FE838823D9F090E0B7 +:10EA4000FED0892B19F0C5017ADEEBCF153251F4D7 +:10EA5000ED81FE81F3FC1591F3FE1191ED83FE83B0 +:10EA6000153259F4C50114D197FD9CC01817C9F28D +:10EA7000B5017CD18C2D90E099C000E01A3249F4A8 +:10EA8000ED81FE81F3FC1591F3FE1191ED83FE8380 +:10EA900001E0D12C20ED210F2A3050F101FF3FC0C1 +:10EAA000DD2041F3183609F43DC01C3609F446C098 +:10EAB000112301F3612F70E084E79FE0C8D0892B18 +:10EAC000C9F2F12CE12C00FD06C0E72DF62DE190F6 +:10EAD000F1907E2E6F2E1E3609F03AC0D5011696A3 +:10EAE0004D915C9170E060E0202FC701E3DD99CF8C +:10EAF00002608D2D90E0B0E0A0E089839A83AB8323 +:10EB0000BC8340E2BC01CD01E3DDD62EED81FE8168 +:10EB1000F3FC1591F3FE1191ED83FE83BBCFDD2451 +:10EB2000DA94C0CFED81FE81F3FC1591F3FE1191D3 +:10EB3000ED83FE83183609F0BBCF08600460ED81D9 +:10EB4000FE81F3FC1591F3FE1191ED83FE83B0CFAE +:10EB50001336A9F401FD02C0DD24D394C50198D079 +:10EB600097FD20C0E114F10419F0F70181937F01B2 +:10EB7000DA94D110F3CF00FD54CFC39452CF1B359C +:10EB800039F52D813E81A7016D2DC50176DE8D837E +:10EB90009E83ED81FE81EF2B71F7F50183818073F8 +:10EBA00009F468CF8FEF9FEFC11064CF2696CDBFD9 +:10EBB000DEBFDF91CF911F910F91FF90EF90DF901B +:10EBC000CF90BF90AF909F908F907F906F9008955F +:10EBD000C501B5DD97FDE6CF1F3679F130F4143667 +:10EBE00041F0193639F0006405C01337A1F015372C +:10EBF000D1F70062202FA7016D2DC501B6DD81116F +:10EC0000BACFCBCFE114F10419F0F70181927F0163 +:10EC1000DA94DD2059F0C5013BD04C0197FD06C0C8 +:10EC20000ED0892B79F3B501C401A0D0E114F10411 +:10EC300009F4A1CFD7011C929ECF0061DBCF9111C7 +:10EC40000BC1803219F089508550D0F70895FC012E +:10EC50000590061621F00020D9F7C00108953197DC +:10EC6000CF010895FC010590615070400110D8F764 +:10EC7000809590958E0F9F1F0895FC016150704004 +:10EC800001900110D8F7809590958E0F9F1F0895E1 +:10EC9000CF93DF93EC018B8180FF33C086FF0CC0E4 +:10ECA0008F7B8B838E819F8101968E839F838A8148 +:10ECB00090E0DF91CF91089582FF15C0E881F9813E +:10ECC0009081292F092E000C330B80629923C1F00B +:10ECD0003196E883F9838E819F8101968E839F838D +:10ECE000C9019927E6CFEA85FB85CE0119959C01DC +:10ECF00097FFF1CF8B812F3F3F4F31F090E2892B6F +:10ED00008B838FEF9FEFD5CF90E1F9CF0F931F93B8 +:10ED1000CF93DF93182F092FEB018B8181FD09C061 +:10ED20001FEF0FEF812F902FDF91CF911F910F9148 +:10ED3000089582FF14C02E813F818C819D81281708 +:10ED400039073CF4E881F981CF01019688839983E2 +:10ED500010838E819F8101968E839F83E3CFE88508 +:10ED6000F985812F1995892BA1F3DACFFB01238136 +:10ED700020FF11C026FD0FC08F3F980771F08283DE +:10ED80002F7D2064238326813781215031092683FA +:10ED90003783992708958FEF9FEF0895FA01AA27E7 +:10EDA000283051F1203181F1E8946F936E7F6E5FCE +:10EDB0007F4F8F4F9F4FAF4FB1E03ED0B4E03CD07C +:10EDC000670F781F891F9A1FA11D680F791F8A1F5F +:10EDD000911DA11D6A0F711D811D911DA11D20D0C6 +:10EDE00009F468943F912AE0269F11243019305D80 +:10EDF0003193DEF6CF010895462F4770405D419371 +:10EE0000B3E00FD0C9F7F6CF462F4F70405D4A33BD +:10EE100018F0495D31FD4052419302D0A9F7EACF85 +:10EE2000B4E0A6959795879577956795BA95C9F7B4 +:10EE300000976105710508959B01AC010A2E0694A7 +:10EE40005795479537952795BA95C9F7620F731F60 +:10EE5000841F951FA01D089599278827089503D022 +:10EE6000808199270895E0ECF1E0378537FDFDCFEB +:10EE7000348538603487FC01E050F04F0895262F28 +:10EE8000F2DF0080021611F008D001970197089573 +:10EE90000196272FF5DFF3CF262FE0ECF1E0378541 +:10EEA00037FDFDCF3485377F3487378531FF09C083 +:10EEB00036E3328738ED34BF31E03387378537FDAD +:10EEC000FDCF33E33287808391831282248325E34D +:10EED000228728ED31E024BF338701960895052E5F +:10EEE00097FB16F400940FD057FD05D014D007FC03 +:10EEF00002D046F408C050954095309521953F4F7B +:10EF00004F4F5F4F089590958095709561957F4F15 +:10EF10008F4F9F4F0895A1E21A2EAA1BBB1BFD0124 +:10EF20000DC0AA1FBB1FEE1FFF1FA217B307E407E8 +:10EF3000F50720F0A21BB30BE40BF50B661F771F40 +:10EF4000881F991F1A9469F7609570958095909520 +:0EEF50009B01AC01BD01CF010895F894FFCFE5 +:10EF5E0001000000D0180C068A900AFF030301FF7F +:10EF6E002006060303040404031502400F00831059 +:10EF7E0000000104100000018208000001000000E2 +:10EF8E000000000000000000000000000000000073 +:10EF9E0000000000000000003908080060080800AA +:10EFAE00D508080087080800FC080800AE0808000D +:10EFBE000000000000000000000000000000000043 +:10EFCE00000000D27600008501000000008D0102D5 +:10EFDE000408102040801B3652096AD53036A538F9 +:10EFEE00BF40A39E81F3D7FB7CE339829B2FFF8723 +:10EFFE00348E4344C4DEE9CB547B9432A6C2233D07 +:10F00E00EE4C950B42FAC34E082EA16628D924B2B7 +:10F01E00765BA2496D8BD12572F8F66486689816D8 +:10F02E00D4A45CCC5D65B6926C704850FDEDB9DA37 +:10F03E005E154657A78D9D8490D8AB008CBCD30A25 +:10F04E00F7E45805B8B34506D02C1E8FCA3F0F0201 +:10F05E00C1AFBD0301138A6B3A9111414F67DCEAD0 +:10F06E0097F2CFCEF0B4E67396AC7422E7AD358549 +:10F07E00E2F937E81C75DF6E47F11A711D29C58953 +:10F08E006FB7620EAA18BE1BFC563E4BC6D2792035 +:10F09E009ADBC0FE78CD5AF41FDDA8338807C7313E +:10F0AE00B11210592780EC5F60517FA919B54A0D36 +:10F0BE002DE57A9F93C99CEFA0E03B4DAE2AF5B0AB +:10F0CE00C8EBBB3C83539961172B047EBA77D626C7 +:10F0DE00E169146355210C7D637C777BF26B6FC500 +:10F0EE003001672BFED7AB76CA82C97DFA5947F03D +:10F0FE00ADD4A2AF9CA472C0B7FD9326363FF7CC19 +:10F10E0034A5E5F171D8311504C723C31896059AB5 +:10F11E00071280E2EB27B27509832C1A1B6E5AA0D8 +:10F12E00523BD6B329E32F8453D100ED20FCB15BC3 +:10F13E006ACBBE394A4C58CFD0EFAAFB434D33852C +:10F14E0045F9027F503C9FA851A3408F929D38F500 +:10F15E00BCB6DA2110FFF3D2CD0C13EC5F97441737 +:10F16E00C4A77E3D645D197360814FDC222A9088AE +:10F17E0046EEB814DE5E0BDBE0323A0A4906245C3A +:10F18E00C2D3AC629195E479E7C8376D8DD54EA99F +:10F19E006C56F4EA657AAE08BA78252E1CA6B4C66B +:10F1AE00E8DD741F4BBD8B8A703EB5664803F60EC4 +:10F1BE00613557B986C11D9EE1F8981169D98E94B3 +:10F1CE009B1E87E9CE5528DF8CA1890DBFE64268CC +:10F1DE0041992D0FB054BB164F4B00434C4F4E452B +:10F1EE0000434C4F4E455F4D465500D2760000858C +:10F1FE00010000000A6E3D0C56401A08471CE13F04 +:10F20E003B6D433D0344456539516F3854033D5AB8 +:10F21E00B53C5C00005F554560353D618A3B64D36B +:10F22E003B6A903C6C0F3E6D4F456E783C6F8A3B4F +:10F23E00710000770000825B4584563DA4133C8824 +:10F24E004945A7A641AA1D46B0F23AB2303ABBF0E4 +:10F25E0042BDB048C0B542C17E42C47245CA65487F +:10F26E00CB5842CC1442CD1848C73841D69839DA1B +:10F27E00D340DC583FDF1D3FE2C938EB053EFC7B37 +:10F28E0038F55F3E0004000000080000001000008A +:10F29E000000ED54025502550F551B55255543558B +:08F2AE00515578557B557E5542 +:020000021000EC +:1010000000000000000000000000000000000000E0 +:1010100000000000000000000000000000000000D0 +:1010200000000000000000000000000000000000C0 +:1010300000000000000000000000000000000000B0 +:1010400000000000000000000000000000000000A0 +:101050000000000000000000000000000000000090 +:101060000000000000000000000000000000000080 +:101070000000000000000000000000000000000070 +:101080000000000000000000000000000000000060 +:101090000000000000000000000000000000000050 +:1010A0000000000000000000000000000000000040 +:1010B0000000000000000000000000000000000030 +:1010C0000000000000000000000000000000000020 +:1010D0000000000000000000000000000000000010 +:1010E0000000000000000000000000000000000000 +:1010F00000000000000000000000000000000000F0 +:1011000000000000000000000000000000000000DF +:1011100000000000000000000000000000000000CF +:1011200000000000000000000000000000000000BF +:1011300000000000000000000000000000000000AF +:10114000000000000000000000000000000000009F +:10115000000000000000000000000000000000008F +:10116000000000000000000000000000000000007F +:10117000000000000000000000000000000000006F +:10118000000000000000000000000000000000005F +:10119000000000000000000000000000000000004F +:1011A000000000000000000000000000000000003F +:1011B000000000000000000000000000000000002F +:1011C000000000000000000000000000000000001F +:1011D000000000000000000000000000000000000F +:1011E00000000000000000000000000000000000FF +:1011F00000000000000000000000000000000000EF +:1012000000000000000000000000000000000000DE +:1012100000000000000000000000000000000000CE +:1012200000000000000000000000000000000000BE +:1012300000000000000000000000000000000000AE +:10124000000000000000000000000000000000009E +:10125000000000000000000000000000000000008E +:10126000000000000000000000000000000000007E +:10127000000000000000000000000000000000006E +:10128000000000000000000000000000000000005E +:10129000000000000000000000000000000000004E +:1012A000000000000000000000000000000000003E +:1012B000000000000000000000000000000000002E +:1012C000000000000000000000000000000000001E +:1012D000000000000000000000000000000000000E +:1012E00000000000000000000000000000000000FE +:1012F00000000000000000000000000000000000EE +:1013000000000000000000000000000000000000DD +:1013100000000000000000000000000000000000CD +:1013200000000000000000000000000000000000BD +:1013300000000000000000000000000000000000AD +:10134000000000000000000000000000000000009D +:10135000000000000000000000000000000000008D +:10136000000000000000000000000000000000007D +:10137000000000000000000000000000000000006D +:10138000000000000000000000000000000000005D +:10139000000000000000000000000000000000004D +:1013A000000000000000000000000000000000003D +:1013B000000000000000000000000000000000002D +:1013C000000000000000000000000000000000001D +:1013D000000000000000000000000000000000000D +:1013E00000000000000000000000000000000000FD +:1013F00000000000000000000000000000000000ED +:1014000000000000000000000000000000000000DC +:1014100000000000000000000000000000000000CC +:1014200000000000000000000000000000000000BC +:1014300000000000000000000000000000000000AC +:10144000000000000000000000000000000000009C +:10145000000000000000000000000000000000008C +:10146000000000000000000000000000000000007C +:10147000000000000000000000000000000000006C +:10148000000000000000000000000000000000005C +:10149000000000000000000000000000000000004C +:1014A000000000000000000000000000000000003C +:1014B000000000000000000000000000000000002C +:1014C000000000000000000000000000000000001C +:1014D000000000000000000000000000000000000C +:1014E00000000000000000000000000000000000FC +:1014F00000000000000000000000000000000000EC +:1015000000000000000000000000000000000000DB +:1015100000000000000000000000000000000000CB +:1015200000000000000000000000000000000000BB +:1015300000000000000000000000000000000000AB +:10154000000000000000000000000000000000009B +:10155000000000000000000000000000000000008B +:10156000000000000000000000000000000000007B +:10157000000000000000000000000000000000006B +:10158000000000000000000000000000000000005B +:10159000000000000000000000000000000000004B +:1015A000000000000000000000000000000000003B +:1015B000000000000000000000000000000000002B +:1015C000000000000000000000000000000000001B +:1015D000000000000000000000000000000000000B +:1015E00000000000000000000000000000000000FB +:1015F00000000000000000000000000000000000EB +:1016000000000000000000000000000000000000DA +:1016100000000000000000000000000000000000CA +:1016200000000000000000000000000000000000BA +:1016300000000000000000000000000000000000AA +:10164000000000000000000000000000000000009A +:10165000000000000000000000000000000000008A +:10166000000000000000000000000000000000007A +:10167000000000000000000000000000000000006A +:10168000000000000000000000000000000000005A +:10169000000000000000000000000000000000004A +:1016A000000000000000000000000000000000003A +:1016B000000000000000000000000000000000002A +:1016C000000000000000000000000000000000001A +:1016D000000000000000000000000000000000000A +:1016E00000000000000000000000000000000000FA +:1016F00000000000000000000000000000000000EA +:1017000000000000000000000000000000000000D9 +:1017100000000000000000000000000000000000C9 +:1017200000000000000000000000000000000000B9 +:1017300000000000000000000000000000000000A9 +:101740000000000000000000000000000000000099 +:101750000000000000000000000000000000000089 +:101760000000000000000000000000000000000079 +:101770000000000000000000000000000000000069 +:101780000000000000000000000000000000000059 +:101790000000000000000000000000000000000049 +:1017A0000000000000000000000000000000000039 +:1017B0000000000000000000000000000000000029 +:1017C0000000000000000000000000000000000019 +:1017D0000000000000000000000000000000000009 +:1017E00000000000000000000000000000000000F9 +:1017F00000000000000000000000000000000000E9 +:1018000000000000000000000000000000000000D8 +:1018100000000000000000000000000000000000C8 +:1018200000000000000000000000000000000000B8 +:1018300000000000000000000000000000000000A8 +:101840000000000000000000000000000000000098 +:101850000000000000000000000000000000000088 +:101860000000000000000000000000000000000078 +:101870000000000000000000000000000000000068 +:101880000000000000000000000000000000000058 +:101890000000000000000000000000000000000048 +:1018A0000000000000000000000000000000000038 +:1018B0000000000000000000000000000000000028 +:1018C0000000000000000000000000000000000018 +:1018D0000000000000000000000000000000000008 +:1018E00000000000000000000000000000000000F8 +:1018F00000000000000000000000000000000000E8 +:1019000000000000000000000000000000000000D7 +:1019100000000000000000000000000000000000C7 +:1019200000000000000000000000000000000000B7 +:1019300000000000000000000000000000000000A7 +:101940000000000000000000000000000000000097 +:101950000000000000000000000000000000000087 +:101960000000000000000000000000000000000077 +:101970000000000000000000000000000000000067 +:101980000000000000000000000000000000000057 +:101990000000000000000000000000000000000047 +:1019A0000000000000000000000000000000000037 +:1019B0000000000000000000000000000000000027 +:1019C0000000000000000000000000000000000017 +:1019D0000000000000000000000000000000000007 +:1019E00000000000000000000000000000000000F7 +:1019F00000000000000000000000000000000000E7 +:101A000000000000000000000000000000000000D6 +:101A100000000000000000000000000000000000C6 +:101A200000000000000000000000000000000000B6 +:101A300000000000000000000000000000000000A6 +:101A40000000000000000000000000000000000096 +:101A50000000000000000000000000000000000086 +:101A60000000000000000000000000000000000076 +:101A70000000000000000000000000000000000066 +:101A80000000000000000000000000000000000056 +:101A90000000000000000000000000000000000046 +:101AA0000000000000000000000000000000000036 +:101AB0000000000000000000000000000000000026 +:101AC0000000000000000000000000000000000016 +:101AD0000000000000000000000000000000000006 +:101AE00000000000000000000000000000000000F6 +:101AF00000000000000000000000000000000000E6 +:101B000000000000000000000000000000000000D5 +:101B100000000000000000000000000000000000C5 +:101B200000000000000000000000000000000000B5 +:101B300000000000000000000000000000000000A5 +:101B40000000000000000000000000000000000095 +:101B50000000000000000000000000000000000085 +:101B60000000000000000000000000000000000075 +:101B70000000000000000000000000000000000065 +:101B80000000000000000000000000000000000055 +:101B90000000000000000000000000000000000045 +:101BA0000000000000000000000000000000000035 +:101BB0000000000000000000000000000000000025 +:101BC0000000000000000000000000000000000015 +:101BD0000000000000000000000000000000000005 +:101BE00000000000000000000000000000000000F5 +:101BF00000000000000000000000000000000000E5 +:101C000000000000000000000000000000000000D4 +:101C100000000000000000000000000000000000C4 +:101C200000000000000000000000000000000000B4 +:101C300000000000000000000000000000000000A4 +:101C40000000000000000000000000000000000094 +:101C50000000000000000000000000000000000084 +:101C60000000000000000000000000000000000074 +:101C70000000000000000000000000000000000064 +:101C80000000000000000000000000000000000054 +:101C90000000000000000000000000000000000044 +:101CA0000000000000000000000000000000000034 +:101CB0000000000000000000000000000000000024 +:101CC0000000000000000000000000000000000014 +:101CD0000000000000000000000000000000000004 +:101CE00000000000000000000000000000000000F4 +:101CF00000000000000000000000000000000000E4 +:101D000000000000000000000000000000000000D3 +:101D100000000000000000000000000000000000C3 +:101D200000000000000000000000000000000000B3 +:101D300000000000000000000000000000000000A3 +:101D40000000000000000000000000000000000093 +:101D50000000000000000000000000000000000083 +:101D60000000000000000000000000000000000073 +:101D70000000000000000000000000000000000063 +:101D80000000000000000000000000000000000053 +:101D90000000000000000000000000000000000043 +:101DA0000000000000000000000000000000000033 +:101DB0000000000000000000000000000000000023 +:101DC0000000000000000000000000000000000013 +:101DD0000000000000000000000000000000000003 +:101DE00000000000000000000000000000000000F3 +:101DF00000000000000000000000000000000000E3 +:101E000000000000000000000000000000000000D2 +:101E100000000000000000000000000000000000C2 +:101E200000000000000000000000000000000000B2 +:101E300000000000000000000000000000000000A2 +:101E40000000000000000000000000000000000092 +:101E50000000000000000000000000000000000082 +:101E60000000000000000000000000000000000072 +:101E70000000000000000000000000000000000062 +:101E80000000000000000000000000000000000052 +:101E90000000000000000000000000000000000042 +:101EA0000000000000000000000000000000000032 +:101EB0000000000000000000000000000000000022 +:101EC0000000000000000000000000000000000012 +:101ED0000000000000000000000000000000000002 +:101EE00000000000000000000000000000000000F2 +:101EF00000000000000000000000000000000000E2 +:101F000000000000000000000000000000000000D1 +:101F100000000000000000000000000000000000C1 +:101F200000000000000000000000000000000000B1 +:101F300000000000000000000000000000000000A1 +:101F40000000000000000000000000000000000091 +:101F50000000000000000000000000000000000081 +:101F60000000000000000000000000000000000071 +:101F70000000000000000000000000000000000061 +:101F80000000000000000000000000000000000051 +:101F90000000000000000000000000000000000041 +:101FA0000000000000000000000000000000000031 +:101FB0000000000000000000000000000000000021 +:101FC0000000000000000000000000000000000011 +:101FD0000000000000000000000000000000000001 +:101FE00000000000000000000000000000000000F1 +:101FF00000000000000000000000000000000000E1 +:1020000000000000000000000000000000000000D0 +:1020100000000000000000000000000000000000C0 +:1020200000000000000000000000000000000000B0 +:1020300000000000000000000000000000000000A0 +:102040000000000000000000000000000000000090 +:102050000000000000000000000000000000000080 +:102060000000000000000000000000000000000070 +:102070000000000000000000000000000000000060 +:102080000000000000000000000000000000000050 +:102090000000000000000000000000000000000040 +:1020A0000000000000000000000000000000000030 +:1020B0000000000000000000000000000000000020 +:1020C0000000000000000000000000000000000010 +:1020D0000000000000000000000000000000000000 +:1020E00000000000000000000000000000000000F0 +:1020F00000000000000000000000000000000000E0 +:1021000000000000000000000000000000000000CF +:1021100000000000000000000000000000000000BF +:1021200000000000000000000000000000000000AF +:10213000000000000000000000000000000000009F +:10214000000000000000000000000000000000008F +:10215000000000000000000000000000000000007F +:10216000000000000000000000000000000000006F +:10217000000000000000000000000000000000005F +:10218000000000000000000000000000000000004F +:10219000000000000000000000000000000000003F +:1021A000000000000000000000000000000000002F +:1021B000000000000000000000000000000000001F +:1021C000000000000000000000000000000000000F +:1021D00000000000000000000000000000000000FF +:1021E00000000000000000000000000000000000EF +:1021F00000000000000000000000000000000000DF +:1022000000000000000000000000000000000000CE +:1022100000000000000000000000000000000000BE +:1022200000000000000000000000000000000000AE +:10223000000000000000000000000000000000009E +:10224000000000000000000000000000000000008E +:10225000000000000000000000000000000000007E +:10226000000000000000000000000000000000006E +:10227000000000000000000000000000000000005E +:10228000000000000000000000000000000000004E +:10229000000000000000000000000000000000003E +:1022A000000000000000000000000000000000002E +:1022B000000000000000000000000000000000001E +:1022C000000000000000000000000000000000000E +:1022D00000000000000000000000000000000000FE +:1022E00000000000000000000000000000000000EE +:1022F00000000000000000000000000000000000DE +:1023000000000000000000000000000000000000CD +:1023100000000000000000000000000000000000BD +:1023200000000000000000000000000000000000AD +:10233000000000000000000000000000000000009D +:10234000000000000000000000000000000000008D +:10235000000000000000000000000000000000007D +:10236000000000000000000000000000000000006D +:10237000000000000000000000000000000000005D +:10238000000000000000000000000000000000004D +:10239000000000000000000000000000000000003D +:1023A000000000000000000000000000000000002D +:1023B000000000000000000000000000000000001D +:1023C000000000000000000000000000000000000D +:1023D00000000000000000000000000000000000FD +:1023E00000000000000000000000000000000000ED +:1023F00000000000000000000000000000000000DD +:1024000000000000000000000000000000000000CC +:1024100000000000000000000000000000000000BC +:1024200000000000000000000000000000000000AC +:10243000000000000000000000000000000000009C +:10244000000000000000000000000000000000008C +:10245000000000000000000000000000000000007C +:10246000000000000000000000000000000000006C +:10247000000000000000000000000000000000005C +:10248000000000000000000000000000000000004C +:10249000000000000000000000000000000000003C +:1024A000000000000000000000000000000000002C +:1024B000000000000000000000000000000000001C +:1024C000000000000000000000000000000000000C +:1024D00000000000000000000000000000000000FC +:1024E00000000000000000000000000000000000EC +:1024F00000000000000000000000000000000000DC +:1025000000000000000000000000000000000000CB +:1025100000000000000000000000000000000000BB +:1025200000000000000000000000000000000000AB +:10253000000000000000000000000000000000009B +:10254000000000000000000000000000000000008B +:10255000000000000000000000000000000000007B +:10256000000000000000000000000000000000006B +:10257000000000000000000000000000000000005B +:10258000000000000000000000000000000000004B +:10259000000000000000000000000000000000003B +:1025A000000000000000000000000000000000002B +:1025B000000000000000000000000000000000001B +:1025C000000000000000000000000000000000000B +:1025D00000000000000000000000000000000000FB +:1025E00000000000000000000000000000000000EB +:1025F00000000000000000000000000000000000DB +:1026000000000000000000000000000000000000CA +:1026100000000000000000000000000000000000BA +:1026200000000000000000000000000000000000AA +:10263000000000000000000000000000000000009A +:10264000000000000000000000000000000000008A +:10265000000000000000000000000000000000007A +:10266000000000000000000000000000000000006A +:10267000000000000000000000000000000000005A +:10268000000000000000000000000000000000004A +:10269000000000000000000000000000000000003A +:1026A000000000000000000000000000000000002A +:1026B000000000000000000000000000000000001A +:1026C000000000000000000000000000000000000A +:1026D00000000000000000000000000000000000FA +:1026E00000000000000000000000000000000000EA +:1026F00000000000000000000000000000000000DA +:1027000000000000000000000000000000000000C9 +:1027100000000000000000000000000000000000B9 +:1027200000000000000000000000000000000000A9 +:102730000000000000000000000000000000000099 +:102740000000000000000000000000000000000089 +:102750000000000000000000000000000000000079 +:102760000000000000000000000000000000000069 +:102770000000000000000000000000000000000059 +:102780000000000000000000000000000000000049 +:102790000000000000000000000000000000000039 +:1027A0000000000000000000000000000000000029 +:1027B0000000000000000000000000000000000019 +:1027C0000000000000000000000000000000000009 +:1027D00000000000000000000000000000000000F9 +:1027E00000000000000000000000000000000000E9 +:1027F00000000000000000000000000000000000D9 +:1028000000000000000000000000000000000000C8 +:1028100000000000000000000000000000000000B8 +:1028200000000000000000000000000000000000A8 +:102830000000000000000000000000000000000098 +:102840000000000000000000000000000000000088 +:102850000000000000000000000000000000000078 +:102860000000000000000000000000000000000068 +:102870000000000000000000000000000000000058 +:102880000000000000000000000000000000000048 +:102890000000000000000000000000000000000038 +:1028A0000000000000000000000000000000000028 +:1028B0000000000000000000000000000000000018 +:1028C0000000000000000000000000000000000008 +:1028D00000000000000000000000000000000000F8 +:1028E00000000000000000000000000000000000E8 +:1028F00000000000000000000000000000000000D8 +:1029000000000000000000000000000000000000C7 +:1029100000000000000000000000000000000000B7 +:1029200000000000000000000000000000000000A7 +:102930000000000000000000000000000000000097 +:102940000000000000000000000000000000000087 +:102950000000000000000000000000000000000077 +:102960000000000000000000000000000000000067 +:102970000000000000000000000000000000000057 +:102980000000000000000000000000000000000047 +:102990000000000000000000000000000000000037 +:1029A0000000000000000000000000000000000027 +:1029B0000000000000000000000000000000000017 +:1029C0000000000000000000000000000000000007 +:1029D00000000000000000000000000000000000F7 +:1029E00000000000000000000000000000000000E7 +:1029F00000000000000000000000000000000000D7 +:102A000000000000000000000000000000000000C6 +:102A100000000000000000000000000000000000B6 +:102A200000000000000000000000000000000000A6 +:102A30000000000000000000000000000000000096 +:102A40000000000000000000000000000000000086 +:102A50000000000000000000000000000000000076 +:102A60000000000000000000000000000000000066 +:102A70000000000000000000000000000000000056 +:102A80000000000000000000000000000000000046 +:102A90000000000000000000000000000000000036 +:102AA0000000000000000000000000000000000026 +:102AB0000000000000000000000000000000000016 +:102AC0000000000000000000000000000000000006 +:102AD00000000000000000000000000000000000F6 +:102AE00000000000000000000000000000000000E6 +:102AF00000000000000000000000000000000000D6 +:102B000000000000000000000000000000000000C5 +:102B100000000000000000000000000000000000B5 +:102B200000000000000000000000000000000000A5 +:102B30000000000000000000000000000000000095 +:102B40000000000000000000000000000000000085 +:102B50000000000000000000000000000000000075 +:102B60000000000000000000000000000000000065 +:102B70000000000000000000000000000000000055 +:102B80000000000000000000000000000000000045 +:102B90000000000000000000000000000000000035 +:102BA0000000000000000000000000000000000025 +:102BB0000000000000000000000000000000000015 +:102BC0000000000000000000000000000000000005 +:102BD00000000000000000000000000000000000F5 +:102BE00000000000000000000000000000000000E5 +:102BF00000000000000000000000000000000000D5 +:102C000000000000000000000000000000000000C4 +:102C100000000000000000000000000000000000B4 +:102C200000000000000000000000000000000000A4 +:102C30000000000000000000000000000000000094 +:102C40000000000000000000000000000000000084 +:102C50000000000000000000000000000000000074 +:102C60000000000000000000000000000000000064 +:102C70000000000000000000000000000000000054 +:102C80000000000000000000000000000000000044 +:102C90000000000000000000000000000000000034 +:102CA0000000000000000000000000000000000024 +:102CB0000000000000000000000000000000000014 +:102CC0000000000000000000000000000000000004 +:102CD00000000000000000000000000000000000F4 +:102CE00000000000000000000000000000000000E4 +:102CF00000000000000000000000000000000000D4 +:102D000000000000000000000000000000000000C3 +:102D100000000000000000000000000000000000B3 +:102D200000000000000000000000000000000000A3 +:102D30000000000000000000000000000000000093 +:102D40000000000000000000000000000000000083 +:102D50000000000000000000000000000000000073 +:102D60000000000000000000000000000000000063 +:102D70000000000000000000000000000000000053 +:102D80000000000000000000000000000000000043 +:102D90000000000000000000000000000000000033 +:102DA0000000000000000000000000000000000023 +:102DB0000000000000000000000000000000000013 +:102DC0000000000000000000000000000000000003 +:102DD00000000000000000000000000000000000F3 +:102DE00000000000000000000000000000000000E3 +:102DF00000000000000000000000000000000000D3 +:102E000000000000000000000000000000000000C2 +:102E100000000000000000000000000000000000B2 +:102E200000000000000000000000000000000000A2 +:102E30000000000000000000000000000000000092 +:102E40000000000000000000000000000000000082 +:102E50000000000000000000000000000000000072 +:102E60000000000000000000000000000000000062 +:102E70000000000000000000000000000000000052 +:102E80000000000000000000000000000000000042 +:102E90000000000000000000000000000000000032 +:102EA0000000000000000000000000000000000022 +:102EB0000000000000000000000000000000000012 +:102EC0000000000000000000000000000000000002 +:102ED00000000000000000000000000000000000F2 +:102EE00000000000000000000000000000000000E2 +:102EF00000000000000000000000000000000000D2 +:102F000000000000000000000000000000000000C1 +:102F100000000000000000000000000000000000B1 +:102F200000000000000000000000000000000000A1 +:102F30000000000000000000000000000000000091 +:102F40000000000000000000000000000000000081 +:102F50000000000000000000000000000000000071 +:102F60000000000000000000000000000000000061 +:102F70000000000000000000000000000000000051 +:102F80000000000000000000000000000000000041 +:102F90000000000000000000000000000000000031 +:102FA0000000000000000000000000000000000021 +:102FB0000000000000000000000000000000000011 +:102FC0000000000000000000000000000000000001 +:102FD00000000000000000000000000000000000F1 +:102FE00000000000000000000000000000000000E1 +:102FF00000000000000000000000000000000000D1 +:1030000000000000000000000000000000000000C0 +:1030100000000000000000000000000000000000B0 +:1030200000000000000000000000000000000000A0 +:103030000000000000000000000000000000000090 +:103040000000000000000000000000000000000080 +:103050000000000000000000000000000000000070 +:103060000000000000000000000000000000000060 +:103070000000000000000000000000000000000050 +:103080000000000000000000000000000000000040 +:103090000000000000000000000000000000000030 +:1030A0000000000000000000000000000000000020 +:1030B0000000000000000000000000000000000010 +:1030C0000000000000000000000000000000000000 +:1030D00000000000000000000000000000000000F0 +:1030E00000000000000000000000000000000000E0 +:1030F00000000000000000000000000000000000D0 +:1031000000000000000000000000000000000000BF +:1031100000000000000000000000000000000000AF +:10312000000000000000000000000000000000009F +:10313000000000000000000000000000000000008F +:10314000000000000000000000000000000000007F +:10315000000000000000000000000000000000006F +:10316000000000000000000000000000000000005F +:10317000000000000000000000000000000000004F +:10318000000000000000000000000000000000003F +:10319000000000000000000000000000000000002F +:1031A000000000000000000000000000000000001F +:1031B000000000000000000000000000000000000F +:1031C00000000000000000000000000000000000FF +:1031D00000000000000000000000000000000000EF +:1031E00000000000000000000000000000000000DF +:1031F00000000000000000000000000000000000CF +:1032000000000000000000000000000000000000BE +:1032100000000000000000000000000000000000AE +:10322000000000000000000000000000000000009E +:10323000000000000000000000000000000000008E +:10324000000000000000000000000000000000007E +:10325000000000000000000000000000000000006E +:10326000000000000000000000000000000000005E +:10327000000000000000000000000000000000004E +:10328000000000000000000000000000000000003E +:10329000000000000000000000000000000000002E +:1032A000000000000000000000000000000000001E +:1032B000000000000000000000000000000000000E +:1032C00000000000000000000000000000000000FE +:1032D00000000000000000000000000000000000EE +:1032E00000000000000000000000000000000000DE +:1032F00000000000000000000000000000000000CE +:1033000000000000000000000000000000000000BD +:1033100000000000000000000000000000000000AD +:10332000000000000000000000000000000000009D +:10333000000000000000000000000000000000008D +:10334000000000000000000000000000000000007D +:10335000000000000000000000000000000000006D +:10336000000000000000000000000000000000005D +:10337000000000000000000000000000000000004D +:10338000000000000000000000000000000000003D +:10339000000000000000000000000000000000002D +:1033A000000000000000000000000000000000001D +:1033B000000000000000000000000000000000000D +:1033C00000000000000000000000000000000000FD +:1033D00000000000000000000000000000000000ED +:1033E00000000000000000000000000000000000DD +:1033F00000000000000000000000000000000000CD +:1034000000000000000000000000000000000000BC +:1034100000000000000000000000000000000000AC +:10342000000000000000000000000000000000009C +:10343000000000000000000000000000000000008C +:10344000000000000000000000000000000000007C +:10345000000000000000000000000000000000006C +:10346000000000000000000000000000000000005C +:10347000000000000000000000000000000000004C +:10348000000000000000000000000000000000003C +:10349000000000000000000000000000000000002C +:1034A000000000000000000000000000000000001C +:1034B000000000000000000000000000000000000C +:1034C00000000000000000000000000000000000FC +:1034D00000000000000000000000000000000000EC +:1034E00000000000000000000000000000000000DC +:1034F00000000000000000000000000000000000CC +:1035000000000000000000000000000000000000BB +:1035100000000000000000000000000000000000AB +:10352000000000000000000000000000000000009B +:10353000000000000000000000000000000000008B +:10354000000000000000000000000000000000007B +:10355000000000000000000000000000000000006B +:10356000000000000000000000000000000000005B +:10357000000000000000000000000000000000004B +:10358000000000000000000000000000000000003B +:10359000000000000000000000000000000000002B +:1035A000000000000000000000000000000000001B +:1035B000000000000000000000000000000000000B +:1035C00000000000000000000000000000000000FB +:1035D00000000000000000000000000000000000EB +:1035E00000000000000000000000000000000000DB +:1035F00000000000000000000000000000000000CB +:1036000000000000000000000000000000000000BA +:1036100000000000000000000000000000000000AA +:10362000000000000000000000000000000000009A +:10363000000000000000000000000000000000008A +:10364000000000000000000000000000000000007A +:10365000000000000000000000000000000000006A +:10366000000000000000000000000000000000005A +:10367000000000000000000000000000000000004A +:10368000000000000000000000000000000000003A +:10369000000000000000000000000000000000002A +:1036A000000000000000000000000000000000001A +:1036B000000000000000000000000000000000000A +:1036C00000000000000000000000000000000000FA +:1036D00000000000000000000000000000000000EA +:1036E00000000000000000000000000000000000DA +:1036F00000000000000000000000000000000000CA +:1037000000000000000000000000000000000000B9 +:1037100000000000000000000000000000000000A9 +:103720000000000000000000000000000000000099 +:103730000000000000000000000000000000000089 +:103740000000000000000000000000000000000079 +:103750000000000000000000000000000000000069 +:103760000000000000000000000000000000000059 +:103770000000000000000000000000000000000049 +:103780000000000000000000000000000000000039 +:103790000000000000000000000000000000000029 +:1037A0000000000000000000000000000000000019 +:1037B0000000000000000000000000000000000009 +:1037C00000000000000000000000000000000000F9 +:1037D00000000000000000000000000000000000E9 +:1037E00000000000000000000000000000000000D9 +:1037F00000000000000000000000000000000000C9 +:1038000000000000000000000000000000000000B8 +:1038100000000000000000000000000000000000A8 +:103820000000000000000000000000000000000098 +:103830000000000000000000000000000000000088 +:103840000000000000000000000000000000000078 +:103850000000000000000000000000000000000068 +:103860000000000000000000000000000000000058 +:103870000000000000000000000000000000000048 +:103880000000000000000000000000000000000038 +:103890000000000000000000000000000000000028 +:1038A0000000000000000000000000000000000018 +:1038B0000000000000000000000000000000000008 +:1038C00000000000000000000000000000000000F8 +:1038D00000000000000000000000000000000000E8 +:1038E00000000000000000000000000000000000D8 +:1038F00000000000000000000000000000000000C8 +:1039000000000000000000000000000000000000B7 +:1039100000000000000000000000000000000000A7 +:103920000000000000000000000000000000000097 +:103930000000000000000000000000000000000087 +:103940000000000000000000000000000000000077 +:103950000000000000000000000000000000000067 +:103960000000000000000000000000000000000057 +:103970000000000000000000000000000000000047 +:103980000000000000000000000000000000000037 +:103990000000000000000000000000000000000027 +:1039A0000000000000000000000000000000000017 +:1039B0000000000000000000000000000000000007 +:1039C00000000000000000000000000000000000F7 +:1039D00000000000000000000000000000000000E7 +:1039E00000000000000000000000000000000000D7 +:1039F00000000000000000000000000000000000C7 +:103A000000000000000000000000000000000000B6 +:103A100000000000000000000000000000000000A6 +:103A20000000000000000000000000000000000096 +:103A30000000000000000000000000000000000086 +:103A40000000000000000000000000000000000076 +:103A50000000000000000000000000000000000066 +:103A60000000000000000000000000000000000056 +:103A70000000000000000000000000000000000046 +:103A80000000000000000000000000000000000036 +:103A90000000000000000000000000000000000026 +:103AA0000000000000000000000000000000000016 +:103AB0000000000000000000000000000000000006 +:103AC00000000000000000000000000000000000F6 +:103AD00000000000000000000000000000000000E6 +:103AE00000000000000000000000000000000000D6 +:103AF00000000000000000000000000000000000C6 +:103B000000000000000000000000000000000000B5 +:103B100000000000000000000000000000000000A5 +:103B20000000000000000000000000000000000095 +:103B30000000000000000000000000000000000085 +:103B40000000000000000000000000000000000075 +:103B50000000000000000000000000000000000065 +:103B60000000000000000000000000000000000055 +:103B70000000000000000000000000000000000045 +:103B80000000000000000000000000000000000035 +:103B90000000000000000000000000000000000025 +:103BA0000000000000000000000000000000000015 +:103BB0000000000000000000000000000000000005 +:103BC00000000000000000000000000000000000F5 +:103BD00000000000000000000000000000000000E5 +:103BE00000000000000000000000000000000000D5 +:103BF00000000000000000000000000000000000C5 +:103C000000000000000000000000000000000000B4 +:103C100000000000000000000000000000000000A4 +:103C20000000000000000000000000000000000094 +:103C30000000000000000000000000000000000084 +:103C40000000000000000000000000000000000074 +:103C50000000000000000000000000000000000064 +:103C60000000000000000000000000000000000054 +:103C70000000000000000000000000000000000044 +:103C80000000000000000000000000000000000034 +:103C90000000000000000000000000000000000024 +:103CA0000000000000000000000000000000000014 +:103CB0000000000000000000000000000000000004 +:103CC00000000000000000000000000000000000F4 +:103CD00000000000000000000000000000000000E4 +:103CE00000000000000000000000000000000000D4 +:103CF00000000000000000000000000000000000C4 +:103D000000000000000000000000000000000000B3 +:103D100000000000000000000000000000000000A3 +:103D20000000000000000000000000000000000093 +:103D30000000000000000000000000000000000083 +:103D40000000000000000000000000000000000073 +:103D50000000000000000000000000000000000063 +:103D60000000000000000000000000000000000053 +:103D70000000000000000000000000000000000043 +:103D80000000000000000000000000000000000033 +:103D90000000000000000000000000000000000023 +:103DA0000000000000000000000000000000000013 +:103DB0000000000000000000000000000000000003 +:103DC00000000000000000000000000000000000F3 +:103DD00000000000000000000000000000000000E3 +:103DE00000000000000000000000000000000000D3 +:103DF00000000000000000000000000000000000C3 +:103E000000000000000000000000000000000000B2 +:103E100000000000000000000000000000000000A2 +:103E20000000000000000000000000000000000092 +:103E30000000000000000000000000000000000082 +:103E40000000000000000000000000000000000072 +:103E50000000000000000000000000000000000062 +:103E60000000000000000000000000000000000052 +:103E70000000000000000000000000000000000042 +:103E80000000000000000000000000000000000032 +:103E90000000000000000000000000000000000022 +:103EA0000000000000000000000000000000000012 +:103EB0000000000000000000000000000000000002 +:103EC00000000000000000000000000000000000F2 +:103ED00000000000000000000000000000000000E2 +:103EE00000000000000000000000000000000000D2 +:103EF00000000000000000000000000000000000C2 +:103F000000000000000000000000000000000000B1 +:103F100000000000000000000000000000000000A1 +:103F20000000000000000000000000000000000091 +:103F30000000000000000000000000000000000081 +:103F40000000000000000000000000000000000071 +:103F50000000000000000000000000000000000061 +:103F60000000000000000000000000000000000051 +:103F70000000000000000000000000000000000041 +:103F80000000000000000000000000000000000031 +:103F90000000000000000000000000000000000021 +:103FA0000000000000000000000000000000000011 +:103FB0000000000000000000000000000000000001 +:103FC00000000000000000000000000000000000F1 +:103FD00000000000000000000000000000000000E1 +:103FE00000000000000000000000000000000000D1 +:103FF00000000000000000000000000000000000C1 +:1040000000000000000000000000000000000000B0 +:1040100000000000000000000000000000000000A0 +:104020000000000000000000000000000000000090 +:104030000000000000000000000000000000000080 +:104040000000000000000000000000000000000070 +:104050000000000000000000000000000000000060 +:104060000000000000000000000000000000000050 +:104070000000000000000000000000000000000040 +:104080000000000000000000000000000000000030 +:104090000000000000000000000000000000000020 +:1040A0000000000000000000000000000000000010 +:1040B0000000000000000000000000000000000000 +:1040C00000000000000000000000000000000000F0 +:1040D00000000000000000000000000000000000E0 +:1040E00000000000000000000000000000000000D0 +:1040F00000000000000000000000000000000000C0 +:1041000000000000000000000000000000000000AF +:10411000000000000000000000000000000000009F +:10412000000000000000000000000000000000008F +:10413000000000000000000000000000000000007F +:10414000000000000000000000000000000000006F +:10415000000000000000000000000000000000005F +:10416000000000000000000000000000000000004F +:10417000000000000000000000000000000000003F +:10418000000000000000000000000000000000002F +:10419000000000000000000000000000000000001F +:1041A000000000000000000000000000000000000F +:1041B00000000000000000000000000000000000FF +:1041C00000000000000000000000000000000000EF +:1041D00000000000000000000000000000000000DF +:1041E00000000000000000000000000000000000CF +:1041F00000000000000000000000000000000000BF +:1042000000000000000000000000000000000000AE +:10421000000000000000000000000000000000009E +:10422000000000000000000000000000000000008E +:10423000000000000000000000000000000000007E +:10424000000000000000000000000000000000006E +:10425000000000000000000000000000000000005E +:10426000000000000000000000000000000000004E +:10427000000000000000000000000000000000003E +:10428000000000000000000000000000000000002E +:10429000000000000000000000000000000000001E +:1042A000000000000000000000000000000000000E +:1042B00000000000000000000000000000000000FE +:1042C00000000000000000000000000000000000EE +:1042D00000000000000000000000000000000000DE +:1042E00000000000000000000000000000000000CE +:1042F00000000000000000000000000000000000BE +:1043000000000000000000000000000000000000AD +:10431000000000000000000000000000000000009D +:10432000000000000000000000000000000000008D +:10433000000000000000000000000000000000007D +:10434000000000000000000000000000000000006D +:10435000000000000000000000000000000000005D +:10436000000000000000000000000000000000004D +:10437000000000000000000000000000000000003D +:10438000000000000000000000000000000000002D +:10439000000000000000000000000000000000001D +:1043A000000000000000000000000000000000000D +:1043B00000000000000000000000000000000000FD +:1043C00000000000000000000000000000000000ED +:1043D00000000000000000000000000000000000DD +:1043E00000000000000000000000000000000000CD +:1043F00000000000000000000000000000000000BD +:1044000000000000000000000000000000000000AC +:10441000000000000000000000000000000000009C +:10442000000000000000000000000000000000008C +:10443000000000000000000000000000000000007C +:10444000000000000000000000000000000000006C +:10445000000000000000000000000000000000005C +:10446000000000000000000000000000000000004C +:10447000000000000000000000000000000000003C +:10448000000000000000000000000000000000002C +:10449000000000000000000000000000000000001C +:1044A000000000000000000000000000000000000C +:1044B00000000000000000000000000000000000FC +:1044C00000000000000000000000000000000000EC +:1044D00000000000000000000000000000000000DC +:1044E00000000000000000000000000000000000CC +:1044F00000000000000000000000000000000000BC +:1045000000000000000000000000000000000000AB +:10451000000000000000000000000000000000009B +:10452000000000000000000000000000000000008B +:10453000000000000000000000000000000000007B +:10454000000000000000000000000000000000006B +:10455000000000000000000000000000000000005B +:10456000000000000000000000000000000000004B +:10457000000000000000000000000000000000003B +:10458000000000000000000000000000000000002B +:10459000000000000000000000000000000000001B +:1045A000000000000000000000000000000000000B +:1045B00000000000000000000000000000000000FB +:1045C00000000000000000000000000000000000EB +:1045D00000000000000000000000000000000000DB +:1045E00000000000000000000000000000000000CB +:1045F00000000000000000000000000000000000BB +:1046000000000000000000000000000000000000AA +:10461000000000000000000000000000000000009A +:10462000000000000000000000000000000000008A +:10463000000000000000000000000000000000007A +:10464000000000000000000000000000000000006A +:10465000000000000000000000000000000000005A +:10466000000000000000000000000000000000004A +:10467000000000000000000000000000000000003A +:10468000000000000000000000000000000000002A +:10469000000000000000000000000000000000001A +:1046A000000000000000000000000000000000000A +:1046B00000000000000000000000000000000000FA +:1046C00000000000000000000000000000000000EA +:1046D00000000000000000000000000000000000DA +:1046E00000000000000000000000000000000000CA +:1046F00000000000000000000000000000000000BA +:1047000000000000000000000000000000000000A9 +:104710000000000000000000000000000000000099 +:104720000000000000000000000000000000000089 +:104730000000000000000000000000000000000079 +:104740000000000000000000000000000000000069 +:104750000000000000000000000000000000000059 +:104760000000000000000000000000000000000049 +:104770000000000000000000000000000000000039 +:104780000000000000000000000000000000000029 +:104790000000000000000000000000000000000019 +:1047A0000000000000000000000000000000000009 +:1047B00000000000000000000000000000000000F9 +:1047C00000000000000000000000000000000000E9 +:1047D00000000000000000000000000000000000D9 +:1047E00000000000000000000000000000000000C9 +:1047F00000000000000000000000000000000000B9 +:1048000000000000000000000000000000000000A8 +:104810000000000000000000000000000000000098 +:104820000000000000000000000000000000000088 +:104830000000000000000000000000000000000078 +:104840000000000000000000000000000000000068 +:104850000000000000000000000000000000000058 +:104860000000000000000000000000000000000048 +:104870000000000000000000000000000000000038 +:104880000000000000000000000000000000000028 +:104890000000000000000000000000000000000018 +:1048A0000000000000000000000000000000000008 +:1048B00000000000000000000000000000000000F8 +:1048C00000000000000000000000000000000000E8 +:1048D00000000000000000000000000000000000D8 +:1048E00000000000000000000000000000000000C8 +:1048F00000000000000000000000000000000000B8 +:1049000000000000000000000000000000000000A7 +:104910000000000000000000000000000000000097 +:104920000000000000000000000000000000000087 +:104930000000000000000000000000000000000077 +:104940000000000000000000000000000000000067 +:104950000000000000000000000000000000000057 +:104960000000000000000000000000000000000047 +:104970000000000000000000000000000000000037 +:104980000000000000000000000000000000000027 +:104990000000000000000000000000000000000017 +:1049A0000000000000000000000000000000000007 +:1049B00000000000000000000000000000000000F7 +:1049C00000000000000000000000000000000000E7 +:1049D00000000000000000000000000000000000D7 +:1049E00000000000000000000000000000000000C7 +:1049F00000000000000000000000000000000000B7 +:104A000000000000000000000000000000000000A6 +:104A10000000000000000000000000000000000096 +:104A20000000000000000000000000000000000086 +:104A30000000000000000000000000000000000076 +:104A40000000000000000000000000000000000066 +:104A50000000000000000000000000000000000056 +:104A60000000000000000000000000000000000046 +:104A70000000000000000000000000000000000036 +:104A80000000000000000000000000000000000026 +:104A90000000000000000000000000000000000016 +:104AA0000000000000000000000000000000000006 +:104AB00000000000000000000000000000000000F6 +:104AC00000000000000000000000000000000000E6 +:104AD00000000000000000000000000000000000D6 +:104AE00000000000000000000000000000000000C6 +:104AF00000000000000000000000000000000000B6 +:104B000000000000000000000000000000000000A5 +:104B10000000000000000000000000000000000095 +:104B20000000000000000000000000000000000085 +:104B30000000000000000000000000000000000075 +:104B40000000000000000000000000000000000065 +:104B50000000000000000000000000000000000055 +:104B60000000000000000000000000000000000045 +:104B70000000000000000000000000000000000035 +:104B80000000000000000000000000000000000025 +:104B90000000000000000000000000000000000015 +:104BA0000000000000000000000000000000000005 +:104BB00000000000000000000000000000000000F5 +:104BC00000000000000000000000000000000000E5 +:104BD00000000000000000000000000000000000D5 +:104BE00000000000000000000000000000000000C5 +:104BF00000000000000000000000000000000000B5 +:104C000000000000000000000000000000000000A4 +:104C10000000000000000000000000000000000094 +:104C20000000000000000000000000000000000084 +:104C30000000000000000000000000000000000074 +:104C40000000000000000000000000000000000064 +:104C50000000000000000000000000000000000054 +:104C60000000000000000000000000000000000044 +:104C70000000000000000000000000000000000034 +:104C80000000000000000000000000000000000024 +:104C90000000000000000000000000000000000014 +:104CA0000000000000000000000000000000000004 +:104CB00000000000000000000000000000000000F4 +:104CC00000000000000000000000000000000000E4 +:104CD00000000000000000000000000000000000D4 +:104CE00000000000000000000000000000000000C4 +:104CF00000000000000000000000000000000000B4 +:104D000000000000000000000000000000000000A3 +:104D10000000000000000000000000000000000093 +:104D20000000000000000000000000000000000083 +:104D30000000000000000000000000000000000073 +:104D40000000000000000000000000000000000063 +:104D50000000000000000000000000000000000053 +:104D60000000000000000000000000000000000043 +:104D70000000000000000000000000000000000033 +:104D80000000000000000000000000000000000023 +:104D90000000000000000000000000000000000013 +:104DA0000000000000000000000000000000000003 +:104DB00000000000000000000000000000000000F3 +:104DC00000000000000000000000000000000000E3 +:104DD00000000000000000000000000000000000D3 +:104DE00000000000000000000000000000000000C3 +:104DF00000000000000000000000000000000000B3 +:104E000000000000000000000000000000000000A2 +:104E10000000000000000000000000000000000092 +:104E20000000000000000000000000000000000082 +:104E30000000000000000000000000000000000072 +:104E40000000000000000000000000000000000062 +:104E50000000000000000000000000000000000052 +:104E60000000000000000000000000000000000042 +:104E70000000000000000000000000000000000032 +:104E80000000000000000000000000000000000022 +:104E90000000000000000000000000000000000012 +:104EA0000000000000000000000000000000000002 +:104EB00000000000000000000000000000000000F2 +:104EC00000000000000000000000000000000000E2 +:104ED00000000000000000000000000000000000D2 +:104EE00000000000000000000000000000000000C2 +:104EF00000000000000000000000000000000000B2 +:104F000000000000000000000000000000000000A1 +:104F10000000000000000000000000000000000091 +:104F20000000000000000000000000000000000081 +:104F30000000000000000000000000000000000071 +:104F40000000000000000000000000000000000061 +:104F50000000000000000000000000000000000051 +:104F60000000000000000000000000000000000041 +:104F70000000000000000000000000000000000031 +:104F80000000000000000000000000000000000021 +:104F90000000000000000000000000000000000011 +:104FA0000000000000000000000000000000000001 +:104FB00000000000000000000000000000000000F1 +:104FC00000000000000000000000000000000000E1 +:104FD00000000000000000000000000000000000D1 +:104FE00000000000000000000000000000000000C1 +:104FF00000000000000000000000000000000000B1 +:1050000000000000000000000000000000000000A0 +:105010000000000000000000000000000000000090 +:105020000000000000000000000000000000000080 +:105030000000000000000000000000000000000070 +:105040000000000000000000000000000000000060 +:105050000000000000000000000000000000000050 +:105060000000000000000000000000000000000040 +:105070000000000000000000000000000000000030 +:105080000000000000000000000000000000000020 +:105090000000000000000000000000000000000010 +:1050A0000000000000000000000000000000000000 +:1050B00000000000000000000000000000000000F0 +:1050C00000000000000000000000000000000000E0 +:1050D00000000000000000000000000000000000D0 +:1050E00000000000000000000000000000000000C0 +:1050F00000000000000000000000000000000000B0 +:10510000000000000000000000000000000000009F +:10511000000000000000000000000000000000008F +:10512000000000000000000000000000000000007F +:10513000000000000000000000000000000000006F +:10514000000000000000000000000000000000005F +:10515000000000000000000000000000000000004F +:10516000000000000000000000000000000000003F +:10517000000000000000000000000000000000002F +:10518000000000000000000000000000000000001F +:10519000000000000000000000000000000000000F +:1051A00000000000000000000000000000000000FF +:1051B00000000000000000000000000000000000EF +:1051C00000000000000000000000000000000000DF +:1051D00000000000000000000000000000000000CF +:1051E00000000000000000000000000000000000BF +:1051F00000000000000000000000000000000000AF +:10520000000000000000000000000000000000009E +:10521000000000000000000000000000000000008E +:10522000000000000000000000000000000000007E +:10523000000000000000000000000000000000006E +:10524000000000000000000000000000000000005E +:10525000000000000000000000000000000000004E +:10526000000000000000000000000000000000003E +:10527000000000000000000000000000000000002E +:10528000000000000000000000000000000000001E +:10529000000000000000000000000000000000000E +:1052A00000000000000000000000000000000000FE +:1052B00000000000000000000000000000000000EE +:1052C00000000000000000000000000000000000DE +:1052D00000000000000000000000000000000000CE +:1052E00000000000000000000000000000000000BE +:1052F00000000000000000000000000000000000AE +:10530000000000000000000000000000000000009D +:10531000000000000000000000000000000000008D +:10532000000000000000000000000000000000007D +:10533000000000000000000000000000000000006D +:10534000000000000000000000000000000000005D +:10535000000000000000000000000000000000004D +:10536000000000000000000000000000000000003D +:10537000000000000000000000000000000000002D +:10538000000000000000000000000000000000001D +:10539000000000000000000000000000000000000D +:1053A00000000000000000000000000000000000FD +:1053B00000000000000000000000000000000000ED +:1053C00000000000000000000000000000000000DD +:1053D00000000000000000000000000000000000CD +:1053E00000000000000000000000000000000000BD +:1053F00000000000000000000000000000000000AD +:10540000000000000000000000000000000000009C +:10541000000000000000000000000000000000008C +:10542000000000000000000000000000000000007C +:10543000000000000000000000000000000000006C +:10544000000000000000000000000000000000005C +:10545000000000000000000000000000000000004C +:10546000000000000000000000000000000000003C +:10547000000000000000000000000000000000002C +:10548000000000000000000000000000000000001C +:10549000000000000000000000000000000000000C +:1054A00000000000000000000000000000000000FC +:1054B00000000000000000000000000000000000EC +:1054C00000000000000000000000000000000000DC +:1054D00000000000000000000000000000000000CC +:1054E00000000000000000000000000000000000BC +:1054F00000000000000000000000000000000000AC +:10550000000000000000000000000000000000009B +:10551000000000000000000000000000000000008B +:10552000000000000000000000000000000000007B +:10553000000000000000000000000000000000006B +:10554000000000000000000000000000000000005B +:10555000000000000000000000000000000000004B +:10556000000000000000000000000000000000003B +:10557000000000000000000000000000000000002B +:10558000000000000000000000000000000000001B +:10559000000000000000000000000000000000000B +:1055A00000000000000000000000000000000000FB +:1055B00000000000000000000000000000000000EB +:1055C00000000000000000000000000000000000DB +:1055D00000000000000000000000000000000000CB +:1055E00000000000000000000000000000000000BB +:1055F00000000000000000000000000000000000AB +:10560000000000000000000000000000000000009A +:10561000000000000000000000000000000000008A +:10562000000000000000000000000000000000007A +:10563000000000000000000000000000000000006A +:10564000000000000000000000000000000000005A +:10565000000000000000000000000000000000004A +:10566000000000000000000000000000000000003A +:10567000000000000000000000000000000000002A +:10568000000000000000000000000000000000001A +:10569000000000000000000000000000000000000A +:1056A00000000000000000000000000000000000FA +:1056B00000000000000000000000000000000000EA +:1056C00000000000000000000000000000000000DA +:1056D00000000000000000000000000000000000CA +:1056E00000000000000000000000000000000000BA +:1056F00000000000000000000000000000000000AA +:105700000000000000000000000000000000000099 +:105710000000000000000000000000000000000089 +:105720000000000000000000000000000000000079 +:105730000000000000000000000000000000000069 +:105740000000000000000000000000000000000059 +:105750000000000000000000000000000000000049 +:105760000000000000000000000000000000000039 +:105770000000000000000000000000000000000029 +:105780000000000000000000000000000000000019 +:105790000000000000000000000000000000000009 +:1057A00000000000000000000000000000000000F9 +:1057B00000000000000000000000000000000000E9 +:1057C00000000000000000000000000000000000D9 +:1057D00000000000000000000000000000000000C9 +:1057E00000000000000000000000000000000000B9 +:1057F00000000000000000000000000000000000A9 +:105800000000000000000000000000000000000098 +:105810000000000000000000000000000000000088 +:105820000000000000000000000000000000000078 +:105830000000000000000000000000000000000068 +:105840000000000000000000000000000000000058 +:105850000000000000000000000000000000000048 +:105860000000000000000000000000000000000038 +:105870000000000000000000000000000000000028 +:105880000000000000000000000000000000000018 +:105890000000000000000000000000000000000008 +:1058A00000000000000000000000000000000000F8 +:1058B00000000000000000000000000000000000E8 +:1058C00000000000000000000000000000000000D8 +:1058D00000000000000000000000000000000000C8 +:1058E00000000000000000000000000000000000B8 +:1058F00000000000000000000000000000000000A8 +:105900000000000000000000000000000000000097 +:105910000000000000000000000000000000000087 +:105920000000000000000000000000000000000077 +:105930000000000000000000000000000000000067 +:105940000000000000000000000000000000000057 +:105950000000000000000000000000000000000047 +:105960000000000000000000000000000000000037 +:105970000000000000000000000000000000000027 +:105980000000000000000000000000000000000017 +:105990000000000000000000000000000000000007 +:1059A00000000000000000000000000000000000F7 +:1059B00000000000000000000000000000000000E7 +:1059C00000000000000000000000000000000000D7 +:1059D00000000000000000000000000000000000C7 +:1059E00000000000000000000000000000000000B7 +:1059F00000000000000000000000000000000000A7 +:105A00000000000000000000000000000000000096 +:105A10000000000000000000000000000000000086 +:105A20000000000000000000000000000000000076 +:105A30000000000000000000000000000000000066 +:105A40000000000000000000000000000000000056 +:105A50000000000000000000000000000000000046 +:105A60000000000000000000000000000000000036 +:105A70000000000000000000000000000000000026 +:105A80000000000000000000000000000000000016 +:105A90000000000000000000000000000000000006 +:105AA00000000000000000000000000000000000F6 +:105AB00000000000000000000000000000000000E6 +:105AC00000000000000000000000000000000000D6 +:105AD00000000000000000000000000000000000C6 +:105AE00000000000000000000000000000000000B6 +:105AF00000000000000000000000000000000000A6 +:105B00000000000000000000000000000000000095 +:105B10000000000000000000000000000000000085 +:105B20000000000000000000000000000000000075 +:105B30000000000000000000000000000000000065 +:105B40000000000000000000000000000000000055 +:105B50000000000000000000000000000000000045 +:105B60000000000000000000000000000000000035 +:105B70000000000000000000000000000000000025 +:105B80000000000000000000000000000000000015 +:105B90000000000000000000000000000000000005 +:105BA00000000000000000000000000000000000F5 +:105BB00000000000000000000000000000000000E5 +:105BC00000000000000000000000000000000000D5 +:105BD00000000000000000000000000000000000C5 +:105BE00000000000000000000000000000000000B5 +:105BF00000000000000000000000000000000000A5 +:105C00000000000000000000000000000000000094 +:105C10000000000000000000000000000000000084 +:105C20000000000000000000000000000000000074 +:105C30000000000000000000000000000000000064 +:105C40000000000000000000000000000000000054 +:105C50000000000000000000000000000000000044 +:105C60000000000000000000000000000000000034 +:105C70000000000000000000000000000000000024 +:105C80000000000000000000000000000000000014 +:105C90000000000000000000000000000000000004 +:105CA00000000000000000000000000000000000F4 +:105CB00000000000000000000000000000000000E4 +:105CC00000000000000000000000000000000000D4 +:105CD00000000000000000000000000000000000C4 +:105CE00000000000000000000000000000000000B4 +:105CF00000000000000000000000000000000000A4 +:105D00000000000000000000000000000000000093 +:105D10000000000000000000000000000000000083 +:105D20000000000000000000000000000000000073 +:105D30000000000000000000000000000000000063 +:105D40000000000000000000000000000000000053 +:105D50000000000000000000000000000000000043 +:105D60000000000000000000000000000000000033 +:105D70000000000000000000000000000000000023 +:105D80000000000000000000000000000000000013 +:105D90000000000000000000000000000000000003 +:105DA00000000000000000000000000000000000F3 +:105DB00000000000000000000000000000000000E3 +:105DC00000000000000000000000000000000000D3 +:105DD00000000000000000000000000000000000C3 +:105DE00000000000000000000000000000000000B3 +:105DF00000000000000000000000000000000000A3 +:105E00000000000000000000000000000000000092 +:105E10000000000000000000000000000000000082 +:105E20000000000000000000000000000000000072 +:105E30000000000000000000000000000000000062 +:105E40000000000000000000000000000000000052 +:105E50000000000000000000000000000000000042 +:105E60000000000000000000000000000000000032 +:105E70000000000000000000000000000000000022 +:105E80000000000000000000000000000000000012 +:105E90000000000000000000000000000000000002 +:105EA00000000000000000000000000000000000F2 +:105EB00000000000000000000000000000000000E2 +:105EC00000000000000000000000000000000000D2 +:105ED00000000000000000000000000000000000C2 +:105EE00000000000000000000000000000000000B2 +:105EF00000000000000000000000000000000000A2 +:105F00000000000000000000000000000000000091 +:105F10000000000000000000000000000000000081 +:105F20000000000000000000000000000000000071 +:105F30000000000000000000000000000000000061 +:105F40000000000000000000000000000000000051 +:105F50000000000000000000000000000000000041 +:105F60000000000000000000000000000000000031 +:105F70000000000000000000000000000000000021 +:105F80000000000000000000000000000000000011 +:105F90000000000000000000000000000000000001 +:105FA00000000000000000000000000000000000F1 +:105FB00000000000000000000000000000000000E1 +:105FC00000000000000000000000000000000000D1 +:105FD00000000000000000000000000000000000C1 +:105FE00000000000000000000000000000000000B1 +:105FF00000000000000000000000000000000000A1 +:106000000000000000000000000000000000000090 +:106010000000000000000000000000000000000080 +:106020000000000000000000000000000000000070 +:106030000000000000000000000000000000000060 +:106040000000000000000000000000000000000050 +:106050000000000000000000000000000000000040 +:106060000000000000000000000000000000000030 +:106070000000000000000000000000000000000020 +:106080000000000000000000000000000000000010 +:106090000000000000000000000000000000000000 +:1060A00000000000000000000000000000000000F0 +:1060B00000000000000000000000000000000000E0 +:1060C00000000000000000000000000000000000D0 +:1060D00000000000000000000000000000000000C0 +:1060E00000000000000000000000000000000000B0 +:1060F00000000000000000000000000000000000A0 +:10610000000000000000000000000000000000008F +:10611000000000000000000000000000000000007F +:10612000000000000000000000000000000000006F +:10613000000000000000000000000000000000005F +:10614000000000000000000000000000000000004F +:10615000000000000000000000000000000000003F +:10616000000000000000000000000000000000002F +:10617000000000000000000000000000000000001F +:10618000000000000000000000000000000000000F +:1061900000000000000000000000000000000000FF +:1061A00000000000000000000000000000000000EF +:1061B00000000000000000000000000000000000DF +:1061C00000000000000000000000000000000000CF +:1061D00000000000000000000000000000000000BF +:1061E00000000000000000000000000000000000AF +:1061F000000000000000000000000000000000009F +:10620000000000000000000000000000000000008E +:10621000000000000000000000000000000000007E +:10622000000000000000000000000000000000006E +:10623000000000000000000000000000000000005E +:10624000000000000000000000000000000000004E +:10625000000000000000000000000000000000003E +:10626000000000000000000000000000000000002E +:10627000000000000000000000000000000000001E +:10628000000000000000000000000000000000000E +:1062900000000000000000000000000000000000FE +:1062A00000000000000000000000000000000000EE +:1062B00000000000000000000000000000000000DE +:1062C00000000000000000000000000000000000CE +:1062D00000000000000000000000000000000000BE +:1062E00000000000000000000000000000000000AE +:1062F000000000000000000000000000000000009E +:10630000000000000000000000000000000000008D +:10631000000000000000000000000000000000007D +:10632000000000000000000000000000000000006D +:10633000000000000000000000000000000000005D +:10634000000000000000000000000000000000004D +:10635000000000000000000000000000000000003D +:10636000000000000000000000000000000000002D +:10637000000000000000000000000000000000001D +:10638000000000000000000000000000000000000D +:1063900000000000000000000000000000000000FD +:1063A00000000000000000000000000000000000ED +:1063B00000000000000000000000000000000000DD +:1063C00000000000000000000000000000000000CD +:1063D00000000000000000000000000000000000BD +:1063E00000000000000000000000000000000000AD +:1063F000000000000000000000000000000000009D +:10640000000000000000000000000000000000008C +:10641000000000000000000000000000000000007C +:10642000000000000000000000000000000000006C +:10643000000000000000000000000000000000005C +:10644000000000000000000000000000000000004C +:10645000000000000000000000000000000000003C +:10646000000000000000000000000000000000002C +:10647000000000000000000000000000000000001C +:10648000000000000000000000000000000000000C +:1064900000000000000000000000000000000000FC +:1064A00000000000000000000000000000000000EC +:1064B00000000000000000000000000000000000DC +:1064C00000000000000000000000000000000000CC +:1064D00000000000000000000000000000000000BC +:1064E00000000000000000000000000000000000AC +:1064F000000000000000000000000000000000009C +:10650000000000000000000000000000000000008B +:10651000000000000000000000000000000000007B +:10652000000000000000000000000000000000006B +:10653000000000000000000000000000000000005B +:10654000000000000000000000000000000000004B +:10655000000000000000000000000000000000003B +:10656000000000000000000000000000000000002B +:10657000000000000000000000000000000000001B +:10658000000000000000000000000000000000000B +:1065900000000000000000000000000000000000FB +:1065A00000000000000000000000000000000000EB +:1065B00000000000000000000000000000000000DB +:1065C00000000000000000000000000000000000CB +:1065D00000000000000000000000000000000000BB +:1065E00000000000000000000000000000000000AB +:1065F000000000000000000000000000000000009B +:10660000000000000000000000000000000000008A +:10661000000000000000000000000000000000007A +:10662000000000000000000000000000000000006A +:10663000000000000000000000000000000000005A +:10664000000000000000000000000000000000004A +:10665000000000000000000000000000000000003A +:10666000000000000000000000000000000000002A +:10667000000000000000000000000000000000001A +:10668000000000000000000000000000000000000A +:1066900000000000000000000000000000000000FA +:1066A00000000000000000000000000000000000EA +:1066B00000000000000000000000000000000000DA +:1066C00000000000000000000000000000000000CA +:1066D00000000000000000000000000000000000BA +:1066E00000000000000000000000000000000000AA +:1066F000000000000000000000000000000000009A +:106700000000000000000000000000000000000089 +:106710000000000000000000000000000000000079 +:106720000000000000000000000000000000000069 +:106730000000000000000000000000000000000059 +:106740000000000000000000000000000000000049 +:106750000000000000000000000000000000000039 +:106760000000000000000000000000000000000029 +:106770000000000000000000000000000000000019 +:106780000000000000000000000000000000000009 +:1067900000000000000000000000000000000000F9 +:1067A00000000000000000000000000000000000E9 +:1067B00000000000000000000000000000000000D9 +:1067C00000000000000000000000000000000000C9 +:1067D00000000000000000000000000000000000B9 +:1067E00000000000000000000000000000000000A9 +:1067F0000000000000000000000000000000000099 +:106800000000000000000000000000000000000088 +:106810000000000000000000000000000000000078 +:106820000000000000000000000000000000000068 +:106830000000000000000000000000000000000058 +:106840000000000000000000000000000000000048 +:106850000000000000000000000000000000000038 +:106860000000000000000000000000000000000028 +:106870000000000000000000000000000000000018 +:106880000000000000000000000000000000000008 +:1068900000000000000000000000000000000000F8 +:1068A00000000000000000000000000000000000E8 +:1068B00000000000000000000000000000000000D8 +:1068C00000000000000000000000000000000000C8 +:1068D00000000000000000000000000000000000B8 +:1068E00000000000000000000000000000000000A8 +:1068F0000000000000000000000000000000000098 +:106900000000000000000000000000000000000087 +:106910000000000000000000000000000000000077 +:106920000000000000000000000000000000000067 +:106930000000000000000000000000000000000057 +:106940000000000000000000000000000000000047 +:106950000000000000000000000000000000000037 +:106960000000000000000000000000000000000027 +:106970000000000000000000000000000000000017 +:106980000000000000000000000000000000000007 +:1069900000000000000000000000000000000000F7 +:1069A00000000000000000000000000000000000E7 +:1069B00000000000000000000000000000000000D7 +:1069C00000000000000000000000000000000000C7 +:1069D00000000000000000000000000000000000B7 +:1069E00000000000000000000000000000000000A7 +:1069F0000000000000000000000000000000000097 +:106A00000000000000000000000000000000000086 +:106A10000000000000000000000000000000000076 +:106A20000000000000000000000000000000000066 +:106A30000000000000000000000000000000000056 +:106A40000000000000000000000000000000000046 +:106A50000000000000000000000000000000000036 +:106A60000000000000000000000000000000000026 +:106A70000000000000000000000000000000000016 +:106A80000000000000000000000000000000000006 +:106A900000000000000000000000000000000000F6 +:106AA00000000000000000000000000000000000E6 +:106AB00000000000000000000000000000000000D6 +:106AC00000000000000000000000000000000000C6 +:106AD00000000000000000000000000000000000B6 +:106AE00000000000000000000000000000000000A6 +:106AF0000000000000000000000000000000000096 +:106B00000000000000000000000000000000000085 +:106B10000000000000000000000000000000000075 +:106B20000000000000000000000000000000000065 +:106B30000000000000000000000000000000000055 +:106B40000000000000000000000000000000000045 +:106B50000000000000000000000000000000000035 +:106B60000000000000000000000000000000000025 +:106B70000000000000000000000000000000000015 +:106B80000000000000000000000000000000000005 +:106B900000000000000000000000000000000000F5 +:106BA00000000000000000000000000000000000E5 +:106BB00000000000000000000000000000000000D5 +:106BC00000000000000000000000000000000000C5 +:106BD00000000000000000000000000000000000B5 +:106BE00000000000000000000000000000000000A5 +:106BF0000000000000000000000000000000000095 +:106C00000000000000000000000000000000000084 +:106C10000000000000000000000000000000000074 +:106C20000000000000000000000000000000000064 +:106C30000000000000000000000000000000000054 +:106C40000000000000000000000000000000000044 +:106C50000000000000000000000000000000000034 +:106C60000000000000000000000000000000000024 +:106C70000000000000000000000000000000000014 +:106C80000000000000000000000000000000000004 +:106C900000000000000000000000000000000000F4 +:106CA00000000000000000000000000000000000E4 +:106CB00000000000000000000000000000000000D4 +:106CC00000000000000000000000000000000000C4 +:106CD00000000000000000000000000000000000B4 +:106CE00000000000000000000000000000000000A4 +:106CF0000000000000000000000000000000000094 +:106D00000000000000000000000000000000000083 +:106D10000000000000000000000000000000000073 +:106D20000000000000000000000000000000000063 +:106D30000000000000000000000000000000000053 +:106D40000000000000000000000000000000000043 +:106D50000000000000000000000000000000000033 +:106D60000000000000000000000000000000000023 +:106D70000000000000000000000000000000000013 +:106D80000000000000000000000000000000000003 +:106D900000000000000000000000000000000000F3 +:106DA00000000000000000000000000000000000E3 +:106DB00000000000000000000000000000000000D3 +:106DC00000000000000000000000000000000000C3 +:106DD00000000000000000000000000000000000B3 +:106DE00000000000000000000000000000000000A3 +:106DF0000000000000000000000000000000000093 +:106E00000000000000000000000000000000000082 +:106E10000000000000000000000000000000000072 +:106E20000000000000000000000000000000000062 +:106E30000000000000000000000000000000000052 +:106E40000000000000000000000000000000000042 +:106E50000000000000000000000000000000000032 +:106E60000000000000000000000000000000000022 +:106E70000000000000000000000000000000000012 +:106E80000000000000000000000000000000000002 +:106E900000000000000000000000000000000000F2 +:106EA00000000000000000000000000000000000E2 +:106EB00000000000000000000000000000000000D2 +:106EC00000000000000000000000000000000000C2 +:106ED00000000000000000000000000000000000B2 +:106EE00000000000000000000000000000000000A2 +:106EF0000000000000000000000000000000000092 +:106F00000000000000000000000000000000000081 +:106F10000000000000000000000000000000000071 +:106F20000000000000000000000000000000000061 +:106F30000000000000000000000000000000000051 +:106F40000000000000000000000000000000000041 +:106F50000000000000000000000000000000000031 +:106F60000000000000000000000000000000000021 +:106F70000000000000000000000000000000000011 +:106F80000000000000000000000000000000000001 +:106F900000000000000000000000000000000000F1 +:106FA00000000000000000000000000000000000E1 +:106FB00000000000000000000000000000000000D1 +:106FC00000000000000000000000000000000000C1 +:106FD00000000000000000000000000000000000B1 +:106FE00000000000000000000000000000000000A1 +:106FF0000000000000000000000000000000000091 +:107000000000000000000000000000000000000080 +:107010000000000000000000000000000000000070 +:107020000000000000000000000000000000000060 +:107030000000000000000000000000000000000050 +:107040000000000000000000000000000000000040 +:107050000000000000000000000000000000000030 +:107060000000000000000000000000000000000020 +:107070000000000000000000000000000000000010 +:107080000000000000000000000000000000000000 +:1070900000000000000000000000000000000000F0 +:1070A00000000000000000000000000000000000E0 +:1070B00000000000000000000000000000000000D0 +:1070C00000000000000000000000000000000000C0 +:1070D00000000000000000000000000000000000B0 +:1070E00000000000000000000000000000000000A0 +:1070F0000000000000000000000000000000000090 +:10710000000000000000000000000000000000007F +:10711000000000000000000000000000000000006F +:10712000000000000000000000000000000000005F +:10713000000000000000000000000000000000004F +:10714000000000000000000000000000000000003F +:10715000000000000000000000000000000000002F +:10716000000000000000000000000000000000001F +:10717000000000000000000000000000000000000F +:1071800000000000000000000000000000000000FF +:1071900000000000000000000000000000000000EF +:1071A00000000000000000000000000000000000DF +:1071B00000000000000000000000000000000000CF +:1071C00000000000000000000000000000000000BF +:1071D00000000000000000000000000000000000AF +:1071E000000000000000000000000000000000009F +:1071F000000000000000000000000000000000008F +:10720000000000000000000000000000000000007E +:10721000000000000000000000000000000000006E +:10722000000000000000000000000000000000005E +:10723000000000000000000000000000000000004E +:10724000000000000000000000000000000000003E +:10725000000000000000000000000000000000002E +:10726000000000000000000000000000000000001E +:10727000000000000000000000000000000000000E +:1072800000000000000000000000000000000000FE +:1072900000000000000000000000000000000000EE +:1072A00000000000000000000000000000000000DE +:1072B00000000000000000000000000000000000CE +:1072C00000000000000000000000000000000000BE +:1072D00000000000000000000000000000000000AE +:1072E000000000000000000000000000000000009E +:1072F000000000000000000000000000000000008E +:10730000000000000000000000000000000000007D +:10731000000000000000000000000000000000006D +:10732000000000000000000000000000000000005D +:10733000000000000000000000000000000000004D +:10734000000000000000000000000000000000003D +:10735000000000000000000000000000000000002D +:10736000000000000000000000000000000000001D +:10737000000000000000000000000000000000000D +:1073800000000000000000000000000000000000FD +:1073900000000000000000000000000000000000ED +:1073A00000000000000000000000000000000000DD +:1073B00000000000000000000000000000000000CD +:1073C00000000000000000000000000000000000BD +:1073D00000000000000000000000000000000000AD +:1073E000000000000000000000000000000000009D +:1073F000000000000000000000000000000000008D +:10740000000000000000000000000000000000007C +:10741000000000000000000000000000000000006C +:10742000000000000000000000000000000000005C +:10743000000000000000000000000000000000004C +:10744000000000000000000000000000000000003C +:10745000000000000000000000000000000000002C +:10746000000000000000000000000000000000001C +:10747000000000000000000000000000000000000C +:1074800000000000000000000000000000000000FC +:1074900000000000000000000000000000000000EC +:1074A00000000000000000000000000000000000DC +:1074B00000000000000000000000000000000000CC +:1074C00000000000000000000000000000000000BC +:1074D00000000000000000000000000000000000AC +:1074E000000000000000000000000000000000009C +:1074F000000000000000000000000000000000008C +:10750000000000000000000000000000000000007B +:10751000000000000000000000000000000000006B +:10752000000000000000000000000000000000005B +:10753000000000000000000000000000000000004B +:10754000000000000000000000000000000000003B +:10755000000000000000000000000000000000002B +:10756000000000000000000000000000000000001B +:10757000000000000000000000000000000000000B +:1075800000000000000000000000000000000000FB +:1075900000000000000000000000000000000000EB +:1075A00000000000000000000000000000000000DB +:1075B00000000000000000000000000000000000CB +:1075C00000000000000000000000000000000000BB +:1075D00000000000000000000000000000000000AB +:1075E000000000000000000000000000000000009B +:1075F000000000000000000000000000000000008B +:10760000000000000000000000000000000000007A +:10761000000000000000000000000000000000006A +:10762000000000000000000000000000000000005A +:10763000000000000000000000000000000000004A +:10764000000000000000000000000000000000003A +:10765000000000000000000000000000000000002A +:10766000000000000000000000000000000000001A +:10767000000000000000000000000000000000000A +:1076800000000000000000000000000000000000FA +:1076900000000000000000000000000000000000EA +:1076A00000000000000000000000000000000000DA +:1076B00000000000000000000000000000000000CA +:1076C00000000000000000000000000000000000BA +:1076D00000000000000000000000000000000000AA +:1076E000000000000000000000000000000000009A +:1076F000000000000000000000000000000000008A +:107700000000000000000000000000000000000079 +:107710000000000000000000000000000000000069 +:107720000000000000000000000000000000000059 +:107730000000000000000000000000000000000049 +:107740000000000000000000000000000000000039 +:107750000000000000000000000000000000000029 +:107760000000000000000000000000000000000019 +:107770000000000000000000000000000000000009 +:1077800000000000000000000000000000000000F9 +:1077900000000000000000000000000000000000E9 +:1077A00000000000000000000000000000000000D9 +:1077B00000000000000000000000000000000000C9 +:1077C00000000000000000000000000000000000B9 +:1077D00000000000000000000000000000000000A9 +:1077E0000000000000000000000000000000000099 +:1077F0000000000000000000000000000000000089 +:107800000000000000000000000000000000000078 +:107810000000000000000000000000000000000068 +:107820000000000000000000000000000000000058 +:107830000000000000000000000000000000000048 +:107840000000000000000000000000000000000038 +:107850000000000000000000000000000000000028 +:107860000000000000000000000000000000000018 +:107870000000000000000000000000000000000008 +:1078800000000000000000000000000000000000F8 +:1078900000000000000000000000000000000000E8 +:1078A00000000000000000000000000000000000D8 +:1078B00000000000000000000000000000000000C8 +:1078C00000000000000000000000000000000000B8 +:1078D00000000000000000000000000000000000A8 +:1078E0000000000000000000000000000000000098 +:1078F0000000000000000000000000000000000088 +:107900000000000000000000000000000000000077 +:107910000000000000000000000000000000000067 +:107920000000000000000000000000000000000057 +:107930000000000000000000000000000000000047 +:107940000000000000000000000000000000000037 +:107950000000000000000000000000000000000027 +:107960000000000000000000000000000000000017 +:107970000000000000000000000000000000000007 +:1079800000000000000000000000000000000000F7 +:1079900000000000000000000000000000000000E7 +:1079A00000000000000000000000000000000000D7 +:1079B00000000000000000000000000000000000C7 +:1079C00000000000000000000000000000000000B7 +:1079D00000000000000000000000000000000000A7 +:1079E0000000000000000000000000000000000097 +:1079F0000000000000000000000000000000000087 +:107A00000000000000000000000000000000000076 +:107A10000000000000000000000000000000000066 +:107A20000000000000000000000000000000000056 +:107A30000000000000000000000000000000000046 +:107A40000000000000000000000000000000000036 +:107A50000000000000000000000000000000000026 +:107A60000000000000000000000000000000000016 +:107A70000000000000000000000000000000000006 +:107A800000000000000000000000000000000000F6 +:107A900000000000000000000000000000000000E6 +:107AA00000000000000000000000000000000000D6 +:107AB00000000000000000000000000000000000C6 +:107AC00000000000000000000000000000000000B6 +:107AD00000000000000000000000000000000000A6 +:107AE0000000000000000000000000000000000096 +:107AF0000000000000000000000000000000000086 +:107B00000000000000000000000000000000000075 +:107B10000000000000000000000000000000000065 +:107B20000000000000000000000000000000000055 +:107B30000000000000000000000000000000000045 +:107B40000000000000000000000000000000000035 +:107B50000000000000000000000000000000000025 +:107B60000000000000000000000000000000000015 +:107B70000000000000000000000000000000000005 +:107B800000000000000000000000000000000000F5 +:107B900000000000000000000000000000000000E5 +:107BA00000000000000000000000000000000000D5 +:107BB00000000000000000000000000000000000C5 +:107BC00000000000000000000000000000000000B5 +:107BD00000000000000000000000000000000000A5 +:107BE0000000000000000000000000000000000095 +:107BF0000000000000000000000000000000000085 +:107C00000000000000000000000000000000000074 +:107C10000000000000000000000000000000000064 +:107C20000000000000000000000000000000000054 +:107C30000000000000000000000000000000000044 +:107C40000000000000000000000000000000000034 +:107C50000000000000000000000000000000000024 +:107C60000000000000000000000000000000000014 +:107C70000000000000000000000000000000000004 +:107C800000000000000000000000000000000000F4 +:107C900000000000000000000000000000000000E4 +:107CA00000000000000000000000000000000000D4 +:107CB00000000000000000000000000000000000C4 +:107CC00000000000000000000000000000000000B4 +:107CD00000000000000000000000000000000000A4 +:107CE0000000000000000000000000000000000094 +:107CF0000000000000000000000000000000000084 +:107D00000000000000000000000000000000000073 +:107D10000000000000000000000000000000000063 +:107D20000000000000000000000000000000000053 +:107D30000000000000000000000000000000000043 +:107D40000000000000000000000000000000000033 +:107D50000000000000000000000000000000000023 +:107D60000000000000000000000000000000000013 +:107D70000000000000000000000000000000000003 +:107D800000000000000000000000000000000000F3 +:107D900000000000000000000000000000000000E3 +:107DA00000000000000000000000000000000000D3 +:107DB00000000000000000000000000000000000C3 +:107DC00000000000000000000000000000000000B3 +:107DD00000000000000000000000000000000000A3 +:107DE0000000000000000000000000000000000093 +:107DF0000000000000000000000000000000000083 +:107E00000000000000000000000000000000000072 +:107E10000000000000000000000000000000000062 +:107E20000000000000000000000000000000000052 +:107E30000000000000000000000000000000000042 +:107E40000000000000000000000000000000000032 +:107E50000000000000000000000000000000000022 +:107E60000000000000000000000000000000000012 +:107E70000000000000000000000000000000000002 +:107E800000000000000000000000000000000000F2 +:107E900000000000000000000000000000000000E2 +:107EA00000000000000000000000000000000000D2 +:107EB00000000000000000000000000000000000C2 +:107EC00000000000000000000000000000000000B2 +:107ED00000000000000000000000000000000000A2 +:107EE0000000000000000000000000000000000092 +:107EF0000000000000000000000000000000000082 +:107F00000000000000000000000000000000000071 +:107F10000000000000000000000000000000000061 +:107F20000000000000000000000000000000000051 +:107F30000000000000000000000000000000000041 +:107F40000000000000000000000000000000000031 +:107F50000000000000000000000000000000000021 +:107F60000000000000000000000000000000000011 +:107F70000000000000000000000000000000000001 +:107F800000000000000000000000000000000000F1 +:107F900000000000000000000000000000000000E1 +:107FA00000000000000000000000000000000000D1 +:107FB00000000000000000000000000000000000C1 +:107FC00000000000000000000000000000000000B1 +:107FD00000000000000000000000000000000000A1 +:107FE0000000000000000000000000000000000091 +:107FF0000000000000000000000000000000000081 +:108000000000000000000000000000000000000070 +:108010000000000000000000000000000000000060 +:108020000000000000000000000000000000000050 +:108030000000000000000000000000000000000040 +:108040000000000000000000000000000000000030 +:108050000000000000000000000000000000000020 +:108060000000000000000000000000000000000010 +:108070000000000000000000000000000000000000 +:1080800000000000000000000000000000000000F0 +:1080900000000000000000000000000000000000E0 +:1080A00000000000000000000000000000000000D0 +:1080B00000000000000000000000000000000000C0 +:1080C00000000000000000000000000000000000B0 +:1080D00000000000000000000000000000000000A0 +:1080E0000000000000000000000000000000000090 +:1080F0000000000000000000000000000000000080 +:10810000000000000000000000000000000000006F +:10811000000000000000000000000000000000005F +:10812000000000000000000000000000000000004F +:10813000000000000000000000000000000000003F +:10814000000000000000000000000000000000002F +:10815000000000000000000000000000000000001F +:10816000000000000000000000000000000000000F +:1081700000000000000000000000000000000000FF +:1081800000000000000000000000000000000000EF +:1081900000000000000000000000000000000000DF +:1081A00000000000000000000000000000000000CF +:1081B00000000000000000000000000000000000BF +:1081C00000000000000000000000000000000000AF +:1081D000000000000000000000000000000000009F +:1081E000000000000000000000000000000000008F +:1081F000000000000000000000000000000000007F +:10820000000000000000000000000000000000006E +:10821000000000000000000000000000000000005E +:10822000000000000000000000000000000000004E +:10823000000000000000000000000000000000003E +:10824000000000000000000000000000000000002E +:10825000000000000000000000000000000000001E +:10826000000000000000000000000000000000000E +:1082700000000000000000000000000000000000FE +:1082800000000000000000000000000000000000EE +:1082900000000000000000000000000000000000DE +:1082A00000000000000000000000000000000000CE +:1082B00000000000000000000000000000000000BE +:1082C00000000000000000000000000000000000AE +:1082D000000000000000000000000000000000009E +:1082E000000000000000000000000000000000008E +:1082F000000000000000000000000000000000007E +:10830000000000000000000000000000000000006D +:10831000000000000000000000000000000000005D +:10832000000000000000000000000000000000004D +:10833000000000000000000000000000000000003D +:10834000000000000000000000000000000000002D +:10835000000000000000000000000000000000001D +:10836000000000000000000000000000000000000D +:1083700000000000000000000000000000000000FD +:1083800000000000000000000000000000000000ED +:1083900000000000000000000000000000000000DD +:1083A00000000000000000000000000000000000CD +:1083B00000000000000000000000000000000000BD +:1083C00000000000000000000000000000000000AD +:1083D000000000000000000000000000000000009D +:1083E000000000000000000000000000000000008D +:1083F000000000000000000000000000000000007D +:10840000000000000000000000000000000000006C +:10841000000000000000000000000000000000005C +:10842000000000000000000000000000000000004C +:10843000000000000000000000000000000000003C +:10844000000000000000000000000000000000002C +:10845000000000000000000000000000000000001C +:10846000000000000000000000000000000000000C +:1084700000000000000000000000000000000000FC +:1084800000000000000000000000000000000000EC +:1084900000000000000000000000000000000000DC +:1084A00000000000000000000000000000000000CC +:1084B00000000000000000000000000000000000BC +:1084C00000000000000000000000000000000000AC +:1084D000000000000000000000000000000000009C +:1084E000000000000000000000000000000000008C +:1084F000000000000000000000000000000000007C +:10850000000000000000000000000000000000006B +:10851000000000000000000000000000000000005B +:10852000000000000000000000000000000000004B +:10853000000000000000000000000000000000003B +:10854000000000000000000000000000000000002B +:10855000000000000000000000000000000000001B +:10856000000000000000000000000000000000000B +:1085700000000000000000000000000000000000FB +:1085800000000000000000000000000000000000EB +:1085900000000000000000000000000000000000DB +:1085A00000000000000000000000000000000000CB +:1085B00000000000000000000000000000000000BB +:1085C00000000000000000000000000000000000AB +:1085D000000000000000000000000000000000009B +:1085E000000000000000000000000000000000008B +:1085F000000000000000000000000000000000007B +:10860000000000000000000000000000000000006A +:10861000000000000000000000000000000000005A +:10862000000000000000000000000000000000004A +:10863000000000000000000000000000000000003A +:10864000000000000000000000000000000000002A +:10865000000000000000000000000000000000001A +:10866000000000000000000000000000000000000A +:1086700000000000000000000000000000000000FA +:1086800000000000000000000000000000000000EA +:1086900000000000000000000000000000000000DA +:1086A00000000000000000000000000000000000CA +:1086B00000000000000000000000000000000000BA +:1086C00000000000000000000000000000000000AA +:1086D000000000000000000000000000000000009A +:1086E000000000000000000000000000000000008A +:1086F000000000000000000000000000000000007A +:108700000000000000000000000000000000000069 +:108710000000000000000000000000000000000059 +:108720000000000000000000000000000000000049 +:108730000000000000000000000000000000000039 +:108740000000000000000000000000000000000029 +:108750000000000000000000000000000000000019 +:108760000000000000000000000000000000000009 +:1087700000000000000000000000000000000000F9 +:1087800000000000000000000000000000000000E9 +:1087900000000000000000000000000000000000D9 +:1087A00000000000000000000000000000000000C9 +:1087B00000000000000000000000000000000000B9 +:1087C00000000000000000000000000000000000A9 +:1087D0000000000000000000000000000000000099 +:1087E0000000000000000000000000000000000089 +:1087F0000000000000000000000000000000000079 +:108800000000000000000000000000000000000068 +:108810000000000000000000000000000000000058 +:108820000000000000000000000000000000000048 +:108830000000000000000000000000000000000038 +:108840000000000000000000000000000000000028 +:108850000000000000000000000000000000000018 +:108860000000000000000000000000000000000008 +:1088700000000000000000000000000000000000F8 +:1088800000000000000000000000000000000000E8 +:1088900000000000000000000000000000000000D8 +:1088A00000000000000000000000000000000000C8 +:1088B00000000000000000000000000000000000B8 +:1088C00000000000000000000000000000000000A8 +:1088D0000000000000000000000000000000000098 +:1088E0000000000000000000000000000000000088 +:1088F0000000000000000000000000000000000078 +:108900000000000000000000000000000000000067 +:108910000000000000000000000000000000000057 +:108920000000000000000000000000000000000047 +:108930000000000000000000000000000000000037 +:108940000000000000000000000000000000000027 +:108950000000000000000000000000000000000017 +:108960000000000000000000000000000000000007 +:1089700000000000000000000000000000000000F7 +:1089800000000000000000000000000000000000E7 +:1089900000000000000000000000000000000000D7 +:1089A00000000000000000000000000000000000C7 +:1089B00000000000000000000000000000000000B7 +:1089C00000000000000000000000000000000000A7 +:1089D0000000000000000000000000000000000097 +:1089E0000000000000000000000000000000000087 +:1089F0000000000000000000000000000000000077 +:108A00000000000000000000000000000000000066 +:108A10000000000000000000000000000000000056 +:108A20000000000000000000000000000000000046 +:108A30000000000000000000000000000000000036 +:108A40000000000000000000000000000000000026 +:108A50000000000000000000000000000000000016 +:108A60000000000000000000000000000000000006 +:108A700000000000000000000000000000000000F6 +:108A800000000000000000000000000000000000E6 +:108A900000000000000000000000000000000000D6 +:108AA00000000000000000000000000000000000C6 +:108AB00000000000000000000000000000000000B6 +:108AC00000000000000000000000000000000000A6 +:108AD0000000000000000000000000000000000096 +:108AE0000000000000000000000000000000000086 +:108AF0000000000000000000000000000000000076 +:108B00000000000000000000000000000000000065 +:108B10000000000000000000000000000000000055 +:108B20000000000000000000000000000000000045 +:108B30000000000000000000000000000000000035 +:108B40000000000000000000000000000000000025 +:108B50000000000000000000000000000000000015 +:108B60000000000000000000000000000000000005 +:108B700000000000000000000000000000000000F5 +:108B800000000000000000000000000000000000E5 +:108B900000000000000000000000000000000000D5 +:108BA00000000000000000000000000000000000C5 +:108BB00000000000000000000000000000000000B5 +:108BC00000000000000000000000000000000000A5 +:108BD0000000000000000000000000000000000095 +:108BE0000000000000000000000000000000000085 +:108BF0000000000000000000000000000000000075 +:108C00000000000000000000000000000000000064 +:108C10000000000000000000000000000000000054 +:108C20000000000000000000000000000000000044 +:108C30000000000000000000000000000000000034 +:108C40000000000000000000000000000000000024 +:108C50000000000000000000000000000000000014 +:108C60000000000000000000000000000000000004 +:108C700000000000000000000000000000000000F4 +:108C800000000000000000000000000000000000E4 +:108C900000000000000000000000000000000000D4 +:108CA00000000000000000000000000000000000C4 +:108CB00000000000000000000000000000000000B4 +:108CC00000000000000000000000000000000000A4 +:108CD0000000000000000000000000000000000094 +:108CE0000000000000000000000000000000000084 +:108CF0000000000000000000000000000000000074 +:108D00000000000000000000000000000000000063 +:108D10000000000000000000000000000000000053 +:108D20000000000000000000000000000000000043 +:108D30000000000000000000000000000000000033 +:108D40000000000000000000000000000000000023 +:108D50000000000000000000000000000000000013 +:108D60000000000000000000000000000000000003 +:108D700000000000000000000000000000000000F3 +:108D800000000000000000000000000000000000E3 +:108D900000000000000000000000000000000000D3 +:108DA00000000000000000000000000000000000C3 +:108DB00000000000000000000000000000000000B3 +:108DC00000000000000000000000000000000000A3 +:108DD0000000000000000000000000000000000093 +:108DE0000000000000000000000000000000000083 +:108DF0000000000000000000000000000000000073 +:108E00000000000000000000000000000000000062 +:108E10000000000000000000000000000000000052 +:108E20000000000000000000000000000000000042 +:108E30000000000000000000000000000000000032 +:108E40000000000000000000000000000000000022 +:108E50000000000000000000000000000000000012 +:108E60000000000000000000000000000000000002 +:108E700000000000000000000000000000000000F2 +:108E800000000000000000000000000000000000E2 +:108E900000000000000000000000000000000000D2 +:108EA00000000000000000000000000000000000C2 +:108EB00000000000000000000000000000000000B2 +:108EC00000000000000000000000000000000000A2 +:108ED0000000000000000000000000000000000092 +:108EE0000000000000000000000000000000000082 +:108EF0000000000000000000000000000000000072 +:108F00000000000000000000000000000000000061 +:108F10000000000000000000000000000000000051 +:108F20000000000000000000000000000000000041 +:108F30000000000000000000000000000000000031 +:108F40000000000000000000000000000000000021 +:108F50000000000000000000000000000000000011 +:108F60000000000000000000000000000000000001 +:108F700000000000000000000000000000000000F1 +:108F800000000000000000000000000000000000E1 +:108F900000000000000000000000000000000000D1 +:108FA00000000000000000000000000000000000C1 +:108FB00000000000000000000000000000000000B1 +:108FC00000000000000000000000000000000000A1 +:108FD0000000000000000000000000000000000091 +:108FE0000000000000000000000000000000000081 +:108FF0000000000000000000000000000000000071 +:109000000000000000000000000000000000000060 +:109010000000000000000000000000000000000050 +:109020000000000000000000000000000000000040 +:109030000000000000000000000000000000000030 +:109040000000000000000000000000000000000020 +:109050000000000000000000000000000000000010 +:109060000000000000000000000000000000000000 +:1090700000000000000000000000000000000000F0 +:1090800000000000000000000000000000000000E0 +:1090900000000000000000000000000000000000D0 +:1090A00000000000000000000000000000000000C0 +:1090B00000000000000000000000000000000000B0 +:1090C00000000000000000000000000000000000A0 +:1090D0000000000000000000000000000000000090 +:1090E0000000000000000000000000000000000080 +:1090F0000000000000000000000000000000000070 +:10910000000000000000000000000000000000005F +:10911000000000000000000000000000000000004F +:10912000000000000000000000000000000000003F +:10913000000000000000000000000000000000002F +:10914000000000000000000000000000000000001F +:10915000000000000000000000000000000000000F +:1091600000000000000000000000000000000000FF +:1091700000000000000000000000000000000000EF +:1091800000000000000000000000000000000000DF +:1091900000000000000000000000000000000000CF +:1091A00000000000000000000000000000000000BF +:1091B00000000000000000000000000000000000AF +:1091C000000000000000000000000000000000009F +:1091D000000000000000000000000000000000008F +:1091E000000000000000000000000000000000007F +:1091F000000000000000000000000000000000006F +:10920000000000000000000000000000000000005E +:10921000000000000000000000000000000000004E +:10922000000000000000000000000000000000003E +:10923000000000000000000000000000000000002E +:10924000000000000000000000000000000000001E +:10925000000000000000000000000000000000000E +:1092600000000000000000000000000000000000FE +:1092700000000000000000000000000000000000EE +:1092800000000000000000000000000000000000DE +:1092900000000000000000000000000000000000CE +:1092A00000000000000000000000000000000000BE +:1092B00000000000000000000000000000000000AE +:1092C000000000000000000000000000000000009E +:1092D000000000000000000000000000000000008E +:1092E000000000000000000000000000000000007E +:1092F000000000000000000000000000000000006E +:10930000000000000000000000000000000000005D +:10931000000000000000000000000000000000004D +:10932000000000000000000000000000000000003D +:10933000000000000000000000000000000000002D +:10934000000000000000000000000000000000001D +:10935000000000000000000000000000000000000D +:1093600000000000000000000000000000000000FD +:1093700000000000000000000000000000000000ED +:1093800000000000000000000000000000000000DD +:1093900000000000000000000000000000000000CD +:1093A00000000000000000000000000000000000BD +:1093B00000000000000000000000000000000000AD +:1093C000000000000000000000000000000000009D +:1093D000000000000000000000000000000000008D +:1093E000000000000000000000000000000000007D +:1093F000000000000000000000000000000000006D +:10940000000000000000000000000000000000005C +:10941000000000000000000000000000000000004C +:10942000000000000000000000000000000000003C +:10943000000000000000000000000000000000002C +:10944000000000000000000000000000000000001C +:10945000000000000000000000000000000000000C +:1094600000000000000000000000000000000000FC +:1094700000000000000000000000000000000000EC +:1094800000000000000000000000000000000000DC +:1094900000000000000000000000000000000000CC +:1094A00000000000000000000000000000000000BC +:1094B00000000000000000000000000000000000AC +:1094C000000000000000000000000000000000009C +:1094D000000000000000000000000000000000008C +:1094E000000000000000000000000000000000007C +:1094F000000000000000000000000000000000006C +:10950000000000000000000000000000000000005B +:10951000000000000000000000000000000000004B +:10952000000000000000000000000000000000003B +:10953000000000000000000000000000000000002B +:10954000000000000000000000000000000000001B +:10955000000000000000000000000000000000000B +:1095600000000000000000000000000000000000FB +:1095700000000000000000000000000000000000EB +:1095800000000000000000000000000000000000DB +:1095900000000000000000000000000000000000CB +:1095A00000000000000000000000000000000000BB +:1095B00000000000000000000000000000000000AB +:1095C000000000000000000000000000000000009B +:1095D000000000000000000000000000000000008B +:1095E000000000000000000000000000000000007B +:1095F000000000000000000000000000000000006B +:10960000000000000000000000000000000000005A +:10961000000000000000000000000000000000004A +:10962000000000000000000000000000000000003A +:10963000000000000000000000000000000000002A +:10964000000000000000000000000000000000001A +:10965000000000000000000000000000000000000A +:1096600000000000000000000000000000000000FA +:1096700000000000000000000000000000000000EA +:1096800000000000000000000000000000000000DA +:1096900000000000000000000000000000000000CA +:1096A00000000000000000000000000000000000BA +:1096B00000000000000000000000000000000000AA +:1096C000000000000000000000000000000000009A +:1096D000000000000000000000000000000000008A +:1096E000000000000000000000000000000000007A +:1096F000000000000000000000000000000000006A +:109700000000000000000000000000000000000059 +:109710000000000000000000000000000000000049 +:109720000000000000000000000000000000000039 +:109730000000000000000000000000000000000029 +:109740000000000000000000000000000000000019 +:109750000000000000000000000000000000000009 +:1097600000000000000000000000000000000000F9 +:1097700000000000000000000000000000000000E9 +:1097800000000000000000000000000000000000D9 +:1097900000000000000000000000000000000000C9 +:1097A00000000000000000000000000000000000B9 +:1097B00000000000000000000000000000000000A9 +:1097C0000000000000000000000000000000000099 +:1097D0000000000000000000000000000000000089 +:1097E0000000000000000000000000000000000079 +:1097F0000000000000000000000000000000000069 +:109800000000000000000000000000000000000058 +:109810000000000000000000000000000000000048 +:109820000000000000000000000000000000000038 +:109830000000000000000000000000000000000028 +:109840000000000000000000000000000000000018 +:109850000000000000000000000000000000000008 +:1098600000000000000000000000000000000000F8 +:1098700000000000000000000000000000000000E8 +:1098800000000000000000000000000000000000D8 +:1098900000000000000000000000000000000000C8 +:1098A00000000000000000000000000000000000B8 +:1098B00000000000000000000000000000000000A8 +:1098C0000000000000000000000000000000000098 +:1098D0000000000000000000000000000000000088 +:1098E0000000000000000000000000000000000078 +:1098F0000000000000000000000000000000000068 +:109900000000000000000000000000000000000057 +:109910000000000000000000000000000000000047 +:109920000000000000000000000000000000000037 +:109930000000000000000000000000000000000027 +:109940000000000000000000000000000000000017 +:109950000000000000000000000000000000000007 +:1099600000000000000000000000000000000000F7 +:1099700000000000000000000000000000000000E7 +:1099800000000000000000000000000000000000D7 +:1099900000000000000000000000000000000000C7 +:1099A00000000000000000000000000000000000B7 +:1099B00000000000000000000000000000000000A7 +:1099C0000000000000000000000000000000000097 +:1099D0000000000000000000000000000000000087 +:1099E0000000000000000000000000000000000077 +:1099F0000000000000000000000000000000000067 +:109A00000000000000000000000000000000000056 +:109A10000000000000000000000000000000000046 +:109A20000000000000000000000000000000000036 +:109A30000000000000000000000000000000000026 +:109A40000000000000000000000000000000000016 +:109A50000000000000000000000000000000000006 +:109A600000000000000000000000000000000000F6 +:109A700000000000000000000000000000000000E6 +:109A800000000000000000000000000000000000D6 +:109A900000000000000000000000000000000000C6 +:109AA00000000000000000000000000000000000B6 +:109AB00000000000000000000000000000000000A6 +:109AC0000000000000000000000000000000000096 +:109AD0000000000000000000000000000000000086 +:109AE0000000000000000000000000000000000076 +:109AF0000000000000000000000000000000000066 +:109B00000000000000000000000000000000000055 +:109B10000000000000000000000000000000000045 +:109B20000000000000000000000000000000000035 +:109B30000000000000000000000000000000000025 +:109B40000000000000000000000000000000000015 +:109B50000000000000000000000000000000000005 +:109B600000000000000000000000000000000000F5 +:109B700000000000000000000000000000000000E5 +:109B800000000000000000000000000000000000D5 +:109B900000000000000000000000000000000000C5 +:109BA00000000000000000000000000000000000B5 +:109BB00000000000000000000000000000000000A5 +:109BC0000000000000000000000000000000000095 +:109BD0000000000000000000000000000000000085 +:109BE0000000000000000000000000000000000075 +:109BF0000000000000000000000000000000000065 +:109C00000000000000000000000000000000000054 +:109C10000000000000000000000000000000000044 +:109C20000000000000000000000000000000000034 +:109C30000000000000000000000000000000000024 +:109C40000000000000000000000000000000000014 +:109C50000000000000000000000000000000000004 +:109C600000000000000000000000000000000000F4 +:109C700000000000000000000000000000000000E4 +:109C800000000000000000000000000000000000D4 +:109C900000000000000000000000000000000000C4 +:109CA00000000000000000000000000000000000B4 +:109CB00000000000000000000000000000000000A4 +:109CC0000000000000000000000000000000000094 +:109CD0000000000000000000000000000000000084 +:109CE0000000000000000000000000000000000074 +:109CF0000000000000000000000000000000000064 +:109D00000000000000000000000000000000000053 +:109D10000000000000000000000000000000000043 +:109D20000000000000000000000000000000000033 +:109D30000000000000000000000000000000000023 +:109D40000000000000000000000000000000000013 +:109D50000000000000000000000000000000000003 +:109D600000000000000000000000000000000000F3 +:109D700000000000000000000000000000000000E3 +:109D800000000000000000000000000000000000D3 +:109D900000000000000000000000000000000000C3 +:109DA00000000000000000000000000000000000B3 +:109DB00000000000000000000000000000000000A3 +:109DC0000000000000000000000000000000000093 +:109DD0000000000000000000000000000000000083 +:109DE0000000000000000000000000000000000073 +:109DF0000000000000000000000000000000000063 +:109E00000000000000000000000000000000000052 +:109E10000000000000000000000000000000000042 +:109E20000000000000000000000000000000000032 +:109E30000000000000000000000000000000000022 +:109E40000000000000000000000000000000000012 +:109E50000000000000000000000000000000000002 +:109E600000000000000000000000000000000000F2 +:109E700000000000000000000000000000000000E2 +:109E800000000000000000000000000000000000D2 +:109E900000000000000000000000000000000000C2 +:109EA00000000000000000000000000000000000B2 +:109EB00000000000000000000000000000000000A2 +:109EC0000000000000000000000000000000000092 +:109ED0000000000000000000000000000000000082 +:109EE0000000000000000000000000000000000072 +:109EF0000000000000000000000000000000000062 +:109F00000000000000000000000000000000000051 +:109F10000000000000000000000000000000000041 +:109F20000000000000000000000000000000000031 +:109F30000000000000000000000000000000000021 +:109F40000000000000000000000000000000000011 +:109F50000000000000000000000000000000000001 +:109F600000000000000000000000000000000000F1 +:109F700000000000000000000000000000000000E1 +:109F800000000000000000000000000000000000D1 +:109F900000000000000000000000000000000000C1 +:109FA00000000000000000000000000000000000B1 +:109FB00000000000000000000000000000000000A1 +:109FC0000000000000000000000000000000000091 +:109FD0000000000000000000000000000000000081 +:109FE0000000000000000000000000000000000071 +:109FF0000000000000000000000000000000000061 +:10A000000000000000000000000000000000000050 +:10A010000000000000000000000000000000000040 +:10A020000000000000000000000000000000000030 +:10A030000000000000000000000000000000000020 +:10A040000000000000000000000000000000000010 +:10A050000000000000000000000000000000000000 +:10A0600000000000000000000000000000000000F0 +:10A0700000000000000000000000000000000000E0 +:10A0800000000000000000000000000000000000D0 +:10A0900000000000000000000000000000000000C0 +:10A0A00000000000000000000000000000000000B0 +:10A0B00000000000000000000000000000000000A0 +:10A0C0000000000000000000000000000000000090 +:10A0D0000000000000000000000000000000000080 +:10A0E0000000000000000000000000000000000070 +:10A0F0000000000000000000000000000000000060 +:10A10000000000000000000000000000000000004F +:10A11000000000000000000000000000000000003F +:10A12000000000000000000000000000000000002F +:10A13000000000000000000000000000000000001F +:10A14000000000000000000000000000000000000F +:10A1500000000000000000000000000000000000FF +:10A1600000000000000000000000000000000000EF +:10A1700000000000000000000000000000000000DF +:10A1800000000000000000000000000000000000CF +:10A1900000000000000000000000000000000000BF +:10A1A00000000000000000000000000000000000AF +:10A1B000000000000000000000000000000000009F +:10A1C000000000000000000000000000000000008F +:10A1D000000000000000000000000000000000007F +:10A1E000000000000000000000000000000000006F +:10A1F000000000000000000000000000000000005F +:10A20000000000000000000000000000000000004E +:10A21000000000000000000000000000000000003E +:10A22000000000000000000000000000000000002E +:10A23000000000000000000000000000000000001E +:10A24000000000000000000000000000000000000E +:10A2500000000000000000000000000000000000FE +:10A2600000000000000000000000000000000000EE +:10A2700000000000000000000000000000000000DE +:10A2800000000000000000000000000000000000CE +:10A2900000000000000000000000000000000000BE +:10A2A00000000000000000000000000000000000AE +:10A2B000000000000000000000000000000000009E +:10A2C000000000000000000000000000000000008E +:10A2D000000000000000000000000000000000007E +:10A2E000000000000000000000000000000000006E +:10A2F000000000000000000000000000000000005E +:10A30000000000000000000000000000000000004D +:10A31000000000000000000000000000000000003D +:10A32000000000000000000000000000000000002D +:10A33000000000000000000000000000000000001D +:10A34000000000000000000000000000000000000D +:10A3500000000000000000000000000000000000FD +:10A3600000000000000000000000000000000000ED +:10A3700000000000000000000000000000000000DD +:10A3800000000000000000000000000000000000CD +:10A3900000000000000000000000000000000000BD +:10A3A00000000000000000000000000000000000AD +:10A3B000000000000000000000000000000000009D +:10A3C000000000000000000000000000000000008D +:10A3D000000000000000000000000000000000007D +:10A3E000000000000000000000000000000000006D +:10A3F000000000000000000000000000000000005D +:10A40000000000000000000000000000000000004C +:10A41000000000000000000000000000000000003C +:10A42000000000000000000000000000000000002C +:10A43000000000000000000000000000000000001C +:10A44000000000000000000000000000000000000C +:10A4500000000000000000000000000000000000FC +:10A4600000000000000000000000000000000000EC +:10A4700000000000000000000000000000000000DC +:10A4800000000000000000000000000000000000CC +:10A4900000000000000000000000000000000000BC +:10A4A00000000000000000000000000000000000AC +:10A4B000000000000000000000000000000000009C +:10A4C000000000000000000000000000000000008C +:10A4D000000000000000000000000000000000007C +:10A4E000000000000000000000000000000000006C +:10A4F000000000000000000000000000000000005C +:10A50000000000000000000000000000000000004B +:10A51000000000000000000000000000000000003B +:10A52000000000000000000000000000000000002B +:10A53000000000000000000000000000000000001B +:10A54000000000000000000000000000000000000B +:10A5500000000000000000000000000000000000FB +:10A5600000000000000000000000000000000000EB +:10A5700000000000000000000000000000000000DB +:10A5800000000000000000000000000000000000CB +:10A5900000000000000000000000000000000000BB +:10A5A00000000000000000000000000000000000AB +:10A5B000000000000000000000000000000000009B +:10A5C000000000000000000000000000000000008B +:10A5D000000000000000000000000000000000007B +:10A5E000000000000000000000000000000000006B +:10A5F000000000000000000000000000000000005B +:10A60000000000000000000000000000000000004A +:10A61000000000000000000000000000000000003A +:10A62000000000000000000000000000000000002A +:10A63000000000000000000000000000000000001A +:10A64000000000000000000000000000000000000A +:10A6500000000000000000000000000000000000FA +:10A6600000000000000000000000000000000000EA +:10A6700000000000000000000000000000000000DA +:10A6800000000000000000000000000000000000CA +:10A6900000000000000000000000000000000000BA +:10A6A00000000000000000000000000000000000AA +:10A6B000000000000000000000000000000000009A +:10A6C000000000000000000000000000000000008A +:10A6D000000000000000000000000000000000007A +:10A6E000000000000000000000000000000000006A +:10A6F000000000000000000000000000000000005A +:10A700000000000000000000000000000000000049 +:10A710000000000000000000000000000000000039 +:10A720000000000000000000000000000000000029 +:10A730000000000000000000000000000000000019 +:10A740000000000000000000000000000000000009 +:10A7500000000000000000000000000000000000F9 +:10A7600000000000000000000000000000000000E9 +:10A7700000000000000000000000000000000000D9 +:10A7800000000000000000000000000000000000C9 +:10A7900000000000000000000000000000000000B9 +:10A7A00000000000000000000000000000000000A9 +:10A7B0000000000000000000000000000000000099 +:10A7C0000000000000000000000000000000000089 +:10A7D0000000000000000000000000000000000079 +:10A7E0000000000000000000000000000000000069 +:10A7F0000000000000000000000000000000000059 +:10A800000000000000000000000000000000000048 +:10A810000000000000000000000000000000000038 +:10A820000000000000000000000000000000000028 +:10A830000000000000000000000000000000000018 +:10A840000000000000000000000000000000000008 +:10A8500000000000000000000000000000000000F8 +:10A8600000000000000000000000000000000000E8 +:10A8700000000000000000000000000000000000D8 +:10A8800000000000000000000000000000000000C8 +:10A8900000000000000000000000000000000000B8 +:10A8A00000000000000000000000000000000000A8 +:10A8B0000000000000000000000000000000000098 +:10A8C0000000000000000000000000000000000088 +:10A8D0000000000000000000000000000000000078 +:10A8E0000000000000000000000000000000000068 +:10A8F0000000000000000000000000000000000058 +:10A900000000000000000000000000000000000047 +:10A910000000000000000000000000000000000037 +:10A920000000000000000000000000000000000027 +:10A930000000000000000000000000000000000017 +:10A940000000000000000000000000000000000007 +:10A9500000000000000000000000000000000000F7 +:10A9600000000000000000000000000000000000E7 +:10A9700000000000000000000000000000000000D7 +:10A9800000000000000000000000000000000000C7 +:10A9900000000000000000000000000000000000B7 +:10A9A00000000000000000000000000000000000A7 +:10A9B0000000000000000000000000000000000097 +:10A9C0000000000000000000000000000000000087 +:10A9D0000000000000000000000000000000000077 +:10A9E0000000000000000000000000000000000067 +:10A9F0000000000000000000000000000000000057 +:10AA00000000000000000000000000000000000046 +:10AA10000000000000000000000000000000000036 +:10AA20000000000000000000000000000000000026 +:10AA30000000000000000000000000000000000016 +:10AA40000000000000000000000000000000000006 +:10AA500000000000000000000000000000000000F6 +:10AA600000000000000000000000000000000000E6 +:10AA700000000000000000000000000000000000D6 +:10AA800000000000000000000000000000000000C6 +:10AA900000000000000000000000000000000000B6 +:10AAA00000000000000000000000000000000000A6 +:10AAB0000000000000000000000000000000000096 +:10AAC0000000000000000000000000000000000086 +:10AAD0000000000000000000000000000000000076 +:10AAE0000000000000000000000000000000000066 +:10AAF0000000000000000000000000000000000056 +:10AB00000000000000000000000000000000000045 +:10AB10000000000000000000000000000000000035 +:10AB20000000000000000000000000000000000025 +:10AB30000000000000000000000000000000000015 +:10AB40000000000000000000000000000000000005 +:10AB500000000000000000000000000000000000F5 +:10AB600000000000000000000000000000000000E5 +:10AB700000000000000000000000000000000000D5 +:10AB800000000000000000000000000000000000C5 +:10AB900000000000000000000000000000000000B5 +:10ABA00000000000000000000000000000000000A5 +:10ABB0000000000000000000000000000000000095 +:10ABC0000000000000000000000000000000000085 +:10ABD0000000000000000000000000000000000075 +:10ABE0000000000000000000000000000000000065 +:10ABF0000000000000000000000000000000000055 +:10AC00000000000000000000000000000000000044 +:10AC10000000000000000000000000000000000034 +:10AC20000000000000000000000000000000000024 +:10AC30000000000000000000000000000000000014 +:10AC40000000000000000000000000000000000004 +:10AC500000000000000000000000000000000000F4 +:10AC600000000000000000000000000000000000E4 +:10AC700000000000000000000000000000000000D4 +:10AC800000000000000000000000000000000000C4 +:10AC900000000000000000000000000000000000B4 +:10ACA00000000000000000000000000000000000A4 +:10ACB0000000000000000000000000000000000094 +:10ACC0000000000000000000000000000000000084 +:10ACD0000000000000000000000000000000000074 +:10ACE0000000000000000000000000000000000064 +:10ACF0000000000000000000000000000000000054 +:10AD00000000000000000000000000000000000043 +:10AD10000000000000000000000000000000000033 +:10AD20000000000000000000000000000000000023 +:10AD30000000000000000000000000000000000013 +:10AD40000000000000000000000000000000000003 +:10AD500000000000000000000000000000000000F3 +:10AD600000000000000000000000000000000000E3 +:10AD700000000000000000000000000000000000D3 +:10AD800000000000000000000000000000000000C3 +:10AD900000000000000000000000000000000000B3 +:10ADA00000000000000000000000000000000000A3 +:10ADB0000000000000000000000000000000000093 +:10ADC0000000000000000000000000000000000083 +:10ADD0000000000000000000000000000000000073 +:10ADE0000000000000000000000000000000000063 +:10ADF0000000000000000000000000000000000053 +:10AE00000000000000000000000000000000000042 +:10AE10000000000000000000000000000000000032 +:10AE20000000000000000000000000000000000022 +:10AE30000000000000000000000000000000000012 +:10AE40000000000000000000000000000000000002 +:10AE500000000000000000000000000000000000F2 +:10AE600000000000000000000000000000000000E2 +:10AE700000000000000000000000000000000000D2 +:10AE800000000000000000000000000000000000C2 +:10AE900000000000000000000000000000000000B2 +:10AEA00000000000000000000000000000000000A2 +:10AEB0000000000000000000000000000000000092 +:10AEC0000000000000000000000000000000000082 +:10AED0000000000000000000000000000000000072 +:10AEE0000000000000000000000000000000000062 +:10AEF0000000000000000000000000000000000052 +:10AF00000000000000000000000000000000000041 +:10AF10000000000000000000000000000000000031 +:10AF20000000000000000000000000000000000021 +:10AF30000000000000000000000000000000000011 +:10AF40000000000000000000000000000000000001 +:10AF500000000000000000000000000000000000F1 +:10AF600000000000000000000000000000000000E1 +:10AF700000000000000000000000000000000000D1 +:10AF800000000000000000000000000000000000C1 +:10AF900000000000000000000000000000000000B1 +:10AFA00000000000000000000000000000000000A1 +:10AFB0000000000000000000000000000000000091 +:10AFC0000000000000000000000000000000000081 +:10AFD0000000000000000000000000000000000071 +:10AFE0000000000000000000000000000000000061 +:10AFF0000000000000000000000000000000000051 +:10B000000000000000000000000000000000000040 +:10B010000000000000000000000000000000000030 +:10B020000000000000000000000000000000000020 +:10B030000000000000000000000000000000000010 +:10B040000000000000000000000000000000000000 +:10B0500000000000000000000000000000000000F0 +:10B0600000000000000000000000000000000000E0 +:10B0700000000000000000000000000000000000D0 +:10B0800000000000000000000000000000000000C0 +:10B0900000000000000000000000000000000000B0 +:10B0A00000000000000000000000000000000000A0 +:10B0B0000000000000000000000000000000000090 +:10B0C0000000000000000000000000000000000080 +:10B0D0000000000000000000000000000000000070 +:10B0E0000000000000000000000000000000000060 +:10B0F0000000000000000000000000000000000050 +:10B10000000000000000000000000000000000003F +:10B11000000000000000000000000000000000002F +:10B12000000000000000000000000000000000001F +:10B13000000000000000000000000000000000000F +:10B1400000000000000000000000000000000000FF +:10B1500000000000000000000000000000000000EF +:10B1600000000000000000000000000000000000DF +:10B1700000000000000000000000000000000000CF +:10B1800000000000000000000000000000000000BF +:10B1900000000000000000000000000000000000AF +:10B1A000000000000000000000000000000000009F +:10B1B000000000000000000000000000000000008F +:10B1C000000000000000000000000000000000007F +:10B1D000000000000000000000000000000000006F +:10B1E000000000000000000000000000000000005F +:10B1F000000000000000000000000000000000004F +:10B20000000000000000000000000000000000003E +:10B21000000000000000000000000000000000002E +:10B22000000000000000000000000000000000001E +:10B23000000000000000000000000000000000000E +:10B2400000000000000000000000000000000000FE +:10B2500000000000000000000000000000000000EE +:10B2600000000000000000000000000000000000DE +:10B2700000000000000000000000000000000000CE +:10B2800000000000000000000000000000000000BE +:10B2900000000000000000000000000000000000AE +:10B2A000000000000000000000000000000000009E +:10B2B000000000000000000000000000000000008E +:10B2C000000000000000000000000000000000007E +:10B2D000000000000000000000000000000000006E +:10B2E000000000000000000000000000000000005E +:10B2F000000000000000000000000000000000004E +:10B30000000000000000000000000000000000003D +:10B31000000000000000000000000000000000002D +:10B32000000000000000000000000000000000001D +:10B33000000000000000000000000000000000000D +:10B3400000000000000000000000000000000000FD +:10B3500000000000000000000000000000000000ED +:10B3600000000000000000000000000000000000DD +:10B3700000000000000000000000000000000000CD +:10B3800000000000000000000000000000000000BD +:10B3900000000000000000000000000000000000AD +:10B3A000000000000000000000000000000000009D +:10B3B000000000000000000000000000000000008D +:10B3C000000000000000000000000000000000007D +:10B3D000000000000000000000000000000000006D +:10B3E000000000000000000000000000000000005D +:10B3F000000000000000000000000000000000004D +:10B40000000000000000000000000000000000003C +:10B41000000000000000000000000000000000002C +:10B42000000000000000000000000000000000001C +:10B43000000000000000000000000000000000000C +:10B4400000000000000000000000000000000000FC +:10B4500000000000000000000000000000000000EC +:10B4600000000000000000000000000000000000DC +:10B4700000000000000000000000000000000000CC +:10B4800000000000000000000000000000000000BC +:10B4900000000000000000000000000000000000AC +:10B4A000000000000000000000000000000000009C +:10B4B000000000000000000000000000000000008C +:10B4C000000000000000000000000000000000007C +:10B4D000000000000000000000000000000000006C +:10B4E000000000000000000000000000000000005C +:10B4F000000000000000000000000000000000004C +:10B50000000000000000000000000000000000003B +:10B51000000000000000000000000000000000002B +:10B52000000000000000000000000000000000001B +:10B53000000000000000000000000000000000000B +:10B5400000000000000000000000000000000000FB +:10B5500000000000000000000000000000000000EB +:10B5600000000000000000000000000000000000DB +:10B5700000000000000000000000000000000000CB +:10B5800000000000000000000000000000000000BB +:10B5900000000000000000000000000000000000AB +:10B5A000000000000000000000000000000000009B +:10B5B000000000000000000000000000000000008B +:10B5C000000000000000000000000000000000007B +:10B5D000000000000000000000000000000000006B +:10B5E000000000000000000000000000000000005B +:10B5F000000000000000000000000000000000004B +:10B60000000000000000000000000000000000003A +:10B61000000000000000000000000000000000002A +:10B62000000000000000000000000000000000001A +:10B63000000000000000000000000000000000000A +:10B6400000000000000000000000000000000000FA +:10B6500000000000000000000000000000000000EA +:10B6600000000000000000000000000000000000DA +:10B6700000000000000000000000000000000000CA +:10B6800000000000000000000000000000000000BA +:10B6900000000000000000000000000000000000AA +:10B6A000000000000000000000000000000000009A +:10B6B000000000000000000000000000000000008A +:10B6C000000000000000000000000000000000007A +:10B6D000000000000000000000000000000000006A +:10B6E000000000000000000000000000000000005A +:10B6F000000000000000000000000000000000004A +:10B700000000000000000000000000000000000039 +:10B710000000000000000000000000000000000029 +:10B720000000000000000000000000000000000019 +:10B730000000000000000000000000000000000009 +:10B7400000000000000000000000000000000000F9 +:10B7500000000000000000000000000000000000E9 +:10B7600000000000000000000000000000000000D9 +:10B7700000000000000000000000000000000000C9 +:10B7800000000000000000000000000000000000B9 +:10B7900000000000000000000000000000000000A9 +:10B7A0000000000000000000000000000000000099 +:10B7B0000000000000000000000000000000000089 +:10B7C0000000000000000000000000000000000079 +:10B7D0000000000000000000000000000000000069 +:10B7E0000000000000000000000000000000000059 +:10B7F0000000000000000000000000000000000049 +:10B800000000000000000000000000000000000038 +:10B810000000000000000000000000000000000028 +:10B820000000000000000000000000000000000018 +:10B830000000000000000000000000000000000008 +:10B8400000000000000000000000000000000000F8 +:10B8500000000000000000000000000000000000E8 +:10B8600000000000000000000000000000000000D8 +:10B8700000000000000000000000000000000000C8 +:10B8800000000000000000000000000000000000B8 +:10B8900000000000000000000000000000000000A8 +:10B8A0000000000000000000000000000000000098 +:10B8B0000000000000000000000000000000000088 +:10B8C0000000000000000000000000000000000078 +:10B8D0000000000000000000000000000000000068 +:10B8E0000000000000000000000000000000000058 +:10B8F0000000000000000000000000000000000048 +:10B900000000000000000000000000000000000037 +:10B910000000000000000000000000000000000027 +:10B920000000000000000000000000000000000017 +:10B930000000000000000000000000000000000007 +:10B9400000000000000000000000000000000000F7 +:10B9500000000000000000000000000000000000E7 +:10B9600000000000000000000000000000000000D7 +:10B9700000000000000000000000000000000000C7 +:10B9800000000000000000000000000000000000B7 +:10B9900000000000000000000000000000000000A7 +:10B9A0000000000000000000000000000000000097 +:10B9B0000000000000000000000000000000000087 +:10B9C0000000000000000000000000000000000077 +:10B9D0000000000000000000000000000000000067 +:10B9E0000000000000000000000000000000000057 +:10B9F0000000000000000000000000000000000047 +:10BA00000000000000000000000000000000000036 +:10BA10000000000000000000000000000000000026 +:10BA20000000000000000000000000000000000016 +:10BA30000000000000000000000000000000000006 +:10BA400000000000000000000000000000000000F6 +:10BA500000000000000000000000000000000000E6 +:10BA600000000000000000000000000000000000D6 +:10BA700000000000000000000000000000000000C6 +:10BA800000000000000000000000000000000000B6 +:10BA900000000000000000000000000000000000A6 +:10BAA0000000000000000000000000000000000096 +:10BAB0000000000000000000000000000000000086 +:10BAC0000000000000000000000000000000000076 +:10BAD0000000000000000000000000000000000066 +:10BAE0000000000000000000000000000000000056 +:10BAF0000000000000000000000000000000000046 +:10BB00000000000000000000000000000000000035 +:10BB10000000000000000000000000000000000025 +:10BB20000000000000000000000000000000000015 +:10BB30000000000000000000000000000000000005 +:10BB400000000000000000000000000000000000F5 +:10BB500000000000000000000000000000000000E5 +:10BB600000000000000000000000000000000000D5 +:10BB700000000000000000000000000000000000C5 +:10BB800000000000000000000000000000000000B5 +:10BB900000000000000000000000000000000000A5 +:10BBA0000000000000000000000000000000000095 +:10BBB0000000000000000000000000000000000085 +:10BBC0000000000000000000000000000000000075 +:10BBD0000000000000000000000000000000000065 +:10BBE0000000000000000000000000000000000055 +:10BBF0000000000000000000000000000000000045 +:10BC00000000000000000000000000000000000034 +:10BC10000000000000000000000000000000000024 +:10BC20000000000000000000000000000000000014 +:10BC30000000000000000000000000000000000004 +:10BC400000000000000000000000000000000000F4 +:10BC500000000000000000000000000000000000E4 +:10BC600000000000000000000000000000000000D4 +:10BC700000000000000000000000000000000000C4 +:10BC800000000000000000000000000000000000B4 +:10BC900000000000000000000000000000000000A4 +:10BCA0000000000000000000000000000000000094 +:10BCB0000000000000000000000000000000000084 +:10BCC0000000000000000000000000000000000074 +:10BCD0000000000000000000000000000000000064 +:10BCE0000000000000000000000000000000000054 +:10BCF0000000000000000000000000000000000044 +:10BD00000000000000000000000000000000000033 +:10BD10000000000000000000000000000000000023 +:10BD20000000000000000000000000000000000013 +:10BD30000000000000000000000000000000000003 +:10BD400000000000000000000000000000000000F3 +:10BD500000000000000000000000000000000000E3 +:10BD600000000000000000000000000000000000D3 +:10BD700000000000000000000000000000000000C3 +:10BD800000000000000000000000000000000000B3 +:10BD900000000000000000000000000000000000A3 +:10BDA0000000000000000000000000000000000093 +:10BDB0000000000000000000000000000000000083 +:10BDC0000000000000000000000000000000000073 +:10BDD0000000000000000000000000000000000063 +:10BDE0000000000000000000000000000000000053 +:10BDF0000000000000000000000000000000000043 +:10BE00000000000000000000000000000000000032 +:10BE10000000000000000000000000000000000022 +:10BE20000000000000000000000000000000000012 +:10BE30000000000000000000000000000000000002 +:10BE400000000000000000000000000000000000F2 +:10BE500000000000000000000000000000000000E2 +:10BE600000000000000000000000000000000000D2 +:10BE700000000000000000000000000000000000C2 +:10BE800000000000000000000000000000000000B2 +:10BE900000000000000000000000000000000000A2 +:10BEA0000000000000000000000000000000000092 +:10BEB0000000000000000000000000000000000082 +:10BEC0000000000000000000000000000000000072 +:10BED0000000000000000000000000000000000062 +:10BEE0000000000000000000000000000000000052 +:10BEF0000000000000000000000000000000000042 +:10BF00000000000000000000000000000000000031 +:10BF10000000000000000000000000000000000021 +:10BF20000000000000000000000000000000000011 +:10BF30000000000000000000000000000000000001 +:10BF400000000000000000000000000000000000F1 +:10BF500000000000000000000000000000000000E1 +:10BF600000000000000000000000000000000000D1 +:10BF700000000000000000000000000000000000C1 +:10BF800000000000000000000000000000000000B1 +:10BF900000000000000000000000000000000000A1 +:10BFA0000000000000000000000000000000000091 +:10BFB0000000000000000000000000000000000081 +:10BFC0000000000000000000000000000000000071 +:10BFD0000000000000000000000000000000000061 +:10BFE0000000000000000000000000000000000051 +:10BFF0000000000000000000000000000000000041 +:10C000000000000000000000000000000000000030 +:10C010000000000000000000000000000000000020 +:10C020000000000000000000000000000000000010 +:10C030000000000000000000000000000000000000 +:10C0400000000000000000000000000000000000F0 +:10C0500000000000000000000000000000000000E0 +:10C0600000000000000000000000000000000000D0 +:10C0700000000000000000000000000000000000C0 +:10C0800000000000000000000000000000000000B0 +:10C0900000000000000000000000000000000000A0 +:10C0A0000000000000000000000000000000000090 +:10C0B0000000000000000000000000000000000080 +:10C0C0000000000000000000000000000000000070 +:10C0D0000000000000000000000000000000000060 +:10C0E0000000000000000000000000000000000050 +:10C0F0000000000000000000000000000000000040 +:10C10000000000000000000000000000000000002F +:10C11000000000000000000000000000000000001F +:10C12000000000000000000000000000000000000F +:10C1300000000000000000000000000000000000FF +:10C1400000000000000000000000000000000000EF +:10C1500000000000000000000000000000000000DF +:10C1600000000000000000000000000000000000CF +:10C1700000000000000000000000000000000000BF +:10C1800000000000000000000000000000000000AF +:10C19000000000000000000000000000000000009F +:10C1A000000000000000000000000000000000008F +:10C1B000000000000000000000000000000000007F +:10C1C000000000000000000000000000000000006F +:10C1D000000000000000000000000000000000005F +:10C1E000000000000000000000000000000000004F +:10C1F000000000000000000000000000000000003F +:10C20000000000000000000000000000000000002E +:10C21000000000000000000000000000000000001E +:10C22000000000000000000000000000000000000E +:10C2300000000000000000000000000000000000FE +:10C2400000000000000000000000000000000000EE +:10C2500000000000000000000000000000000000DE +:10C2600000000000000000000000000000000000CE +:10C2700000000000000000000000000000000000BE +:10C2800000000000000000000000000000000000AE +:10C29000000000000000000000000000000000009E +:10C2A000000000000000000000000000000000008E +:10C2B000000000000000000000000000000000007E +:10C2C000000000000000000000000000000000006E +:10C2D000000000000000000000000000000000005E +:10C2E000000000000000000000000000000000004E +:10C2F000000000000000000000000000000000003E +:10C30000000000000000000000000000000000002D +:10C31000000000000000000000000000000000001D +:10C32000000000000000000000000000000000000D +:10C3300000000000000000000000000000000000FD +:10C3400000000000000000000000000000000000ED +:10C3500000000000000000000000000000000000DD +:10C3600000000000000000000000000000000000CD +:10C3700000000000000000000000000000000000BD +:10C3800000000000000000000000000000000000AD +:10C39000000000000000000000000000000000009D +:10C3A000000000000000000000000000000000008D +:10C3B000000000000000000000000000000000007D +:10C3C000000000000000000000000000000000006D +:10C3D000000000000000000000000000000000005D +:10C3E000000000000000000000000000000000004D +:10C3F000000000000000000000000000000000003D +:10C40000000000000000000000000000000000002C +:10C41000000000000000000000000000000000001C +:10C42000000000000000000000000000000000000C +:10C4300000000000000000000000000000000000FC +:10C4400000000000000000000000000000000000EC +:10C4500000000000000000000000000000000000DC +:10C4600000000000000000000000000000000000CC +:10C4700000000000000000000000000000000000BC +:10C4800000000000000000000000000000000000AC +:10C49000000000000000000000000000000000009C +:10C4A000000000000000000000000000000000008C +:10C4B000000000000000000000000000000000007C +:10C4C000000000000000000000000000000000006C +:10C4D000000000000000000000000000000000005C +:10C4E000000000000000000000000000000000004C +:10C4F000000000000000000000000000000000003C +:10C50000000000000000000000000000000000002B +:10C51000000000000000000000000000000000001B +:10C52000000000000000000000000000000000000B +:10C5300000000000000000000000000000000000FB +:10C5400000000000000000000000000000000000EB +:10C5500000000000000000000000000000000000DB +:10C5600000000000000000000000000000000000CB +:10C5700000000000000000000000000000000000BB +:10C5800000000000000000000000000000000000AB +:10C59000000000000000000000000000000000009B +:10C5A000000000000000000000000000000000008B +:10C5B000000000000000000000000000000000007B +:10C5C000000000000000000000000000000000006B +:10C5D000000000000000000000000000000000005B +:10C5E000000000000000000000000000000000004B +:10C5F000000000000000000000000000000000003B +:10C60000000000000000000000000000000000002A +:10C61000000000000000000000000000000000001A +:10C62000000000000000000000000000000000000A +:10C6300000000000000000000000000000000000FA +:10C6400000000000000000000000000000000000EA +:10C6500000000000000000000000000000000000DA +:10C6600000000000000000000000000000000000CA +:10C6700000000000000000000000000000000000BA +:10C6800000000000000000000000000000000000AA +:10C69000000000000000000000000000000000009A +:10C6A000000000000000000000000000000000008A +:10C6B000000000000000000000000000000000007A +:10C6C000000000000000000000000000000000006A +:10C6D000000000000000000000000000000000005A +:10C6E000000000000000000000000000000000004A +:10C6F000000000000000000000000000000000003A +:10C700000000000000000000000000000000000029 +:10C710000000000000000000000000000000000019 +:10C720000000000000000000000000000000000009 +:10C7300000000000000000000000000000000000F9 +:10C7400000000000000000000000000000000000E9 +:10C7500000000000000000000000000000000000D9 +:10C7600000000000000000000000000000000000C9 +:10C7700000000000000000000000000000000000B9 +:10C7800000000000000000000000000000000000A9 +:10C790000000000000000000000000000000000099 +:10C7A0000000000000000000000000000000000089 +:10C7B0000000000000000000000000000000000079 +:10C7C0000000000000000000000000000000000069 +:10C7D0000000000000000000000000000000000059 +:10C7E0000000000000000000000000000000000049 +:10C7F0000000000000000000000000000000000039 +:10C800000000000000000000000000000000000028 +:10C810000000000000000000000000000000000018 +:10C820000000000000000000000000000000000008 +:10C8300000000000000000000000000000000000F8 +:10C8400000000000000000000000000000000000E8 +:10C8500000000000000000000000000000000000D8 +:10C8600000000000000000000000000000000000C8 +:10C8700000000000000000000000000000000000B8 +:10C8800000000000000000000000000000000000A8 +:10C890000000000000000000000000000000000098 +:10C8A0000000000000000000000000000000000088 +:10C8B0000000000000000000000000000000000078 +:10C8C0000000000000000000000000000000000068 +:10C8D0000000000000000000000000000000000058 +:10C8E0000000000000000000000000000000000048 +:10C8F0000000000000000000000000000000000038 +:10C900000000000000000000000000000000000027 +:10C910000000000000000000000000000000000017 +:10C920000000000000000000000000000000000007 +:10C9300000000000000000000000000000000000F7 +:10C9400000000000000000000000000000000000E7 +:10C9500000000000000000000000000000000000D7 +:10C9600000000000000000000000000000000000C7 +:10C9700000000000000000000000000000000000B7 +:10C9800000000000000000000000000000000000A7 +:10C990000000000000000000000000000000000097 +:10C9A0000000000000000000000000000000000087 +:10C9B0000000000000000000000000000000000077 +:10C9C0000000000000000000000000000000000067 +:10C9D0000000000000000000000000000000000057 +:10C9E0000000000000000000000000000000000047 +:10C9F0000000000000000000000000000000000037 +:10CA00000000000000000000000000000000000026 +:10CA10000000000000000000000000000000000016 +:10CA20000000000000000000000000000000000006 +:10CA300000000000000000000000000000000000F6 +:10CA400000000000000000000000000000000000E6 +:10CA500000000000000000000000000000000000D6 +:10CA600000000000000000000000000000000000C6 +:10CA700000000000000000000000000000000000B6 +:10CA800000000000000000000000000000000000A6 +:10CA90000000000000000000000000000000000096 +:10CAA0000000000000000000000000000000000086 +:10CAB0000000000000000000000000000000000076 +:10CAC0000000000000000000000000000000000066 +:10CAD0000000000000000000000000000000000056 +:10CAE0000000000000000000000000000000000046 +:10CAF0000000000000000000000000000000000036 +:10CB00000000000000000000000000000000000025 +:10CB10000000000000000000000000000000000015 +:10CB20000000000000000000000000000000000005 +:10CB300000000000000000000000000000000000F5 +:10CB400000000000000000000000000000000000E5 +:10CB500000000000000000000000000000000000D5 +:10CB600000000000000000000000000000000000C5 +:10CB700000000000000000000000000000000000B5 +:10CB800000000000000000000000000000000000A5 +:10CB90000000000000000000000000000000000095 +:10CBA0000000000000000000000000000000000085 +:10CBB0000000000000000000000000000000000075 +:10CBC0000000000000000000000000000000000065 +:10CBD0000000000000000000000000000000000055 +:10CBE0000000000000000000000000000000000045 +:10CBF0000000000000000000000000000000000035 +:10CC00000000000000000000000000000000000024 +:10CC10000000000000000000000000000000000014 +:10CC20000000000000000000000000000000000004 +:10CC300000000000000000000000000000000000F4 +:10CC400000000000000000000000000000000000E4 +:10CC500000000000000000000000000000000000D4 +:10CC600000000000000000000000000000000000C4 +:10CC700000000000000000000000000000000000B4 +:10CC800000000000000000000000000000000000A4 +:10CC90000000000000000000000000000000000094 +:10CCA0000000000000000000000000000000000084 +:10CCB0000000000000000000000000000000000074 +:10CCC0000000000000000000000000000000000064 +:10CCD0000000000000000000000000000000000054 +:10CCE0000000000000000000000000000000000044 +:10CCF0000000000000000000000000000000000034 +:10CD00000000000000000000000000000000000023 +:10CD10000000000000000000000000000000000013 +:10CD20000000000000000000000000000000000003 +:10CD300000000000000000000000000000000000F3 +:10CD400000000000000000000000000000000000E3 +:10CD500000000000000000000000000000000000D3 +:10CD600000000000000000000000000000000000C3 +:10CD700000000000000000000000000000000000B3 +:10CD800000000000000000000000000000000000A3 +:10CD90000000000000000000000000000000000093 +:10CDA0000000000000000000000000000000000083 +:10CDB0000000000000000000000000000000000073 +:10CDC0000000000000000000000000000000000063 +:10CDD0000000000000000000000000000000000053 +:10CDE0000000000000000000000000000000000043 +:10CDF0000000000000000000000000000000000033 +:10CE00000000000000000000000000000000000022 +:10CE10000000000000000000000000000000000012 +:10CE20000000000000000000000000000000000002 +:10CE300000000000000000000000000000000000F2 +:10CE400000000000000000000000000000000000E2 +:10CE500000000000000000000000000000000000D2 +:10CE600000000000000000000000000000000000C2 +:10CE700000000000000000000000000000000000B2 +:10CE800000000000000000000000000000000000A2 +:10CE90000000000000000000000000000000000092 +:10CEA0000000000000000000000000000000000082 +:10CEB0000000000000000000000000000000000072 +:10CEC0000000000000000000000000000000000062 +:10CED0000000000000000000000000000000000052 +:10CEE0000000000000000000000000000000000042 +:10CEF0000000000000000000000000000000000032 +:10CF00000000000000000000000000000000000021 +:10CF10000000000000000000000000000000000011 +:10CF20000000000000000000000000000000000001 +:10CF300000000000000000000000000000000000F1 +:10CF400000000000000000000000000000000000E1 +:10CF500000000000000000000000000000000000D1 +:10CF600000000000000000000000000000000000C1 +:10CF700000000000000000000000000000000000B1 +:10CF800000000000000000000000000000000000A1 +:10CF90000000000000000000000000000000000091 +:10CFA0000000000000000000000000000000000081 +:10CFB0000000000000000000000000000000000071 +:10CFC0000000000000000000000000000000000061 +:10CFD0000000000000000000000000000000000051 +:10CFE0000000000000000000000000000000000041 +:10CFF0000000000000000000000000000000000031 +:10D000000000000000000000000000000000000020 +:10D010000000000000000000000000000000000010 +:10D020000000000000000000000000000000000000 +:10D0300000000000000000000000000000000000F0 +:10D0400000000000000000000000000000000000E0 +:10D0500000000000000000000000000000000000D0 +:10D0600000000000000000000000000000000000C0 +:10D0700000000000000000000000000000000000B0 +:10D0800000000000000000000000000000000000A0 +:10D090000000000000000000000000000000000090 +:10D0A0000000000000000000000000000000000080 +:10D0B0000000000000000000000000000000000070 +:10D0C0000000000000000000000000000000000060 +:10D0D0000000000000000000000000000000000050 +:10D0E0000000000000000000000000000000000040 +:10D0F0000000000000000000000000000000000030 +:10D10000000000000000000000000000000000001F +:10D11000000000000000000000000000000000000F +:10D1200000000000000000000000000000000000FF +:10D1300000000000000000000000000000000000EF +:10D1400000000000000000000000000000000000DF +:10D1500000000000000000000000000000000000CF +:10D1600000000000000000000000000000000000BF +:10D1700000000000000000000000000000000000AF +:10D18000000000000000000000000000000000009F +:10D19000000000000000000000000000000000008F +:10D1A000000000000000000000000000000000007F +:10D1B000000000000000000000000000000000006F +:10D1C000000000000000000000000000000000005F +:10D1D000000000000000000000000000000000004F +:10D1E000000000000000000000000000000000003F +:10D1F000000000000000000000000000000000002F +:10D20000000000000000000000000000000000001E +:10D21000000000000000000000000000000000000E +:10D2200000000000000000000000000000000000FE +:10D2300000000000000000000000000000000000EE +:10D2400000000000000000000000000000000000DE +:10D2500000000000000000000000000000000000CE +:10D2600000000000000000000000000000000000BE +:10D2700000000000000000000000000000000000AE +:10D28000000000000000000000000000000000009E +:10D29000000000000000000000000000000000008E +:10D2A000000000000000000000000000000000007E +:10D2B000000000000000000000000000000000006E +:10D2C000000000000000000000000000000000005E +:10D2D000000000000000000000000000000000004E +:10D2E000000000000000000000000000000000003E +:10D2F000000000000000000000000000000000002E +:10D30000000000000000000000000000000000001D +:10D31000000000000000000000000000000000000D +:10D3200000000000000000000000000000000000FD +:10D3300000000000000000000000000000000000ED +:10D3400000000000000000000000000000000000DD +:10D3500000000000000000000000000000000000CD +:10D3600000000000000000000000000000000000BD +:10D3700000000000000000000000000000000000AD +:10D38000000000000000000000000000000000009D +:10D39000000000000000000000000000000000008D +:10D3A000000000000000000000000000000000007D +:10D3B000000000000000000000000000000000006D +:10D3C000000000000000000000000000000000005D +:10D3D000000000000000000000000000000000004D +:10D3E000000000000000000000000000000000003D +:10D3F000000000000000000000000000000000002D +:10D40000000000000000000000000000000000001C +:10D41000000000000000000000000000000000000C +:10D4200000000000000000000000000000000000FC +:10D4300000000000000000000000000000000000EC +:10D4400000000000000000000000000000000000DC +:10D4500000000000000000000000000000000000CC +:10D4600000000000000000000000000000000000BC +:10D4700000000000000000000000000000000000AC +:10D48000000000000000000000000000000000009C +:10D49000000000000000000000000000000000008C +:10D4A000000000000000000000000000000000007C +:10D4B000000000000000000000000000000000006C +:10D4C000000000000000000000000000000000005C +:10D4D000000000000000000000000000000000004C +:10D4E000000000000000000000000000000000003C +:10D4F000000000000000000000000000000000002C +:10D50000000000000000000000000000000000001B +:10D51000000000000000000000000000000000000B +:10D5200000000000000000000000000000000000FB +:10D5300000000000000000000000000000000000EB +:10D5400000000000000000000000000000000000DB +:10D5500000000000000000000000000000000000CB +:10D5600000000000000000000000000000000000BB +:10D5700000000000000000000000000000000000AB +:10D58000000000000000000000000000000000009B +:10D59000000000000000000000000000000000008B +:10D5A000000000000000000000000000000000007B +:10D5B000000000000000000000000000000000006B +:10D5C000000000000000000000000000000000005B +:10D5D000000000000000000000000000000000004B +:10D5E000000000000000000000000000000000003B +:10D5F000000000000000000000000000000000002B +:10D60000000000000000000000000000000000001A +:10D61000000000000000000000000000000000000A +:10D6200000000000000000000000000000000000FA +:10D6300000000000000000000000000000000000EA +:10D6400000000000000000000000000000000000DA +:10D6500000000000000000000000000000000000CA +:10D6600000000000000000000000000000000000BA +:10D6700000000000000000000000000000000000AA +:10D68000000000000000000000000000000000009A +:10D69000000000000000000000000000000000008A +:10D6A000000000000000000000000000000000007A +:10D6B000000000000000000000000000000000006A +:10D6C000000000000000000000000000000000005A +:10D6D000000000000000000000000000000000004A +:10D6E000000000000000000000000000000000003A +:10D6F000000000000000000000000000000000002A +:10D700000000000000000000000000000000000019 +:10D710000000000000000000000000000000000009 +:10D7200000000000000000000000000000000000F9 +:10D7300000000000000000000000000000000000E9 +:10D7400000000000000000000000000000000000D9 +:10D7500000000000000000000000000000000000C9 +:10D7600000000000000000000000000000000000B9 +:10D7700000000000000000000000000000000000A9 +:10D780000000000000000000000000000000000099 +:10D790000000000000000000000000000000000089 +:10D7A0000000000000000000000000000000000079 +:10D7B0000000000000000000000000000000000069 +:10D7C0000000000000000000000000000000000059 +:10D7D0000000000000000000000000000000000049 +:10D7E0000000000000000000000000000000000039 +:10D7F0000000000000000000000000000000000029 +:10D800000000000000000000000000000000000018 +:10D810000000000000000000000000000000000008 +:10D8200000000000000000000000000000000000F8 +:10D8300000000000000000000000000000000000E8 +:10D8400000000000000000000000000000000000D8 +:10D8500000000000000000000000000000000000C8 +:10D8600000000000000000000000000000000000B8 +:10D8700000000000000000000000000000000000A8 +:10D880000000000000000000000000000000000098 +:10D890000000000000000000000000000000000088 +:10D8A0000000000000000000000000000000000078 +:10D8B0000000000000000000000000000000000068 +:10D8C0000000000000000000000000000000000058 +:10D8D0000000000000000000000000000000000048 +:10D8E0000000000000000000000000000000000038 +:10D8F0000000000000000000000000000000000028 +:10D900000000000000000000000000000000000017 +:10D910000000000000000000000000000000000007 +:10D9200000000000000000000000000000000000F7 +:10D9300000000000000000000000000000000000E7 +:10D9400000000000000000000000000000000000D7 +:10D9500000000000000000000000000000000000C7 +:10D9600000000000000000000000000000000000B7 +:10D9700000000000000000000000000000000000A7 +:10D980000000000000000000000000000000000097 +:10D990000000000000000000000000000000000087 +:10D9A0000000000000000000000000000000000077 +:10D9B0000000000000000000000000000000000067 +:10D9C0000000000000000000000000000000000057 +:10D9D0000000000000000000000000000000000047 +:10D9E0000000000000000000000000000000000037 +:10D9F0000000000000000000000000000000000027 +:10DA00000000000000000000000000000000000016 +:10DA10000000000000000000000000000000000006 +:10DA200000000000000000000000000000000000F6 +:10DA300000000000000000000000000000000000E6 +:10DA400000000000000000000000000000000000D6 +:10DA500000000000000000000000000000000000C6 +:10DA600000000000000000000000000000000000B6 +:10DA700000000000000000000000000000000000A6 +:10DA80000000000000000000000000000000000096 +:10DA90000000000000000000000000000000000086 +:10DAA0000000000000000000000000000000000076 +:10DAB0000000000000000000000000000000000066 +:10DAC0000000000000000000000000000000000056 +:10DAD0000000000000000000000000000000000046 +:10DAE0000000000000000000000000000000000036 +:10DAF0000000000000000000000000000000000026 +:10DB00000000000000000000000000000000000015 +:10DB10000000000000000000000000000000000005 +:10DB200000000000000000000000000000000000F5 +:10DB300000000000000000000000000000000000E5 +:10DB400000000000000000000000000000000000D5 +:10DB500000000000000000000000000000000000C5 +:10DB600000000000000000000000000000000000B5 +:10DB700000000000000000000000000000000000A5 +:10DB80000000000000000000000000000000000095 +:10DB90000000000000000000000000000000000085 +:10DBA0000000000000000000000000000000000075 +:10DBB0000000000000000000000000000000000065 +:10DBC0000000000000000000000000000000000055 +:10DBD0000000000000000000000000000000000045 +:10DBE0000000000000000000000000000000000035 +:10DBF0000000000000000000000000000000000025 +:10DC00000000000000000000000000000000000014 +:10DC10000000000000000000000000000000000004 +:10DC200000000000000000000000000000000000F4 +:10DC300000000000000000000000000000000000E4 +:10DC400000000000000000000000000000000000D4 +:10DC500000000000000000000000000000000000C4 +:10DC600000000000000000000000000000000000B4 +:10DC700000000000000000000000000000000000A4 +:10DC80000000000000000000000000000000000094 +:10DC90000000000000000000000000000000000084 +:10DCA0000000000000000000000000000000000074 +:10DCB0000000000000000000000000000000000064 +:10DCC0000000000000000000000000000000000054 +:10DCD0000000000000000000000000000000000044 +:10DCE0000000000000000000000000000000000034 +:10DCF0000000000000000000000000000000000024 +:10DD00000000000000000000000000000000000013 +:10DD10000000000000000000000000000000000003 +:10DD200000000000000000000000000000000000F3 +:10DD300000000000000000000000000000000000E3 +:10DD400000000000000000000000000000000000D3 +:10DD500000000000000000000000000000000000C3 +:10DD600000000000000000000000000000000000B3 +:10DD700000000000000000000000000000000000A3 +:10DD80000000000000000000000000000000000093 +:10DD90000000000000000000000000000000000083 +:10DDA0000000000000000000000000000000000073 +:10DDB0000000000000000000000000000000000063 +:10DDC0000000000000000000000000000000000053 +:10DDD0000000000000000000000000000000000043 +:10DDE0000000000000000000000000000000000033 +:10DDF0000000000000000000000000000000000023 +:10DE00000000000000000000000000000000000012 +:10DE10000000000000000000000000000000000002 +:10DE200000000000000000000000000000000000F2 +:10DE300000000000000000000000000000000000E2 +:10DE400000000000000000000000000000000000D2 +:10DE500000000000000000000000000000000000C2 +:10DE600000000000000000000000000000000000B2 +:10DE700000000000000000000000000000000000A2 +:10DE80000000000000000000000000000000000092 +:10DE90000000000000000000000000000000000082 +:10DEA0000000000000000000000000000000000072 +:10DEB0000000000000000000000000000000000062 +:10DEC0000000000000000000000000000000000052 +:10DED0000000000000000000000000000000000042 +:10DEE0000000000000000000000000000000000032 +:10DEF0000000000000000000000000000000000022 +:10DF00000000000000000000000000000000000011 +:10DF10000000000000000000000000000000000001 +:10DF200000000000000000000000000000000000F1 +:10DF300000000000000000000000000000000000E1 +:10DF400000000000000000000000000000000000D1 +:10DF500000000000000000000000000000000000C1 +:10DF600000000000000000000000000000000000B1 +:10DF700000000000000000000000000000000000A1 +:10DF80000000000000000000000000000000000091 +:10DF90000000000000000000000000000000000081 +:10DFA0000000000000000000000000000000000071 +:10DFB0000000000000000000000000000000000061 +:10DFC0000000000000000000000000000000000051 +:10DFD0000000000000000000000000000000000041 +:10DFE0000000000000000000000000000000000031 +:10DFF0000000000000000000000000000000000021 +:10E000000000000000000000000000000000000010 +:10E010000000000000000000000000000000000000 +:10E0200000000000000000000000000000000000F0 +:10E0300000000000000000000000000000000000E0 +:10E0400000000000000000000000000000000000D0 +:10E0500000000000000000000000000000000000C0 +:10E0600000000000000000000000000000000000B0 +:10E0700000000000000000000000000000000000A0 +:10E080000000000000000000000000000000000090 +:10E090000000000000000000000000000000000080 +:10E0A0000000000000000000000000000000000070 +:10E0B0000000000000000000000000000000000060 +:10E0C0000000000000000000000000000000000050 +:10E0D0000000000000000000000000000000000040 +:10E0E0000000000000000000000000000000000030 +:10E0F0000000000000000000000000000000000020 +:10E10000000000000000000000000000000000000F +:10E1100000000000000000000000000000000000FF +:10E1200000000000000000000000000000000000EF +:10E1300000000000000000000000000000000000DF +:10E1400000000000000000000000000000000000CF +:10E1500000000000000000000000000000000000BF +:10E1600000000000000000000000000000000000AF +:10E17000000000000000000000000000000000009F +:10E18000000000000000000000000000000000008F +:10E19000000000000000000000000000000000007F +:10E1A000000000000000000000000000000000006F +:10E1B000000000000000000000000000000000005F +:10E1C000000000000000000000000000000000004F +:10E1D000000000000000000000000000000000003F +:10E1E000000000000000000000000000000000002F +:10E1F000000000000000000000000000000000001F +:10E20000000000000000000000000000000000000E +:10E2100000000000000000000000000000000000FE +:10E2200000000000000000000000000000000000EE +:10E2300000000000000000000000000000000000DE +:10E2400000000000000000000000000000000000CE +:10E2500000000000000000000000000000000000BE +:10E2600000000000000000000000000000000000AE +:10E27000000000000000000000000000000000009E +:10E28000000000000000000000000000000000008E +:10E29000000000000000000000000000000000007E +:10E2A000000000000000000000000000000000006E +:10E2B000000000000000000000000000000000005E +:10E2C000000000000000000000000000000000004E +:10E2D000000000000000000000000000000000003E +:10E2E000000000000000000000000000000000002E +:10E2F000000000000000000000000000000000001E +:10E30000000000000000000000000000000000000D +:10E3100000000000000000000000000000000000FD +:10E3200000000000000000000000000000000000ED +:10E3300000000000000000000000000000000000DD +:10E3400000000000000000000000000000000000CD +:10E3500000000000000000000000000000000000BD +:10E3600000000000000000000000000000000000AD +:10E37000000000000000000000000000000000009D +:10E38000000000000000000000000000000000008D +:10E39000000000000000000000000000000000007D +:10E3A000000000000000000000000000000000006D +:10E3B000000000000000000000000000000000005D +:10E3C000000000000000000000000000000000004D +:10E3D000000000000000000000000000000000003D +:10E3E000000000000000000000000000000000002D +:10E3F000000000000000000000000000000000001D +:10E40000000000000000000000000000000000000C +:10E4100000000000000000000000000000000000FC +:10E4200000000000000000000000000000000000EC +:10E4300000000000000000000000000000000000DC +:10E4400000000000000000000000000000000000CC +:10E4500000000000000000000000000000000000BC +:10E4600000000000000000000000000000000000AC +:10E47000000000000000000000000000000000009C +:10E48000000000000000000000000000000000008C +:10E49000000000000000000000000000000000007C +:10E4A000000000000000000000000000000000006C +:10E4B000000000000000000000000000000000005C +:10E4C000000000000000000000000000000000004C +:10E4D000000000000000000000000000000000003C +:10E4E000000000000000000000000000000000002C +:10E4F000000000000000000000000000000000001C +:10E50000000000000000000000000000000000000B +:10E5100000000000000000000000000000000000FB +:10E5200000000000000000000000000000000000EB +:10E5300000000000000000000000000000000000DB +:10E5400000000000000000000000000000000000CB +:10E5500000000000000000000000000000000000BB +:10E5600000000000000000000000000000000000AB +:10E57000000000000000000000000000000000009B +:10E58000000000000000000000000000000000008B +:10E59000000000000000000000000000000000007B +:10E5A000000000000000000000000000000000006B +:10E5B000000000000000000000000000000000005B +:10E5C000000000000000000000000000000000004B +:10E5D000000000000000000000000000000000003B +:10E5E000000000000000000000000000000000002B +:10E5F000000000000000000000000000000000001B +:10E60000000000000000000000000000000000000A +:10E6100000000000000000000000000000000000FA +:10E6200000000000000000000000000000000000EA +:10E6300000000000000000000000000000000000DA +:10E6400000000000000000000000000000000000CA +:10E6500000000000000000000000000000000000BA +:10E6600000000000000000000000000000000000AA +:10E67000000000000000000000000000000000009A +:10E68000000000000000000000000000000000008A +:10E69000000000000000000000000000000000007A +:10E6A000000000000000000000000000000000006A +:10E6B000000000000000000000000000000000005A +:10E6C000000000000000000000000000000000004A +:10E6D000000000000000000000000000000000003A +:10E6E000000000000000000000000000000000002A +:10E6F000000000000000000000000000000000001A +:10E700000000000000000000000000000000000009 +:10E7100000000000000000000000000000000000F9 +:10E7200000000000000000000000000000000000E9 +:10E7300000000000000000000000000000000000D9 +:10E7400000000000000000000000000000000000C9 +:10E7500000000000000000000000000000000000B9 +:10E7600000000000000000000000000000000000A9 +:10E770000000000000000000000000000000000099 +:10E780000000000000000000000000000000000089 +:10E790000000000000000000000000000000000079 +:10E7A0000000000000000000000000000000000069 +:10E7B0000000000000000000000000000000000059 +:10E7C0000000000000000000000000000000000049 +:10E7D0000000000000000000000000000000000039 +:10E7E0000000000000000000000000000000000029 +:10E7F0000000000000000000000000000000000019 +:10E800000000000000000000000000000000000008 +:10E8100000000000000000000000000000000000F8 +:10E8200000000000000000000000000000000000E8 +:10E8300000000000000000000000000000000000D8 +:10E8400000000000000000000000000000000000C8 +:10E8500000000000000000000000000000000000B8 +:10E8600000000000000000000000000000000000A8 +:10E870000000000000000000000000000000000098 +:10E880000000000000000000000000000000000088 +:10E890000000000000000000000000000000000078 +:10E8A0000000000000000000000000000000000068 +:10E8B0000000000000000000000000000000000058 +:10E8C0000000000000000000000000000000000048 +:10E8D0000000000000000000000000000000000038 +:10E8E0000000000000000000000000000000000028 +:10E8F0000000000000000000000000000000000018 +:10E900000000000000000000000000000000000007 +:10E9100000000000000000000000000000000000F7 +:10E9200000000000000000000000000000000000E7 +:10E9300000000000000000000000000000000000D7 +:10E9400000000000000000000000000000000000C7 +:10E9500000000000000000000000000000000000B7 +:10E9600000000000000000000000000000000000A7 +:10E970000000000000000000000000000000000097 +:10E980000000000000000000000000000000000087 +:10E990000000000000000000000000000000000077 +:10E9A0000000000000000000000000000000000067 +:10E9B0000000000000000000000000000000000057 +:10E9C0000000000000000000000000000000000047 +:10E9D0000000000000000000000000000000000037 +:10E9E0000000000000000000000000000000000027 +:10E9F0000000000000000000000000000000000017 +:10EA00000000000000000000000000000000000006 +:10EA100000000000000000000000000000000000F6 +:10EA200000000000000000000000000000000000E6 +:10EA300000000000000000000000000000000000D6 +:10EA400000000000000000000000000000000000C6 +:10EA500000000000000000000000000000000000B6 +:10EA600000000000000000000000000000000000A6 +:10EA70000000000000000000000000000000000096 +:10EA80000000000000000000000000000000000086 +:10EA90000000000000000000000000000000000076 +:10EAA0000000000000000000000000000000000066 +:10EAB0000000000000000000000000000000000056 +:10EAC0000000000000000000000000000000000046 +:10EAD0000000000000000000000000000000000036 +:10EAE0000000000000000000000000000000000026 +:10EAF0000000000000000000000000000000000016 +:10EB00000000000000000000000000000000000005 +:10EB100000000000000000000000000000000000F5 +:10EB200000000000000000000000000000000000E5 +:10EB300000000000000000000000000000000000D5 +:10EB400000000000000000000000000000000000C5 +:10EB500000000000000000000000000000000000B5 +:10EB600000000000000000000000000000000000A5 +:10EB70000000000000000000000000000000000095 +:10EB80000000000000000000000000000000000085 +:10EB90000000000000000000000000000000000075 +:10EBA0000000000000000000000000000000000065 +:10EBB0000000000000000000000000000000000055 +:10EBC0000000000000000000000000000000000045 +:10EBD0000000000000000000000000000000000035 +:10EBE0000000000000000000000000000000000025 +:10EBF0000000000000000000000000000000000015 +:10EC00000000000000000000000000000000000004 +:10EC100000000000000000000000000000000000F4 +:10EC200000000000000000000000000000000000E4 +:10EC300000000000000000000000000000000000D4 +:10EC400000000000000000000000000000000000C4 +:10EC500000000000000000000000000000000000B4 +:10EC600000000000000000000000000000000000A4 +:10EC70000000000000000000000000000000000094 +:10EC80000000000000000000000000000000000084 +:10EC90000000000000000000000000000000000074 +:10ECA0000000000000000000000000000000000064 +:10ECB0000000000000000000000000000000000054 +:10ECC0000000000000000000000000000000000044 +:10ECD0000000000000000000000000000000000034 +:10ECE0000000000000000000000000000000000024 +:10ECF0000000000000000000000000000000000014 +:10ED00000000000000000000000000000000000003 +:10ED100000000000000000000000000000000000F3 +:10ED200000000000000000000000000000000000E3 +:10ED300000000000000000000000000000000000D3 +:10ED400000000000000000000000000000000000C3 +:10ED500000000000000000000000000000000000B3 +:10ED600000000000000000000000000000000000A3 +:10ED70000000000000000000000000000000000093 +:10ED80000000000000000000000000000000000083 +:10ED90000000000000000000000000000000000073 +:10EDA0000000000000000000000000000000000063 +:10EDB0000000000000000000000000000000000053 +:10EDC0000000000000000000000000000000000043 +:10EDD0000000000000000000000000000000000033 +:10EDE0000000000000000000000000000000000023 +:10EDF0000000000000000000000000000000000013 +:10EE00000000000000000000000000000000000002 +:10EE100000000000000000000000000000000000F2 +:10EE200000000000000000000000000000000000E2 +:10EE300000000000000000000000000000000000D2 +:10EE400000000000000000000000000000000000C2 +:10EE500000000000000000000000000000000000B2 +:10EE600000000000000000000000000000000000A2 +:10EE70000000000000000000000000000000000092 +:10EE80000000000000000000000000000000000082 +:10EE90000000000000000000000000000000000072 +:10EEA0000000000000000000000000000000000062 +:10EEB0000000000000000000000000000000000052 +:10EEC0000000000000000000000000000000000042 +:10EED0000000000000000000000000000000000032 +:10EEE0000000000000000000000000000000000022 +:10EEF0000000000000000000000000000000000012 +:10EF00000000000000000000000000000000000001 +:10EF100000000000000000000000000000000000F1 +:10EF200000000000000000000000000000000000E1 +:10EF300000000000000000000000000000000000D1 +:10EF400000000000000000000000000000000000C1 +:10EF500000000000000000000000000000000000B1 +:10EF600000000000000000000000000000000000A1 +:10EF70000000000000000000000000000000000091 +:10EF80000000000000000000000000000000000081 +:10EF90000000000000000000000000000000000071 +:10EFA0000000000000000000000000000000000061 +:10EFB0000000000000000000000000000000000051 +:10EFC0000000000000000000000000000000000041 +:10EFD0000000000000000000000000000000000031 +:10EFE0000000000000000000000000000000000021 +:10EFF0000000000000000000000000000000000011 +:10F000000000000000000000000000000000000000 +:10F0100000000000000000000000000000000000F0 +:10F0200000000000000000000000000000000000E0 +:10F0300000000000000000000000000000000000D0 +:10F0400000000000000000000000000000000000C0 +:10F0500000000000000000000000000000000000B0 +:10F0600000000000000000000000000000000000A0 +:10F070000000000000000000000000000000000090 +:10F080000000000000000000000000000000000080 +:10F090000000000000000000000000000000000070 +:10F0A0000000000000000000000000000000000060 +:10F0B0000000000000000000000000000000000050 +:10F0C0000000000000000000000000000000000040 +:10F0D0000000000000000000000000000000000030 +:10F0E0000000000000000000000000000000000020 +:10F0F0000000000000000000000000000000000010 +:10F1000000000000000000000000000000000000FF +:10F1100000000000000000000000000000000000EF +:10F1200000000000000000000000000000000000DF +:10F1300000000000000000000000000000000000CF +:10F1400000000000000000000000000000000000BF +:10F1500000000000000000000000000000000000AF +:10F16000000000000000000000000000000000009F +:10F17000000000000000000000000000000000008F +:10F18000000000000000000000000000000000007F +:10F19000000000000000000000000000000000006F +:10F1A000000000000000000000000000000000005F +:10F1B000000000000000000000000000000000004F +:10F1C000000000000000000000000000000000003F +:10F1D000000000000000000000000000000000002F +:10F1E000000000000000000000000000000000001F +:10F1F000000000000000000000000000000000000F +:10F2000000000000000000000000000000000000FE +:10F2100000000000000000000000000000000000EE +:10F2200000000000000000000000000000000000DE +:10F2300000000000000000000000000000000000CE +:10F2400000000000000000000000000000000000BE +:10F2500000000000000000000000000000000000AE +:10F26000000000000000000000000000000000009E +:10F27000000000000000000000000000000000008E +:10F28000000000000000000000000000000000007E +:10F29000000000000000000000000000000000006E +:10F2A000000000000000000000000000000000005E +:10F2B000000000000000000000000000000000004E +:10F2C000000000000000000000000000000000003E +:10F2D000000000000000000000000000000000002E +:10F2E000000000000000000000000000000000001E +:10F2F000000000000000000000000000000000000E +:10F3000000000000000000000000000000000000FD +:10F3100000000000000000000000000000000000ED +:10F3200000000000000000000000000000000000DD +:10F3300000000000000000000000000000000000CD +:10F3400000000000000000000000000000000000BD +:10F3500000000000000000000000000000000000AD +:10F36000000000000000000000000000000000009D +:10F37000000000000000000000000000000000008D +:10F38000000000000000000000000000000000007D +:10F39000000000000000000000000000000000006D +:10F3A000000000000000000000000000000000005D +:10F3B000000000000000000000000000000000004D +:10F3C000000000000000000000000000000000003D +:10F3D000000000000000000000000000000000002D +:10F3E000000000000000000000000000000000001D +:10F3F000000000000000000000000000000000000D +:10F4000000000000000000000000000000000000FC +:10F4100000000000000000000000000000000000EC +:10F4200000000000000000000000000000000000DC +:10F4300000000000000000000000000000000000CC +:10F4400000000000000000000000000000000000BC +:10F4500000000000000000000000000000000000AC +:10F46000000000000000000000000000000000009C +:10F47000000000000000000000000000000000008C +:10F48000000000000000000000000000000000007C +:10F49000000000000000000000000000000000006C +:10F4A000000000000000000000000000000000005C +:10F4B000000000000000000000000000000000004C +:10F4C000000000000000000000000000000000003C +:10F4D000000000000000000000000000000000002C +:10F4E000000000000000000000000000000000001C +:10F4F000000000000000000000000000000000000C +:10F5000000000000000000000000000000000000FB +:10F5100000000000000000000000000000000000EB +:10F5200000000000000000000000000000000000DB +:10F5300000000000000000000000000000000000CB +:10F5400000000000000000000000000000000000BB +:10F5500000000000000000000000000000000000AB +:10F56000000000000000000000000000000000009B +:10F57000000000000000000000000000000000008B +:10F58000000000000000000000000000000000007B +:10F59000000000000000000000000000000000006B +:10F5A000000000000000000000000000000000005B +:10F5B000000000000000000000000000000000004B +:10F5C000000000000000000000000000000000003B +:10F5D000000000000000000000000000000000002B +:10F5E000000000000000000000000000000000001B +:10F5F000000000000000000000000000000000000B +:10F6000000000000000000000000000000000000FA +:10F6100000000000000000000000000000000000EA +:10F6200000000000000000000000000000000000DA +:10F6300000000000000000000000000000000000CA +:10F6400000000000000000000000000000000000BA +:10F6500000000000000000000000000000000000AA +:10F66000000000000000000000000000000000009A +:10F67000000000000000000000000000000000008A +:10F68000000000000000000000000000000000007A +:10F69000000000000000000000000000000000006A +:10F6A000000000000000000000000000000000005A +:10F6B000000000000000000000000000000000004A +:10F6C000000000000000000000000000000000003A +:10F6D000000000000000000000000000000000002A +:10F6E000000000000000000000000000000000001A +:10F6F000000000000000000000000000000000000A +:10F7000000000000000000000000000000000000F9 +:10F7100000000000000000000000000000000000E9 +:10F7200000000000000000000000000000000000D9 +:10F7300000000000000000000000000000000000C9 +:10F7400000000000000000000000000000000000B9 +:10F7500000000000000000000000000000000000A9 +:10F760000000000000000000000000000000000099 +:10F770000000000000000000000000000000000089 +:10F780000000000000000000000000000000000079 +:10F790000000000000000000000000000000000069 +:10F7A0000000000000000000000000000000000059 +:10F7B0000000000000000000000000000000000049 +:10F7C0000000000000000000000000000000000039 +:10F7D0000000000000000000000000000000000029 +:10F7E0000000000000000000000000000000000019 +:10F7F0000000000000000000000000000000000009 +:10F8000000000000000000000000000000000000F8 +:10F8100000000000000000000000000000000000E8 +:10F8200000000000000000000000000000000000D8 +:10F8300000000000000000000000000000000000C8 +:10F8400000000000000000000000000000000000B8 +:10F8500000000000000000000000000000000000A8 +:10F860000000000000000000000000000000000098 +:10F870000000000000000000000000000000000088 +:10F880000000000000000000000000000000000078 +:10F890000000000000000000000000000000000068 +:10F8A0000000000000000000000000000000000058 +:10F8B0000000000000000000000000000000000048 +:10F8C0000000000000000000000000000000000038 +:10F8D0000000000000000000000000000000000028 +:10F8E0000000000000000000000000000000000018 +:10F8F0000000000000000000000000000000000008 +:10F9000000000000000000000000000000000000F7 +:10F9100000000000000000000000000000000000E7 +:10F9200000000000000000000000000000000000D7 +:10F9300000000000000000000000000000000000C7 +:10F9400000000000000000000000000000000000B7 +:10F9500000000000000000000000000000000000A7 +:10F960000000000000000000000000000000000097 +:10F970000000000000000000000000000000000087 +:10F980000000000000000000000000000000000077 +:10F990000000000000000000000000000000000067 +:10F9A0000000000000000000000000000000000057 +:10F9B0000000000000000000000000000000000047 +:10F9C0000000000000000000000000000000000037 +:10F9D0000000000000000000000000000000000027 +:10F9E0000000000000000000000000000000000017 +:10F9F0000000000000000000000000000000000007 +:10FA000000000000000000000000000000000000F6 +:10FA100000000000000000000000000000000000E6 +:10FA200000000000000000000000000000000000D6 +:10FA300000000000000000000000000000000000C6 +:10FA400000000000000000000000000000000000B6 +:10FA500000000000000000000000000000000000A6 +:10FA60000000000000000000000000000000000096 +:10FA70000000000000000000000000000000000086 +:10FA80000000000000000000000000000000000076 +:10FA90000000000000000000000000000000000066 +:10FAA0000000000000000000000000000000000056 +:10FAB0000000000000000000000000000000000046 +:10FAC0000000000000000000000000000000000036 +:10FAD0000000000000000000000000000000000026 +:10FAE0000000000000000000000000000000000016 +:10FAF0000000000000000000000000000000000006 +:10FB000000000000000000000000000000000000F5 +:10FB100000000000000000000000000000000000E5 +:10FB200000000000000000000000000000000000D5 +:10FB300000000000000000000000000000000000C5 +:10FB400000000000000000000000000000000000B5 +:10FB500000000000000000000000000000000000A5 +:10FB60000000000000000000000000000000000095 +:10FB70000000000000000000000000000000000085 +:10FB80000000000000000000000000000000000075 +:10FB90000000000000000000000000000000000065 +:10FBA0000000000000000000000000000000000055 +:10FBB0000000000000000000000000000000000045 +:10FBC0000000000000000000000000000000000035 +:10FBD0000000000000000000000000000000000025 +:10FBE0000000000000000000000000000000000015 +:10FBF0000000000000000000000000000000000005 +:10FC000000000000000000000000000000000000F4 +:10FC100000000000000000000000000000000000E4 +:10FC200000000000000000000000000000000000D4 +:10FC300000000000000000000000000000000000C4 +:10FC400000000000000000000000000000000000B4 +:10FC500000000000000000000000000000000000A4 +:10FC60000000000000000000000000000000000094 +:10FC70000000000000000000000000000000000084 +:10FC80000000000000000000000000000000000074 +:10FC90000000000000000000000000000000000064 +:10FCA0000000000000000000000000000000000054 +:10FCB0000000000000000000000000000000000044 +:10FCC0000000000000000000000000000000000034 +:10FCD0000000000000000000000000000000000024 +:10FCE0000000000000000000000000000000000014 +:10FCF0000000000000000000000000000000000004 +:10FD000000000000000000000000000000000000F3 +:10FD100000000000000000000000000000000000E3 +:10FD200000000000000000000000000000000000D3 +:10FD300000000000000000000000000000000000C3 +:10FD400000000000000000000000000000000000B3 +:10FD500000000000000000000000000000000000A3 +:10FD60000000000000000000000000000000000093 +:10FD70000000000000000000000000000000000083 +:10FD80000000000000000000000000000000000073 +:10FD90000000000000000000000000000000000063 +:10FDA0000000000000000000000000000000000053 +:10FDB0000000000000000000000000000000000043 +:10FDC0000000000000000000000000000000000033 +:10FDD0000000000000000000000000000000000023 +:10FDE0000000000000000000000000000000000013 +:10FDF0000000000000000000000000000000000003 +:10FE000000000000000000000000000000000000F2 +:10FE100000000000000000000000000000000000E2 +:10FE200000000000000000000000000000000000D2 +:10FE300000000000000000000000000000000000C2 +:10FE400000000000000000000000000000000000B2 +:10FE500000000000000000000000000000000000A2 +:10FE60000000000000000000000000000000000092 +:10FE70000000000000000000000000000000000082 +:10FE80000000000000000000000000000000000072 +:10FE90000000000000000000000000000000000062 +:10FEA0000000000000000000000000000000000052 +:10FEB0000000000000000000000000000000000042 +:10FEC0000000000000000000000000000000000032 +:10FED0000000000000000000000000000000000022 +:10FEE0000000000000000000000000000000000012 +:10FEF0000000000000000000000000000000000002 +:10FF000000000000000000000000000000000000F1 +:10FF100000000000000000000000000000000000E1 +:10FF200000000000000000000000000000000000D1 +:10FF300000000000000000000000000000000000C1 +:10FF400000000000000000000000000000000000B1 +:10FF500000000000000000000000000000000000A1 +:10FF60000000000000000000000000000000000091 +:10FF70000000000000000000000000000000000081 +:10FF80000000000000000000000000000000000071 +:10FF90000000000000000000000000000000000061 +:10FFA0000000000000000000000000000000000051 +:10FFB0000000000000000000000000000000000041 +:10FFC0000000000000000000000000000000000031 +:10FFD0000000000000000000000000000000000021 +:10FFE0000000000000000000000000000000000011 +:10FFF0000000000000000000000000000000000001 +:00000001FF diff --git a/Firmware/Chameleon-Mini/DESFireDefaultConfig/desfire-ibmjcop-config.cfg b/Firmware/Chameleon-Mini/DESFireDefaultConfig/desfire-ibmjcop-config.cfg new file mode 100644 index 00000000..430dc3ae --- /dev/null +++ b/Firmware/Chameleon-Mini/DESFireDefaultConfig/desfire-ibmjcop-config.cfg @@ -0,0 +1,20 @@ +# Configuration settings to emulate an IBM JCOP DESFire tag +# IBM JCOP Identify Applet identify command: +# 27 34 01 2E 00 00 00 00 4E 58 37 35 31 41 00 03 28 62 B3 6A 82 +# See also: https://www.commoncriteriaportal.org/files/epfiles/0426_ma1b.pdf +# ---- TODO: This needs proofreading ---- # +UID=11223344556677 +ATS=0675f7b102 +ATQA=0344 +ManuID=27 +HwType=01 +HwSubtype=00 +# ISO 14443-3 Type B: 07 (below) +HwProtoType=91 +HwVers=0000 +SwType=12 +SwSubtype=00 +SwProtoType=00 +SwVers=0000 +BatchNo=0000000000 +ProdDate=0026 diff --git a/Firmware/Chameleon-Mini/DESFireDefaultConfig/desfire-skel-config.cfg b/Firmware/Chameleon-Mini/DESFireDefaultConfig/desfire-skel-config.cfg new file mode 100644 index 00000000..3ba68706 --- /dev/null +++ b/Firmware/Chameleon-Mini/DESFireDefaultConfig/desfire-skel-config.cfg @@ -0,0 +1,15 @@ +# Configuration settings to emulate a custom tag +UID=xxxxxxxxxxxxxx +ATS=NNxxxx[...] +ATQA=xxxx +ManuID=xx +HwType=xx +HwSubtype=xx +HwProtoType=xx +HwVers=mmMM +SwType=xx +SwSubtype=xx +SwProtoType=xx +SwVers=mmMM +BatchNo=xxxxxxxxxx +ProdDate=WWYY diff --git a/Firmware/Chameleon-Mini/Log.h b/Firmware/Chameleon-Mini/Log.h index 6c350e88..593d5621 100644 --- a/Firmware/Chameleon-Mini/Log.h +++ b/Firmware/Chameleon-Mini/Log.h @@ -3,14 +3,18 @@ /** @file */ #include "Common.h" -#ifdef MEMORY_LIMITED_TESTING -#define LOG_SIZE 1284 +#if defined(ENABLE_DESFIRE_GALLAGHER) +#define LOG_SIZE 4 +#elif defined(ENABLE_DESFIRE_AES_EXTENDED) +#define LOG_SIZE 64 +#elif defined(MEMORY_LIMITED_TESTING) +#define LOG_SIZE 1284 #else #define LOG_SIZE 2048 #endif #define FRAM_LOG_ADDR_ADDR 0x4000 // start of the second half of FRAM #define FRAM_LOG_START_ADDR 0x4002 // directly after the address -#define FRAM_LOG_SIZE 0x3FFE // the whole second half (minus the 2 Bytes of Address) +#define FRAM_LOG_SIZE 0x3FFE // the whole second half (minus the 2 Bytes of Address) extern uint8_t LogMem[LOG_SIZE]; extern uint8_t *LogMemPtr; @@ -19,10 +23,10 @@ extern uint16_t LogMemLeft; /** Enum for log entry type. \note Every entry type has a specific integer value, which can be found in the source code. */ typedef enum { /* Generic */ - LOG_INFO_GENERIC = 0x10, ///< Unspecific log entry. + LOG_INFO_GENERIC = 0x10, ///< Unspecific log entry. LOG_INFO_CONFIG_SET = 0x11, ///< Configuration change. LOG_INFO_SETTING_SET = 0x12, ///< Setting change. - LOG_INFO_UID_SET = 0x13, ///< UID change. + LOG_INFO_UID_SET = 0x13, ///< UID change. LOG_INFO_RESET_APP = 0x20, ///< Application reset. /* Codec */ diff --git a/Firmware/Chameleon-Mini/Makefile b/Firmware/Chameleon-Mini/Makefile index 95c028c5..2cf0490f 100644 --- a/Firmware/Chameleon-Mini/Makefile +++ b/Firmware/Chameleon-Mini/Makefile @@ -12,11 +12,11 @@ SETTINGS ?= ## : on the Chameleon integrated AVR and lead to stability ## : problems. Proceed carefully, or use one of the ## : custom build targets found in the BuildScripts/* directory -CONFIG_SETTINGS += -DCONFIG_MF_CLASSIC_MINI_4B_SUPPORT +#CONFIG_SETTINGS += -DCONFIG_MF_CLASSIC_MINI_4B_SUPPORT CONFIG_SETTINGS += -DCONFIG_MF_CLASSIC_1K_SUPPORT -CONFIG_SETTINGS += -DCONFIG_MF_CLASSIC_1K_7B_SUPPORT +#CONFIG_SETTINGS += -DCONFIG_MF_CLASSIC_1K_7B_SUPPORT CONFIG_SETTINGS += -DCONFIG_MF_CLASSIC_4K_SUPPORT -CONFIG_SETTINGS += -DCONFIG_MF_CLASSIC_4K_7B_SUPPORT +#CONFIG_SETTINGS += -DCONFIG_MF_CLASSIC_4K_7B_SUPPORT CONFIG_SETTINGS += -DCONFIG_MF_ULTRALIGHT_SUPPORT CONFIG_SETTINGS += -DCONFIG_ISO14443A_SNIFF_SUPPORT CONFIG_SETTINGS += -DCONFIG_ISO14443A_READER_SUPPORT @@ -25,7 +25,7 @@ CONFIG_SETTINGS += -DCONFIG_NTAG215_SUPPORT #CONFIG_SETTINGS += -DCONFIG_SL2S2002_SUPPORT #CONFIG_SETTINGS += -DCONFIG_TITAGITSTANDARD_SUPPORT #CONFIG_SETTINGS += -DCONFIG_TITAGITPLUS_SUPPORT -#CONFIG_SETTINGS += -DCONFIG_ISO15693_SNIFF_SUPPORT +CONFIG_SETTINGS += -DCONFIG_ISO15693_SNIFF_SUPPORT #CONFIG_SETTINGS += -DCONFIG_EM4233_SUPPORT #CONFIG_SETTINGS += -DCONFIG_MF_DESFIRE_SUPPORT @@ -92,9 +92,36 @@ SETTINGS += -DENABLE_EEPROM_SETTINGS #SETTINGS += -DENABLE_CRYPTO_3DES_TESTS #SETTINGS += -DENABLE_CRYPTO_AES_TESTS +## Enable software support for AES-192 and AES-256 encryption modes: +SETTINGS += -DENABLE_DESFIRE_AES_EXTENDED + +## Enable DESFire Gallagher app emulation (takes up extra buffer space) +## WARNING: Enabling this flag results in a compilation error (too large a binary section) +#SETTINGS += -DENABLE_DESFIRE_GALLAGHER -UENABLE_DESFIRE_AES_EXTENDED + +## Set a default DESFire PICC master key loaded when the config is initialized: +#SETTINGS += -DDESFIRE_DEFAULT_PICC_MASTER_KEY='"My key string..."' + +## Manually set default DESFire PICC / tag spec settings: +## See also the documentation for: ``make desfire-custom-tag`` +#SETTINGS += -DDESFIRE_DEFAULT_PICC_UID="(uint8_t *) { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77 }" +#SETTINGS += -DDESFIRE_DEFAULT_PICC_ATS="(uint8_t *) { 0x06, 0x75, 0x77, 0x81, 0x02, 0x80 }" +#SETTINGS += -DDESFIRE_DEFAULT_PICC_ATQA="(uint8_t *) { 0x44, 0x03 }" +#SETTINGS += -DDESFIRE_DEFAULT_PICC_MANUID="(uint8_t *) { 0x01 }" +#SETTINGS += -DDESFIRE_DEFAULT_PICC_HWTYPE="(uint8_t *) { 0x01 }" +#SETTINGS += -DDESFIRE_DEFAULT_PICC_HWSUBTYPE="(uint8_t *) { 0x00 }" +#SETTINGS += -DDESFIRE_DEFAULT_PICC_HWPROTOTYPE="(uint8_t *) { 0x00 }" +#SETTINGS += -DDESFIRE_DEFAULT_PICC_HWVERS="(uint8_t *) { 0x00, 0x00 }" +#SETTINGS += -DDESFIRE_DEFAULT_PICC_SWTYPE="(uint8_t *) { 0x01 }" +#SETTINGS += -DDESFIRE_DEFAULT_PICC_SWSUBTYPE="(uint8_t *) { 0x00 }" +#SETTINGS += -DDESFIRE_DEFAULT_PICC_SWPROTOTYPE="(uint8_t *) { 0x00 }" +#SETTINGS += -DDESFIRE_DEFAULT_PICC_SWVERS="(uint8_t *) { 0x00, 0x00 }" +#SETTINGS += -DDESFIRE_DEFAULT_PICC_BATCHNO="(uint8_t *) { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }" +#SETTINGS += -DDESFIRE_DEFAULT_PICC_PRODDATE="(uint8_t *) { 0x00, 0x26 }" + ## : Enable a command to run any tests added by developers, e.g., the ## : crypto scheme tests that can be enabled above: -#SETTINGS += -DENABLE_RUNTESTS_TERMINAL_COMMAND +#SETTINGS += -DENABLE_RUNTESTS_TERMINAL_COMMAND ## : Whether or not to allow users Chameleon terminal access to change the DESFire configuration's ## : sensitive settings like manufacturer, serial number, etc. @@ -220,6 +247,7 @@ SRC += Application/MifareUltralight.c \ Application/CryptoTDEA-HWAccelerated.S \ Application/CryptoTDEA.c \ Application/CryptoAES128.c \ + Application/CryptoAESExtended.c \ Application/CryptoCMAC.c SRC += Application/NTAG215.c SRC += Application/Vicinity.c \ @@ -361,18 +389,18 @@ dfu-prog: $(TARGET).hex $(TARGET).eep check_size dfu-programmer $(MCU) reset check_size: BASH:=$(if $(shell which bash), $(shell which bash), /bin/bash) -check_size: BASH_SCRIPT_EXEC_LINES:=' \ - set -e; \ - if [[ ! -f $(TARGET).elf ]]; then \ - exit 0; \ - fi; \ - PROGMEM_SIZE=$$(avr-size $(TARGET).elf | grep $(CHECK_SIZE_GREP_ARGS) | sed -n 4p); \ - MAX_PRGMEM_SIZE=$$(printf "%d\n" $(FLASH_DATA_ADDR)); \ - if [[ $$PROGMEM_SIZE -gt $$MAX_PRGMEM_SIZE ]]; then \ - $(ECHO) \"make: *** $(TARGET).elf Application Section size $$PROGMEM_SIZE \" \ - $(ECHO) \"excedes maximum allowed $$MAX_PRGMEM_SIZE. Please disable some features in Makefile\"; \ - exit 1; \ - fi; \ +check_size: BASH_SCRIPT_EXEC_LINES:=' \ + set -e; \ + if [[ ! -f $(TARGET).elf ]]; then \ + exit 0; \ + fi; \ + PROGMEM_SIZE=$$(avr-size $(TARGET).elf | grep $(CHECK_SIZE_GREP_ARGS) | sed -n 4p); \ + MAX_PRGMEM_SIZE=$$(printf "%d\n" $(FLASH_DATA_ADDR)); \ + if [[ $$PROGMEM_SIZE -gt $$MAX_PRGMEM_SIZE ]]; then \ + $(ECHO) \"make: *** $(TARGET).elf Application Section size $$PROGMEM_SIZE \" \ + $(ECHO) \"excedes maximum allowed $$MAX_PRGMEM_SIZE. Please disable some features in Makefile\" \ + exit 1; \ + fi; \ ' check_size: @$(BASH) -c $(BASH_SCRIPT_EXEC_LINES) || $(SHELL) -c $(BASH_SCRIPT_EXEC_LINES) diff --git a/Firmware/Chameleon-Mini/Settings.h b/Firmware/Chameleon-Mini/Settings.h index 1752022e..c3d0050f 100644 --- a/Firmware/Chameleon-Mini/Settings.h +++ b/Firmware/Chameleon-Mini/Settings.h @@ -20,8 +20,15 @@ #include -#define SETTINGS_COUNT (MEMORY_SIZE / MEMORY_SIZE_PER_SETTING) -#define SETTINGS_FIRST 1 +/* NOTE: Free up extra space needed by DESFire configurations: */ +#ifdef ENABLE_DESFIRE_GALLAGHER + #define SETTINGS_COUNT MAX(1, (MEMORY_SIZE / MEMORY_SIZE_PER_SETTING) - 6) +#elif defined(CONFIG_MF_DESFIRE_SUPPORT) + #define SETTINGS_COUNT MAX(1, (MEMORY_SIZE / MEMORY_SIZE_PER_SETTING) - 4) +#else + #define SETTINGS_COUNT (MEMORY_SIZE / MEMORY_SIZE_PER_SETTING) +#endif +#define SETTINGS_FIRST (1) #define SETTINGS_LAST (SETTINGS_FIRST + SETTINGS_COUNT - 1) /** Defines one setting. diff --git a/Firmware/Chameleon-Mini/Terminal/CommandLine.c b/Firmware/Chameleon-Mini/Terminal/CommandLine.c index 1f402ec4..da275b30 100644 --- a/Firmware/Chameleon-Mini/Terminal/CommandLine.c +++ b/Firmware/Chameleon-Mini/Terminal/CommandLine.c @@ -343,6 +343,7 @@ const PROGMEM CommandEntryType CommandTable[] = { .GetFunc = CommandGetAutoThreshold }, #endif + #ifdef ENABLE_RUNTESTS_TERMINAL_COMMAND #include "../Tests/ChameleonTerminalInclude.c" #endif diff --git a/Firmware/Chameleon-Mini/Terminal/Commands.h b/Firmware/Chameleon-Mini/Terminal/Commands.h index caf2b504..f0735b8e 100644 --- a/Firmware/Chameleon-Mini/Terminal/Commands.h +++ b/Firmware/Chameleon-Mini/Terminal/Commands.h @@ -15,24 +15,26 @@ #define COMMAND_INFO_OK_WITH_TEXT "OK WITH TEXT" #define COMMAND_INFO_XMODEM_WAIT_ID 110 #define COMMAND_INFO_XMODEM_WAIT "WAITING FOR XMODEM" -#define COMMAND_INFO_FALSE_ID 120 -#define COMMAND_INFO_FALSE "FALSE" -#define COMMAND_INFO_TRUE_ID 121 -#define COMMAND_INFO_TRUE "TRUE" +#define COMMAND_INFO_FALSE_ID 120 +#define COMMAND_INFO_FALSE "FALSE" +#define COMMAND_INFO_TRUE_ID 121 +#define COMMAND_INFO_TRUE "TRUE" #define COMMAND_ERR_UNKNOWN_CMD_ID 200 #define COMMAND_ERR_UNKNOWN_CMD "UNKNOWN COMMAND" #define COMMAND_ERR_INVALID_USAGE_ID 201 #define COMMAND_ERR_INVALID_USAGE "INVALID COMMAND USAGE" #define COMMAND_ERR_INVALID_PARAM_ID 202 #define COMMAND_ERR_INVALID_PARAM "INVALID PARAMETER" -#define COMMAND_ERR_TIMEOUT_ID 203 -#define COMMAND_ERR_TIMEOUT "TIMEOUT" -#define TIMEOUT_COMMAND 255 // this is just for the CommandLine module to know that this is a timeout command +#define COMMAND_ERR_TIMEOUT_ID 203 +#define COMMAND_ERR_TIMEOUT "TIMEOUT" + +// this is just for the CommandLine module to know that this is a timeout command: +#define TIMEOUT_COMMAND 255 #define COMMAND_CHAR_TRUE '1' #define COMMAND_CHAR_FALSE '0' -#define COMMAND_CHAR_SUGGEST '?' /* =? for help */ +#define COMMAND_CHAR_SUGGEST '?' /* =? for help */ #define COMMAND_UID_BUFSIZE 32 @@ -104,7 +106,6 @@ CommandStatusIdType CommandSetLButton(char *OutMessage, const char *InParam); CommandStatusIdType CommandGetLButtonLong(char *OutParam); CommandStatusIdType CommandSetLButtonLong(char *OutMessage, const char *InParam); - #define COMMAND_LEDGREEN "LEDGREEN" CommandStatusIdType CommandGetLedGreen(char *OutParam); CommandStatusIdType CommandSetLedGreen(char *OutMessage, const char *InParam); diff --git a/Software/DESFireLibNFCTesting/LocalInclude/CryptoUtils.h b/Software/DESFireLibNFCTesting/LocalInclude/CryptoUtils.h index 4282e1c8..79b9c092 100644 --- a/Software/DESFireLibNFCTesting/LocalInclude/CryptoUtils.h +++ b/Software/DESFireLibNFCTesting/LocalInclude/CryptoUtils.h @@ -8,6 +8,7 @@ #include #include +#include #include "LibNFCUtils.h" @@ -22,24 +23,28 @@ #define DESFIRE_CRYPTO_AUTHTYPE_AES128 (1) #define DESFIRE_CRYPTO_AUTHTYPE_ISODES (2) #define DESFIRE_CRYPTO_AUTHTYPE_LEGACY (3) +#define DESFIRE_CRYPTO_AUTHTYPE_AES192 (4) +#define DESFIRE_CRYPTO_AUTHTYPE_AES256 (5) #define CRYPTO_DES_BLOCK_SIZE (8) #define CRYPTO_3KTDEA_BLOCK_SIZE (CRYPTO_DES_BLOCK_SIZE) -#define AES128_BLOCK_SIZE (16) -#define CRYPTO_MAX_BLOCK_SIZE (AES128_BLOCK_SIZE) +#define CRYPTO_AES_BLOCK_SIZE (16) +#define CRYPTO_MAX_BLOCK_SIZE (CRYPTO_AES_BLOCK_SIZE) #define CRYPTO_DES_KEY_SIZE (CRYPTO_DES_BLOCK_SIZE) #define CRYPTO_3KTDEA_KEY_SIZE (3 * CRYPTO_DES_KEY_SIZE) -#define CRYPTO_AES128_KEY_SIZE (AES128_BLOCK_SIZE) +#define CRYPTO_AES128_KEY_SIZE (16) +#define CRYPTO_AES192_KEY_SIZE (24) +#define CRYPTO_AES256_KEY_SIZE (32) -typedef uint8_t CryptoAESBlock_t[AES128_BLOCK_SIZE]; +typedef uint8_t CryptoAESBlock_t[CRYPTO_AES_BLOCK_SIZE]; static uint8_t SessionIV[CRYPTO_MAX_BLOCK_SIZE]; /* Key sizes, block sizes (in bytes): */ #define CRYPTO_MAX_KEY_SIZE (3 * CRYPTO_DES_KEY_SIZE) #define CRYPTO_MAX_BLOCK_SIZE (2 * CRYPTO_DES_KEY_SIZE) -#define CRYPTO_CHALLENGE_RESPONSE_SIZE (AES128_BLOCK_SIZE) +#define CRYPTO_CHALLENGE_RESPONSE_SIZE (CRYPTO_AES_BLOCK_SIZE) #define CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY (CRYPTO_DES_BLOCK_SIZE) static const uint8_t ZERO_KEY[] = { @@ -63,6 +68,7 @@ typedef struct { size_t keySize; uint8_t *ivData; size_t ivSize; + uint8_t cryptoMode; } CryptoData_t; #define CryptoMemoryXOR(inputBuf, destBuf, bufSize) ({ \ @@ -192,7 +198,6 @@ static inline size_t Decrypt3DES(const uint8_t *encSrcBuf, size_t bufSize, return bufSize; } - static inline size_t EncryptDES(const uint8_t *plainSrcBuf, size_t bufSize, uint8_t *encDestBuf, const uint8_t *IVIn, CryptoData_t cdata) { DES_key_schedule keySched; @@ -251,6 +256,76 @@ static inline size_t DecryptDES(const uint8_t *encSrcBuf, size_t bufSize, return bufSize; } +static inline int CryptoGetAESKeySize(int aesCryptoType) { + switch (aesCryptoType) { + case DESFIRE_CRYPTO_AUTHTYPE_AES128: + return CRYPTO_AES128_KEY_SIZE; + case DESFIRE_CRYPTO_AUTHTYPE_AES192: + return CRYPTO_AES192_KEY_SIZE; + case DESFIRE_CRYPTO_AUTHTYPE_AES256: + return CRYPTO_AES256_KEY_SIZE; + default: + break; + } + return 0; +} + +static inline size_t EncryptAES(const uint8_t *plainSrcBuf, size_t bufSize, + uint8_t *encDestBuf, const uint8_t *IVIn, CryptoData_t cdata) { + AES_KEY encKey; + AES_set_encrypt_key(cdata.keyData, 8 * cdata.keySize, &encKey); + uint8_t IV[CRYPTO_AES_BLOCK_SIZE]; + if (IVIn == NULL) { + memset(IV, 0x00, CRYPTO_AES_BLOCK_SIZE); + } else { + memcpy(IV, IVIn, CRYPTO_AES_BLOCK_SIZE); + } + if (__CryptoDESOpMode == CRYPTO_AES_CBC_MODE) { + AES_cbc_encrypt(plainSrcBuf, encDestBuf, bufSize, &encKey, &IV, AES_ENCRYPT); + } else { + uint8_t inputBlock[CRYPTO_AES_BLOCK_SIZE]; + uint16_t numBlocks = bufSize / CRYPTO_AES_BLOCK_SIZE; + for (int blk = 0; blk < numBlocks; blk++) { + memcpy(inputBlock, &plainSrcBuf[blk * CRYPTO_AES_BLOCK_SIZE], CRYPTO_AES_BLOCK_SIZE); + CryptoMemoryXOR(IV, inputBlock, CRYPTO_AES_BLOCK_SIZE); + AES_ecb_encrypt(inputBlock, &encDestBuf[blk * CRYPTO_AES_BLOCK_SIZE], &encKey, AES_ENCRYPT); + memcpy(IV, &encDestBuf[blk * CRYPTO_AES_BLOCK_SIZE], CRYPTO_AES_BLOCK_SIZE); + } + } + if (IVIn != NULL) { + memcpy(IVIn, IV, CRYPTO_AES_BLOCK_SIZE); + } + return bufSize; +} + +static inline size_t DecryptAES(const uint8_t *encSrcBuf, size_t bufSize, + uint8_t *plainDestBuf, const uint8_t *IVIn, CryptoData_t cdata) { + AES_KEY encKey; + AES_set_decrypt_key(cdata.keyData, 8 * cdata.keySize, &encKey); + uint8_t IV[CRYPTO_AES_BLOCK_SIZE]; + if (IVIn == NULL) { + memset(IV, 0x00, CRYPTO_AES_BLOCK_SIZE); + } else { + memcpy(IV, IVIn, CRYPTO_AES_BLOCK_SIZE); + } + if (__CryptoDESOpMode == CRYPTO_AES_CBC_MODE) { + AES_cbc_encrypt(encSrcBuf, plainDestBuf, bufSize, &encKey, &IV, AES_DECRYPT); + } else { + uint8_t inputBlock[CRYPTO_AES_BLOCK_SIZE]; + uint16_t numBlocks = bufSize / CRYPTO_AES_BLOCK_SIZE; + for (int blk = 0; blk < numBlocks; blk++) { + AES_ecb_encrypt(&encSrcBuf[blk * CRYPTO_AES_BLOCK_SIZE], + &plainDestBuf[blk * CRYPTO_AES_BLOCK_SIZE], &encKey, AES_DECRYPT); + CryptoMemoryXOR(IV, &plainDestBuf[blk * CRYPTO_AES_BLOCK_SIZE], CRYPTO_AES_BLOCK_SIZE); + memcpy(IV, &encSrcBuf[blk * CRYPTO_AES_BLOCK_SIZE], CRYPTO_AES_BLOCK_SIZE); + } + } + if (IVIn != NULL) { + memcpy(IVIn, IV, CRYPTO_AES_BLOCK_SIZE); + } + return bufSize; +} + static inline int GenerateRandomBytes(uint8_t *destBuf, size_t numBytes) { return RAND_pseudo_bytes(destBuf, numBytes); } diff --git a/Software/DESFireLibNFCTesting/LocalInclude/DesfireUtils.h b/Software/DESFireLibNFCTesting/LocalInclude/DesfireUtils.h index 49638bb8..5953c925 100644 --- a/Software/DESFireLibNFCTesting/LocalInclude/DesfireUtils.h +++ b/Software/DESFireLibNFCTesting/LocalInclude/DesfireUtils.h @@ -55,7 +55,8 @@ static inline int AuthenticateISO(nfc_device *nfcConnDev, uint8_t keyIndex, cons } RxData_t *rxDataStorage = InitRxDataStruct(MAX_FRAME_LENGTH); bool rxDataStatus = false; - rxDataStatus = libnfcTransmitBytes(nfcConnDev, AUTHENTICATE_ISO_CMD, sizeof(AUTHENTICATE_ISO_CMD), rxDataStorage); + rxDataStatus = libnfcTransmitBytes(nfcConnDev, AUTHENTICATE_ISO_CMD, + sizeof(AUTHENTICATE_ISO_CMD), rxDataStorage); if (rxDataStatus && PRINT_STATUS_EXCHANGE_MESSAGES) { fprintf(stdout, " <- "); print_hex(rxDataStorage->rxDataBuf, rxDataStorage->recvSzRx); @@ -71,8 +72,12 @@ static inline int AuthenticateISO(nfc_device *nfcConnDev, uint8_t keyIndex, cons // Now need to decrypt the challenge response sent back as rndB, // rotate it left, generate a random rndA, concat rndA+rotatedRndB, // encrypt this result, and send it forth to the PICC: - uint8_t encryptedRndB[CRYPTO_CHALLENGE_RESPONSE_SIZE], plainTextRndB[CRYPTO_CHALLENGE_RESPONSE_SIZE], rotatedRndB[CRYPTO_CHALLENGE_RESPONSE_SIZE]; - uint8_t rndA[CRYPTO_CHALLENGE_RESPONSE_SIZE], challengeResponse[2 * CRYPTO_CHALLENGE_RESPONSE_SIZE], challengeResponseCipherText[2 * CRYPTO_CHALLENGE_RESPONSE_SIZE]; + uint8_t encryptedRndB[CRYPTO_CHALLENGE_RESPONSE_SIZE], + plainTextRndB[CRYPTO_CHALLENGE_RESPONSE_SIZE], + rotatedRndB[CRYPTO_CHALLENGE_RESPONSE_SIZE]; + uint8_t rndA[CRYPTO_CHALLENGE_RESPONSE_SIZE], + challengeResponse[2 * CRYPTO_CHALLENGE_RESPONSE_SIZE], + challengeResponseCipherText[2 * CRYPTO_CHALLENGE_RESPONSE_SIZE]; memcpy(encryptedRndB, rxDataStorage->rxDataBuf, CRYPTO_CHALLENGE_RESPONSE_SIZE); Decrypt3DES(encryptedRndB, CRYPTO_CHALLENGE_RESPONSE_SIZE, plainTextRndB, IVBuf, desCryptoData); if (PRINT_STATUS_EXCHANGE_MESSAGES) { @@ -82,8 +87,10 @@ static inline int AuthenticateISO(nfc_device *nfcConnDev, uint8_t keyIndex, cons RotateArrayRight(plainTextRndB, rotatedRndB, CRYPTO_CHALLENGE_RESPONSE_SIZE); desCryptoData.ivData = IVBuf; GenerateRandomBytes(rndA, CRYPTO_CHALLENGE_RESPONSE_SIZE); - ConcatByteArrays(rndA, CRYPTO_CHALLENGE_RESPONSE_SIZE, rotatedRndB, CRYPTO_CHALLENGE_RESPONSE_SIZE, challengeResponse); - Encrypt3DES(challengeResponse, 2 * CRYPTO_CHALLENGE_RESPONSE_SIZE, challengeResponseCipherText, IVBuf, desCryptoData); + ConcatByteArrays(rndA, CRYPTO_CHALLENGE_RESPONSE_SIZE, rotatedRndB, + CRYPTO_CHALLENGE_RESPONSE_SIZE, challengeResponse); + Encrypt3DES(challengeResponse, 2 * CRYPTO_CHALLENGE_RESPONSE_SIZE, + challengeResponseCipherText, IVBuf, desCryptoData); uint16_t nonDataPaddingSize = 6; uint8_t sendBytesBuf[2 * CRYPTO_CHALLENGE_RESPONSE_SIZE + nonDataPaddingSize]; @@ -123,8 +130,10 @@ static inline int AuthenticateISO(nfc_device *nfcConnDev, uint8_t keyIndex, cons // Finally, to finish up the auth process: // decrypt rndA sent by PICC, compare it to our original randomized rndA computed above, // and report back whether they match: - uint8_t decryptedRndAFromPICCRotated[CRYPTO_CHALLENGE_RESPONSE_SIZE], decryptedRndA[CRYPTO_CHALLENGE_RESPONSE_SIZE]; - Decrypt3DES(rxDataStorage->rxDataBuf, CRYPTO_CHALLENGE_RESPONSE_SIZE, decryptedRndAFromPICCRotated, IVBuf, desCryptoData); + uint8_t decryptedRndAFromPICCRotated[CRYPTO_CHALLENGE_RESPONSE_SIZE], + decryptedRndA[CRYPTO_CHALLENGE_RESPONSE_SIZE]; + Decrypt3DES(rxDataStorage->rxDataBuf, CRYPTO_CHALLENGE_RESPONSE_SIZE, + decryptedRndAFromPICCRotated, IVBuf, desCryptoData); if (PRINT_STATUS_EXCHANGE_MESSAGES) { fprintf(stdout, " -- IV = "); print_hex(IVBuf, CRYPTO_3KTDEA_BLOCK_SIZE); @@ -153,6 +162,148 @@ static inline int AuthenticateISO(nfc_device *nfcConnDev, uint8_t keyIndex, cons } } +static inline int AuthenticateAES(nfc_device *nfcConnDev, uint8_t keyIndex, + const uint8_t *keyData, int aesCryptoType) { + + if (nfcConnDev == NULL || keyData == NULL) { + InvalidateAuthenticationStatus(); + return INVALID_PARAMS_ERROR; + } else if (!AUTHENTICATED) { + InvalidateAuthenticationStatus(); + } + + // Start AES authentication (default key, blank setting of all zeros): + uint8_t *IVBuf = ActiveCryptoIVBuffer; + CryptoData_t aesCryptoData; + memset(&aesCryptoData, 0x00, sizeof(CryptoData_t)); + aesCryptoData.keySize = CryptoGetAESKeySize(aesCryptoType); + aesCryptoData.keyData = keyData; + aesCryptoData.ivSize = CRYPTO_CHALLENGE_RESPONSE_SIZE; + aesCryptoData.cryptoMode = aesCryptoType; + + uint8_t AUTHENTICATE_AES_CMD[] = { + 0x90, 0xaa, 0x00, 0x00, 0x01, 0x00, 0x00 + }; + AUTHENTICATE_AES_CMD[5] = keyIndex; + if (PRINT_STATUS_EXCHANGE_MESSAGES) { + fprintf(stdout, ">>> Start AES-128/192/256 Authenticate:\n"); + fprintf(stdout, " -> "); + print_hex(AUTHENTICATE_AES_CMD, sizeof(AUTHENTICATE_AES_CMD)); + fprintf(stdout, " -- IV = "); + print_hex(IVBuf, CRYPTO_AES_BLOCK_SIZE); + } + RxData_t *rxDataStorage = InitRxDataStruct(MAX_FRAME_LENGTH); + bool rxDataStatus = false; + rxDataStatus = libnfcTransmitBytes(nfcConnDev, AUTHENTICATE_AES_CMD, + sizeof(AUTHENTICATE_AES_CMD), rxDataStorage); + if (rxDataStatus && PRINT_STATUS_EXCHANGE_MESSAGES) { + fprintf(stdout, " <- "); + print_hex(rxDataStorage->rxDataBuf, rxDataStorage->recvSzRx); + } else { + if (PRINT_STATUS_EXCHANGE_MESSAGES) { + fprintf(stdout, " -- !! Unable to transfer bytes !!\n"); + } + FreeRxDataStruct(rxDataStorage, true); + InvalidateAuthenticationStatus(); + return EXIT_FAILURE; + } + + // Now need to decrypt the challenge response sent back as rndB, + // rotate it left, generate a random rndA, concat rndA+rotatedRndB, + // encrypt this result, and send it forth to the PICC: + uint8_t encryptedRndB[CRYPTO_CHALLENGE_RESPONSE_SIZE]; + uint8_t plainTextRndB[CRYPTO_CHALLENGE_RESPONSE_SIZE]; + uint8_t rotatedRndB[CRYPTO_CHALLENGE_RESPONSE_SIZE]; + uint8_t rndA[CRYPTO_CHALLENGE_RESPONSE_SIZE]; + uint8_t challengeResponse[2 * CRYPTO_CHALLENGE_RESPONSE_SIZE]; + uint8_t challengeResponseCipherText[2 * CRYPTO_CHALLENGE_RESPONSE_SIZE]; + memcpy(encryptedRndB, rxDataStorage->rxDataBuf, CRYPTO_CHALLENGE_RESPONSE_SIZE); + DecryptAES(encryptedRndB, CRYPTO_CHALLENGE_RESPONSE_SIZE, + plainTextRndB, IVBuf, aesCryptoData); + if (PRINT_STATUS_EXCHANGE_MESSAGES) { + fprintf(stdout, " -- IV = "); + print_hex(IVBuf, CRYPTO_AES_BLOCK_SIZE); + } + RotateArrayRight(plainTextRndB, rotatedRndB, CRYPTO_CHALLENGE_RESPONSE_SIZE); + aesCryptoData.ivData = IVBuf; + GenerateRandomBytes(rndA, CRYPTO_CHALLENGE_RESPONSE_SIZE); + ConcatByteArrays(rndA, CRYPTO_CHALLENGE_RESPONSE_SIZE, rotatedRndB, + CRYPTO_CHALLENGE_RESPONSE_SIZE, challengeResponse); + EncryptAES(challengeResponse, 2 * CRYPTO_CHALLENGE_RESPONSE_SIZE, + challengeResponseCipherText, IVBuf, aesCryptoData); + + uint16_t nonDataPaddingSize = 6; + uint8_t sendBytesBuf[2 * CRYPTO_CHALLENGE_RESPONSE_SIZE + nonDataPaddingSize]; + memset(sendBytesBuf, 0x00, 2 * CRYPTO_CHALLENGE_RESPONSE_SIZE + nonDataPaddingSize); + sendBytesBuf[0] = 0x90; + sendBytesBuf[1] = 0xaf; + sendBytesBuf[4] = 0x20; + memcpy(&sendBytesBuf[5], challengeResponseCipherText, 2 * CRYPTO_CHALLENGE_RESPONSE_SIZE); + + if (PRINT_STATUS_EXCHANGE_MESSAGES) { + fprintf(stdout, " -- RNDA = "); + print_hex(rndA, CRYPTO_CHALLENGE_RESPONSE_SIZE); + fprintf(stdout, " -- RNDB = "); + print_hex(plainTextRndB, CRYPTO_CHALLENGE_RESPONSE_SIZE); + fprintf(stdout, " -- CHAL = "); + print_hex(challengeResponse, 2 * CRYPTO_CHALLENGE_RESPONSE_SIZE); + fprintf(stdout, " -- ENC-CHAL = "); + print_hex(challengeResponseCipherText, 2 * CRYPTO_CHALLENGE_RESPONSE_SIZE); + fprintf(stdout, " -> "); + print_hex(sendBytesBuf, sizeof(sendBytesBuf)); + fprintf(stdout, " -- IV = "); + print_hex(aesCryptoData.ivData, CRYPTO_AES_BLOCK_SIZE); + } + rxDataStatus = libnfcTransmitBytes(nfcConnDev, sendBytesBuf, + sizeof(sendBytesBuf), rxDataStorage); + if (rxDataStatus && PRINT_STATUS_EXCHANGE_MESSAGES) { + fprintf(stdout, " <- "); + print_hex(rxDataStorage->rxDataBuf, rxDataStorage->recvSzRx); + } else { + if (PRINT_STATUS_EXCHANGE_MESSAGES) { + fprintf(stdout, " -- !! Unable to transfer bytes !!\n"); + } + FreeRxDataStruct(rxDataStorage, true); + InvalidateAuthenticationStatus(); + return EXIT_FAILURE; + } + + // Finally, to finish up the auth process: + // decrypt rndA sent by PICC, compare it to our original randomized rndA computed above, + // and report back whether they match: + uint8_t decryptedRndAFromPICCRotated[CRYPTO_CHALLENGE_RESPONSE_SIZE]; + uint8_t decryptedRndA[CRYPTO_CHALLENGE_RESPONSE_SIZE]; + DecryptAES(rxDataStorage->rxDataBuf, CRYPTO_CHALLENGE_RESPONSE_SIZE, + decryptedRndAFromPICCRotated, IVBuf, aesCryptoData); + if (PRINT_STATUS_EXCHANGE_MESSAGES) { + fprintf(stdout, " -- IV = "); + print_hex(IVBuf, CRYPTO_AES_BLOCK_SIZE); + } + RotateArrayLeft(decryptedRndAFromPICCRotated, decryptedRndA, + CRYPTO_CHALLENGE_RESPONSE_SIZE); + if (!memcmp(rndA, decryptedRndA, CRYPTO_CHALLENGE_RESPONSE_SIZE)) { + if (PRINT_STATUS_EXCHANGE_MESSAGES) { + fprintf(stdout, " ... AUTH OK! :)\n\n"); + } + AUTHENTICATED = true; + AUTHENTICATED_PROTO = DESFIRE_CRYPTO_AUTHTYPE_AES128; + memcpy(CRYPTO_RNDB_STATE, plainTextRndB, CRYPTO_CHALLENGE_RESPONSE_SIZE); + FreeRxDataStruct(rxDataStorage, true); + return EXIT_SUCCESS; + } else { + if (PRINT_STATUS_EXCHANGE_MESSAGES) { + fprintf(stdout, " ... AUTH FAILED -- X; :(\n"); + fprintf(stdout, " ... INIT (ROTATED) PICC RNDA CONF:\n "); + print_hex(decryptedRndAFromPICCRotated, CRYPTO_CHALLENGE_RESPONSE_SIZE); + fprintf(stdout, " ... SHIFTED DECRYPTED PICC RNDA:\n "); + print_hex(decryptedRndA, CRYPTO_CHALLENGE_RESPONSE_SIZE); + } + FreeRxDataStruct(rxDataStorage, true); + InvalidateAuthenticationStatus(); + return EXIT_FAILURE; + } +} + static inline int AuthenticateLegacy(nfc_device *nfcConnDev, uint8_t keyIndex, const uint8_t *keyData) { if (nfcConnDev == NULL || keyData == NULL) { @@ -199,8 +350,12 @@ static inline int AuthenticateLegacy(nfc_device *nfcConnDev, uint8_t keyIndex, c // Now need to decrypt the challenge response sent back as rndB, // rotate it left, generate a random rndA, concat rndA+rotatedRndB, // encrypt this result, and send it forth to the PICC: - uint8_t encryptedRndB[CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY], plainTextRndB[CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY], rotatedRndB[CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY]; - uint8_t rndA[CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY], challengeResponse[2 * CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY], challengeResponseCipherText[2 * CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY]; + uint8_t encryptedRndB[CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY], + plainTextRndB[CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY], + rotatedRndB[CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY]; + uint8_t rndA[CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY], + challengeResponse[2 * CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY], + challengeResponseCipherText[2 * CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY]; memcpy(encryptedRndB, rxDataStorage->rxDataBuf, CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY); DecryptDES(encryptedRndB, CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY, plainTextRndB, IVBuf, desCryptoData); if (PRINT_STATUS_EXCHANGE_MESSAGES) { @@ -210,8 +365,10 @@ static inline int AuthenticateLegacy(nfc_device *nfcConnDev, uint8_t keyIndex, c RotateArrayRight(plainTextRndB, rotatedRndB, CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY); desCryptoData.ivData = IVBuf; GenerateRandomBytes(rndA, CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY); - ConcatByteArrays(rndA, CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY, rotatedRndB, CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY, challengeResponse); - EncryptDES(challengeResponse, 2 * CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY, challengeResponseCipherText, IVBuf, desCryptoData); + ConcatByteArrays(rndA, CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY, rotatedRndB, + CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY, challengeResponse); + EncryptDES(challengeResponse, 2 * CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY, + challengeResponseCipherText, IVBuf, desCryptoData); uint16_t nonDataPaddingSize = 6; uint8_t sendBytesBuf[2 * CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY + nonDataPaddingSize]; @@ -235,7 +392,9 @@ static inline int AuthenticateLegacy(nfc_device *nfcConnDev, uint8_t keyIndex, c fprintf(stdout, " -- IV = "); print_hex(desCryptoData.ivData, CRYPTO_DES_BLOCK_SIZE); } - rxDataStatus = libnfcTransmitBytes(nfcConnDev, sendBytesBuf, 2 * CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY + nonDataPaddingSize, rxDataStorage); + rxDataStatus = libnfcTransmitBytes(nfcConnDev, sendBytesBuf, + 2 * CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY + nonDataPaddingSize, + rxDataStorage); if (rxDataStatus && PRINT_STATUS_EXCHANGE_MESSAGES) { fprintf(stdout, " <- "); print_hex(rxDataStorage->rxDataBuf, rxDataStorage->recvSzRx); @@ -251,8 +410,10 @@ static inline int AuthenticateLegacy(nfc_device *nfcConnDev, uint8_t keyIndex, c // Finally, to finish up the auth process: // decrypt rndA sent by PICC, compare it to our original randomized rndA computed above, // and report back whether they match: - uint8_t decryptedRndAFromPICCRotated[CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY], decryptedRndA[CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY]; - DecryptDES(rxDataStorage->rxDataBuf, CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY, decryptedRndAFromPICCRotated, IVBuf, desCryptoData); + uint8_t decryptedRndAFromPICCRotated[CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY], + decryptedRndA[CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY]; + DecryptDES(rxDataStorage->rxDataBuf, CRYPTO_CHALLENGE_RESPONSE_SIZE_LEGACY, + decryptedRndAFromPICCRotated, IVBuf, desCryptoData); if (PRINT_STATUS_EXCHANGE_MESSAGES) { fprintf(stdout, " -- IV = "); print_hex(IVBuf, CRYPTO_DES_BLOCK_SIZE); @@ -279,6 +440,7 @@ static inline int AuthenticateLegacy(nfc_device *nfcConnDev, uint8_t keyIndex, c return EXIT_FAILURE; } } + static inline int Authenticate(nfc_device *nfcConnDev, int authType, uint8_t keyIndex, const uint8_t *keyData) { if (nfcConnDev == NULL || keyData == NULL) { return INVALID_PARAMS_ERROR; @@ -289,6 +451,9 @@ static inline int Authenticate(nfc_device *nfcConnDev, int authType, uint8_t key case DESFIRE_CRYPTO_AUTHTYPE_LEGACY: return AuthenticateLegacy(nfcConnDev, keyIndex, keyData); case DESFIRE_CRYPTO_AUTHTYPE_AES128: + case DESFIRE_CRYPTO_AUTHTYPE_AES192: + case DESFIRE_CRYPTO_AUTHTYPE_AES256: + return AuthenticateAES(nfcConnDev, keyIndex, keyData, authType); default: break; } diff --git a/Software/DESFireLibNFCTesting/Makefile b/Software/DESFireLibNFCTesting/Makefile index 5ab11468..ee14ae06 100644 --- a/Software/DESFireLibNFCTesting/Makefile +++ b/Software/DESFireLibNFCTesting/Makefile @@ -3,20 +3,29 @@ #CC=gcc-10 # for MacOS CC=gcc -CFLAGS_BASE= -ILocalInclude -ISource \ - -g -O0 -Wall -pedantic -Wextra -std=c99 -Du_int8_t=uint8_t -Du_int16_t=uint16_t \ - `pkg-config libnfc --cflags` -I/usr/local/opt/openssl/include \ +CFLAGS_BASE= -ILocalInclude -ISource \ + -g -O0 -Wall -pedantic -Wextra -std=c99 \ + -Du_int8_t=uint8_t -Du_int16_t=uint16_t \ + `pkg-config libnfc --cflags` \ + -I/usr/local/opt/openssl/include \ -DHOST_BUILD -DCRYPTO_AES_DEFAULT=1 #LD=gcc-10 # for MacOS LD=gcc -LDFLAGS_BASE= $(CFLAGS) -lc `pkg-config libnfc --libs` \ - -L/usr/local/opt/openssl/lib -L/usr/lib64 -lssl -lcrypto +LDFLAGS_BASE= $(CFLAGS) -lc $(shell greadlink -f ~/libnfc/.libs/libnfc.6.dylib) \ + `pkg-config libnfc --libs` \ + -L/usr/local/opt/openssl/lib -lssl -lcrypto ifeq ("$(shell uname -s)", "Darwin") - CC=/usr/local/opt/llvm/bin/clang-13 - CFLAGS=$(CFLAGS_BASE) -I/usr/local/opt/llvm/include - LD=/usr/local/opt/llvm/bin/clang-13 - LDFLAGS=$(LDFLAGS_BASE) -L/usr/local/opt/llvm/lib + # MacOS LLVM installed with brew: + #CC=/usr/local/opt/llvm/bin/clang-13 + #CFLAGS=$(CFLAGS_BASE) -I/usr/local/opt/llvm/include + #LD=/usr/local/opt/llvm/bin/clang-13 + #LDFLAGS=$(LDFLAGS_BASE) -L/usr/local/opt/llvm/lib + # Older MacOS LLVM installed with MacPorts: + CC=/opt/local/bin/clang-mp-13 + CFLAGS=$(CFLAGS_BASE) -I/opt/local/include + LD=/opt/local/bin/clang-mp-13 + LDFLAGS=$(LDFLAGS_BASE) -L/opt/local/lib else CFLAGS=$(CFLAGS_BASE) LDFLAGS=$(LDFLAGS_BASE) @@ -30,14 +39,14 @@ OBJEXT=o LIBNFC_SUPPORTED_DRIVERS= -DDRIVER_PN53X_USB_ENABLED \ -DDRIVER_PCSC_ENABLED \ -DDRIVER_ACR122_PCSC_ENABLED \ - -DDRIVER_ACR122_USB_ENABLED \ -DDRIVER_ACR122S_ENABLED \ -DDRIVER_ARYGON_ENABLED \ -DDRIVER_PN532_UART_ENABLED \ -DDRIVER_PN532_SPI_ENABLED \ -DDRIVER_PN532_I2C_ENABLED \ - -DDRIVER_PN71XX_ENABLED -LIBNFC_CUSTOM_CONFIG= -DLIBNFC_LOGLEVEL=NFC_LOG_PRIORITY_DEBUG \ + -DDRIVER_PN71XX_ENABLED \ + -DDRIVER_ACR122_USB_ENABLED +LIBNFC_CUSTOM_CONFIG= -DLIBNFC_LOGLEVEL=3 \ -ULOG_CATEGORY -DLOG_CATEGORY=\"DESFireTesting.libnfc.general\" \ -ULOG_GROUP -DLOG_GROUP=NFC_LOG_GROUP_GENERAL CFLAGS+= $(LIBNFC_SUPPORTED_DRIVERS) $(LIBNFC_CUSTOM_CONFIG) @@ -53,6 +62,9 @@ UTILS_SOURCE=LocalInclude/Config.h \ FILE_BASENAMES=NFCAntiCollisionMod \ TestAuthenticateLegacy \ TestAuthenticateISO \ + TestAuthenticateAES128 \ + TestAuthenticateAES192 \ + TestAuthenticateAES256 \ TestGeneralCommands \ TestGeneralCommands2 \ TestKeyManagementCommands \ diff --git a/Software/DESFireLibNFCTesting/Scripts/LibNFCObjectDefsRename.sh b/Software/DESFireLibNFCTesting/Scripts/LibNFCObjectDefsRename.sh index bd7768bf..54cbb001 100644 --- a/Software/DESFireLibNFCTesting/Scripts/LibNFCObjectDefsRename.sh +++ b/Software/DESFireLibNFCTesting/Scripts/LibNFCObjectDefsRename.sh @@ -5,7 +5,9 @@ if [[ "$PLATFORM" != "Darwin" ]]; then exit 0 fi +# NOTE: Run ``brew install coreutils binutils`` OBJCOPY=/usr/local/opt/binutils/bin/objcopy +#OBJCOPY=$(which objcopy) archiveFile=$(greadlink -f $1) $OBJCOPY --redefine-sym _nfc_device_pnd_set_property_bool=nfc_device_pnd_set_property_bool $archiveFile diff --git a/Software/DESFireLibNFCTesting/Source/TestAuthenticateAES128.c b/Software/DESFireLibNFCTesting/Source/TestAuthenticateAES128.c new file mode 100644 index 00000000..320792e5 --- /dev/null +++ b/Software/DESFireLibNFCTesting/Source/TestAuthenticateAES128.c @@ -0,0 +1,29 @@ +/* TestAuthenticateAES128.c + * NOTE: Need to run the following Chameleon terminal command before running + * this test case: ``DF_COMM_MODE=Enciphered:AES128`` + */ + +#include "LibNFCUtils.h" +#include "LibNFCWrapper.h" +#include "DesfireUtils.h" +#include "CryptoUtils.h" + +int main(int argc, char **argv) { + + nfc_context *nfcCtxt; + nfc_device *nfcPnd = GetNFCDeviceDriver(&nfcCtxt); + if (nfcPnd == NULL) { + return EXIT_FAILURE; + } + + // Start AES authentication (default key, blank setting of all zeros): + if (Authenticate(nfcPnd, DESFIRE_CRYPTO_AUTHTYPE_AES128, + MASTER_KEY_INDEX, ZERO_KEY)) { + return EXIT_FAILURE; + } + + FreeNFCDeviceDriver(&nfcCtxt, &nfcPnd); + return EXIT_SUCCESS; + +} + diff --git a/Software/DESFireLibNFCTesting/Source/TestAuthenticateAES192.c b/Software/DESFireLibNFCTesting/Source/TestAuthenticateAES192.c new file mode 100644 index 00000000..2d2d8d47 --- /dev/null +++ b/Software/DESFireLibNFCTesting/Source/TestAuthenticateAES192.c @@ -0,0 +1,29 @@ +/* TestAuthenticateAES192.c + * NOTE: Need to run the following Chameleon terminal command before running + * this test case: ``DF_COMM_MODE=Enciphered:AES192`` + */ + +#include "LibNFCUtils.h" +#include "LibNFCWrapper.h" +#include "DesfireUtils.h" +#include "CryptoUtils.h" + +int main(int argc, char **argv) { + + nfc_context *nfcCtxt; + nfc_device *nfcPnd = GetNFCDeviceDriver(&nfcCtxt); + if (nfcPnd == NULL) { + return EXIT_FAILURE; + } + + // Start AES authentication (default key, blank setting of all zeros): + if (Authenticate(nfcPnd, DESFIRE_CRYPTO_AUTHTYPE_AES192, + MASTER_KEY_INDEX, ZERO_KEY)) { + return EXIT_FAILURE; + } + + FreeNFCDeviceDriver(&nfcCtxt, &nfcPnd); + return EXIT_SUCCESS; + +} + diff --git a/Software/DESFireLibNFCTesting/Source/TestAuthenticateAES256.c b/Software/DESFireLibNFCTesting/Source/TestAuthenticateAES256.c new file mode 100644 index 00000000..c03525bf --- /dev/null +++ b/Software/DESFireLibNFCTesting/Source/TestAuthenticateAES256.c @@ -0,0 +1,29 @@ +/* TestAuthenticateAES256.c + * NOTE: Need to run the following Chameleon terminal command before running + * this test case: ``DF_COMM_MODE=Enciphered:AES256`` + */ + +#include "LibNFCUtils.h" +#include "LibNFCWrapper.h" +#include "DesfireUtils.h" +#include "CryptoUtils.h" + +int main(int argc, char **argv) { + + nfc_context *nfcCtxt; + nfc_device *nfcPnd = GetNFCDeviceDriver(&nfcCtxt); + if (nfcPnd == NULL) { + return EXIT_FAILURE; + } + + // Start AES authentication (default key, blank setting of all zeros): + if (Authenticate(nfcPnd, DESFIRE_CRYPTO_AUTHTYPE_AES256, + MASTER_KEY_INDEX, ZERO_KEY)) { + return EXIT_FAILURE; + } + + FreeNFCDeviceDriver(&nfcCtxt, &nfcPnd); + return EXIT_SUCCESS; + +} +