diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..dfe0770 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c24ae59 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +docs/build +*.mo \ No newline at end of file diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000..9138a7f --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,13 @@ +version: "2" + +build: + os: "ubuntu-22.04" + tools: + python: "3.10" + +python: + install: + - requirements: docs/requirements.txt + +sphinx: + configuration: docs/source/conf.py diff --git a/About_Fakes.pdf b/About_Fakes.pdf deleted file mode 100644 index 72339fd..0000000 Binary files a/About_Fakes.pdf and /dev/null differ diff --git a/Arduino_Configuration.png b/Arduino_Configuration.png deleted file mode 100644 index 53ce2ba..0000000 Binary files a/Arduino_Configuration.png and /dev/null differ diff --git a/C/C_Tutorial.pdf b/C/C_Tutorial.pdf deleted file mode 100644 index 2163aeb..0000000 Binary files a/C/C_Tutorial.pdf and /dev/null differ diff --git a/C/Libraries/DHT_sensor_library_for_ESPx-1.19.zip b/C/Libraries/DHT_sensor_library_for_ESPx-1.19.zip deleted file mode 100644 index 455dc88..0000000 Binary files a/C/Libraries/DHT_sensor_library_for_ESPx-1.19.zip and /dev/null differ diff --git a/C/Libraries/ESP32-audioI2S-2.0.0.zip b/C/Libraries/ESP32-audioI2S-2.0.0.zip deleted file mode 100644 index bfbf63a..0000000 Binary files a/C/Libraries/ESP32-audioI2S-2.0.0.zip and /dev/null differ diff --git a/C/Libraries/ESP32Servo-3.0.4.zip b/C/Libraries/ESP32Servo-3.0.4.zip deleted file mode 100644 index f70adb0..0000000 Binary files a/C/Libraries/ESP32Servo-3.0.4.zip and /dev/null differ diff --git a/C/Libraries/ESP8266Audio-1.9.8.zip b/C/Libraries/ESP8266Audio-1.9.8.zip deleted file mode 100644 index 9a43468..0000000 Binary files a/C/Libraries/ESP8266Audio-1.9.8.zip and /dev/null differ diff --git a/C/Libraries/Freenove_IR_Lib_for_ESP32-1.0.1.zip b/C/Libraries/Freenove_IR_Lib_for_ESP32-1.0.1.zip deleted file mode 100644 index fc2a62e..0000000 Binary files a/C/Libraries/Freenove_IR_Lib_for_ESP32-1.0.1.zip and /dev/null differ diff --git a/C/Libraries/Freenove_WS2812_Lib_for_ESP32-2.0.0.zip b/C/Libraries/Freenove_WS2812_Lib_for_ESP32-2.0.0.zip deleted file mode 100644 index 0947a2b..0000000 Binary files a/C/Libraries/Freenove_WS2812_Lib_for_ESP32-2.0.0.zip and /dev/null differ diff --git a/C/Libraries/IRremoteESP8266-2.8.6.zip b/C/Libraries/IRremoteESP8266-2.8.6.zip deleted file mode 100644 index a91641c..0000000 Binary files a/C/Libraries/IRremoteESP8266-2.8.6.zip and /dev/null differ diff --git a/C/Libraries/Keypad-3.1.1.zip b/C/Libraries/Keypad-3.1.1.zip deleted file mode 100644 index cd49f00..0000000 Binary files a/C/Libraries/Keypad-3.1.1.zip and /dev/null differ diff --git a/C/Libraries/LiquidCrystal-1.0.7.zip b/C/Libraries/LiquidCrystal-1.0.7.zip deleted file mode 100644 index 4bd0b6a..0000000 Binary files a/C/Libraries/LiquidCrystal-1.0.7.zip and /dev/null differ diff --git a/C/Libraries/LiquidCrystal_I2C-1.1.2.zip b/C/Libraries/LiquidCrystal_I2C-1.1.2.zip deleted file mode 100644 index b6eb2b7..0000000 Binary files a/C/Libraries/LiquidCrystal_I2C-1.1.2.zip and /dev/null differ diff --git a/C/Libraries/MPU6050_tockn-1.5.2.zip b/C/Libraries/MPU6050_tockn-1.5.2.zip deleted file mode 100644 index 5e09cd8..0000000 Binary files a/C/Libraries/MPU6050_tockn-1.5.2.zip and /dev/null differ diff --git a/C/Libraries/UltrasonicSensor-1.1.0.zip b/C/Libraries/UltrasonicSensor-1.1.0.zip deleted file mode 100644 index c4ed66e..0000000 Binary files a/C/Libraries/UltrasonicSensor-1.1.0.zip and /dev/null differ diff --git a/C/Sketches/Sketch_01.1_Blink/Sketch_01.1_Blink.ino b/C/Sketches/Sketch_01.1_Blink/Sketch_01.1_Blink.ino deleted file mode 100644 index df3c1b7..0000000 --- a/C/Sketches/Sketch_01.1_Blink/Sketch_01.1_Blink.ino +++ /dev/null @@ -1,20 +0,0 @@ -/********************************************************************** -* Filename : Blink -* Description : Make an led blinking. -* Auther : www.freenove.com -* Modification: 2024/06/18 -**********************************************************************/ -#define LED_BUILTIN 2 -// the setup function runs once when you press reset or power the board -void setup() { - // initialize digital pin LED_BUILTIN as an output. - pinMode(LED_BUILTIN, OUTPUT); -} - -// the loop function runs over and over again forever -void loop() { - digitalWrite(LED_BUILTIN, HIGH); // turn the LED off (HIGH is the voltage level) - delay(1000); // wait for a second - digitalWrite(LED_BUILTIN, LOW); // turn the LED on by making the voltage LOW - delay(1000); // wait for a second -} diff --git a/C/Sketches/Sketch_02.1_SerialToSerialBT/Sketch_02.1_SerialToSerialBT.ino b/C/Sketches/Sketch_02.1_SerialToSerialBT/Sketch_02.1_SerialToSerialBT.ino deleted file mode 100644 index 827e3ee..0000000 --- a/C/Sketches/Sketch_02.1_SerialToSerialBT/Sketch_02.1_SerialToSerialBT.ino +++ /dev/null @@ -1,25 +0,0 @@ -/********************************************************************** - Filename : SerialToSerialBT - Description : ESP32 communicates with the phone by bluetooth and print phone's data via a serial port - Auther : www.freenove.com - Modification: 2024/06/19 -**********************************************************************/ -#include "BluetoothSerial.h" - -BluetoothSerial SerialBT; -String buffer; -void setup() { - Serial.begin(115200); - SerialBT.begin("ESP32test"); //Bluetooth device name - Serial.println("\nThe device started, now you can pair it with bluetooth!"); -} - -void loop() { - if (Serial.available()) { - SerialBT.write(Serial.read()); - } - if (SerialBT.available()) { - Serial.write(SerialBT.read()); - } - delay(20); -} diff --git a/C/Sketches/Sketch_02.2_BLE_USART/Sketch_02.2_BLE_USART.ino b/C/Sketches/Sketch_02.2_BLE_USART/Sketch_02.2_BLE_USART.ino deleted file mode 100644 index 38b818e..0000000 --- a/C/Sketches/Sketch_02.2_BLE_USART/Sketch_02.2_BLE_USART.ino +++ /dev/null @@ -1,79 +0,0 @@ -/********************************************************************** - Filename : BLE_USART - Description : Esp32 communicates with the phone by BLE and sends incoming data via a serial port - Auther : www.freenove.com - Modification: 2024/06/19 -**********************************************************************/ -#include "BLEDevice.h" -#include "BLEServer.h" -#include "BLEUtils.h" -#include "BLE2902.h" - -BLECharacteristic *pCharacteristic; -bool deviceConnected = false; -uint8_t txValue = 0; -long lastMsg = 0; -String rxload="Test\n"; - -#define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" -#define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E" -#define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E" - -class MyServerCallbacks: public BLEServerCallbacks { - void onConnect(BLEServer* pServer) { - deviceConnected = true; - }; - void onDisconnect(BLEServer* pServer) { - deviceConnected = false; - //pServer->getAdvertising()->start(); //Reopen the pServer and wait for the connection. - } -}; - -class MyCallbacks: public BLECharacteristicCallbacks { - void onWrite(BLECharacteristic *pCharacteristic) { - String rxValue = pCharacteristic->getValue(); - if (rxValue.length() > 0) { - rxload=""; - for (int i = 0; i < rxValue.length(); i++){ - rxload +=(char)rxValue[i]; - } - } - } -}; - -void setupBLE(String BLEName){ - const char *ble_name=BLEName.c_str(); - BLEDevice::init(ble_name); - BLEServer *pServer = BLEDevice::createServer(); - pServer->setCallbacks(new MyServerCallbacks()); - BLEService *pService = pServer->createService(SERVICE_UUID); - pCharacteristic= pService->createCharacteristic(CHARACTERISTIC_UUID_TX,BLECharacteristic::PROPERTY_NOTIFY); - pCharacteristic->addDescriptor(new BLE2902()); - BLECharacteristic *pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID_RX,BLECharacteristic::PROPERTY_WRITE); - pCharacteristic->setCallbacks(new MyCallbacks()); - pService->start(); - pServer->getAdvertising()->start(); - Serial.println("Waiting a client connection to notify..."); -} - -void setup() { - Serial.begin(115200); - setupBLE("ESP32_Bluetooth"); -} - -void loop() { - long now = millis(); - if (now - lastMsg > 100) { - if (deviceConnected&&rxload.length()>0) { - Serial.println(rxload); - rxload=""; - } - if(Serial.available()>0){ - String str=Serial.readString(); - const char *newValue=str.c_str(); - pCharacteristic->setValue(newValue); - pCharacteristic->notify(); - } - lastMsg = now; - } -} diff --git a/C/Sketches/Sketch_03.1_SDMMC_Test/Sketch_03.1_SDMMC_Test.ino b/C/Sketches/Sketch_03.1_SDMMC_Test/Sketch_03.1_SDMMC_Test.ino deleted file mode 100644 index bef19a7..0000000 --- a/C/Sketches/Sketch_03.1_SDMMC_Test/Sketch_03.1_SDMMC_Test.ino +++ /dev/null @@ -1,65 +0,0 @@ -/********************************************************************** - Filename : SDMMC Test - Description : The SD card is accessed using the SDMMC one-bit bus - Auther : www.freenove.com - Modification: 2024/06/20 -**********************************************************************/ -#include "sd_read_write.h" -#include "SD_MMC.h" - -#define SD_MMC_CMD 15 //Please do not modify it. -#define SD_MMC_CLK 14 //Please do not modify it. -#define SD_MMC_D0 2 //Please do not modify it. - -void setup(){ - Serial.begin(115200); - SD_MMC.setPins(SD_MMC_CLK, SD_MMC_CMD, SD_MMC_D0); - if (!SD_MMC.begin("/sdcard", true, true, SDMMC_FREQ_DEFAULT, 5)) { - Serial.println("Card Mount Failed"); - return; - } - uint8_t cardType = SD_MMC.cardType(); - if(cardType == CARD_NONE){ - Serial.println("No SD_MMC card attached"); - return; - } - - Serial.print("SD_MMC Card Type: "); - if(cardType == CARD_MMC){ - Serial.println("MMC"); - } else if(cardType == CARD_SD){ - Serial.println("SDSC"); - } else if(cardType == CARD_SDHC){ - Serial.println("SDHC"); - } else { - Serial.println("UNKNOWN"); - } - - uint64_t cardSize = SD_MMC.cardSize() / (1024 * 1024); - Serial.printf("SD_MMC Card Size: %lluMB\n", cardSize); - - listDir(SD_MMC, "/", 0); - - createDir(SD_MMC, "/mydir"); - listDir(SD_MMC, "/", 0); - - removeDir(SD_MMC, "/mydir"); - listDir(SD_MMC, "/", 2); - - writeFile(SD_MMC, "/hello.txt", "Hello "); - appendFile(SD_MMC, "/hello.txt", "World!\n"); - readFile(SD_MMC, "/hello.txt"); - - deleteFile(SD_MMC, "/foo.txt"); - renameFile(SD_MMC, "/hello.txt", "/foo.txt"); - readFile(SD_MMC, "/foo.txt"); - - testFileIO(SD_MMC, "/test.txt"); - - Serial.printf("Total space: %lluMB\r\n", SD_MMC.totalBytes() / (1024 * 1024)); - Serial.printf("Used space: %lluMB\r\n", SD_MMC.usedBytes() / (1024 * 1024)); -} - -void loop(){ - delay(10000); -} \ No newline at end of file diff --git a/C/Sketches/Sketch_03.1_SDMMC_Test/sd_read_write.cpp b/C/Sketches/Sketch_03.1_SDMMC_Test/sd_read_write.cpp deleted file mode 100644 index fa0b15e..0000000 --- a/C/Sketches/Sketch_03.1_SDMMC_Test/sd_read_write.cpp +++ /dev/null @@ -1,154 +0,0 @@ -#include "sd_read_write.h" - -void listDir(fs::FS &fs, const char * dirname, uint8_t levels){ - Serial.printf("Listing directory: %s\n", dirname); - - File root = fs.open(dirname); - if(!root){ - Serial.println("Failed to open directory"); - return; - } - if(!root.isDirectory()){ - Serial.println("Not a directory"); - return; - } - - File file = root.openNextFile(); - while(file){ - if(file.isDirectory()){ - Serial.print(" DIR : "); - Serial.println(file.name()); - if(levels){ - listDir(fs, file.path(), levels -1); - } - } else { - Serial.print(" FILE: "); - Serial.print(file.name()); - Serial.print(" SIZE: "); - Serial.println(file.size()); - } - file = root.openNextFile(); - } -} - -void createDir(fs::FS &fs, const char * path){ - Serial.printf("Creating Dir: %s\n", path); - if(fs.mkdir(path)){ - Serial.println("Dir created"); - } else { - Serial.println("mkdir failed"); - } -} - -void removeDir(fs::FS &fs, const char * path){ - Serial.printf("Removing Dir: %s\n", path); - if(fs.rmdir(path)){ - Serial.println("Dir removed"); - } else { - Serial.println("rmdir failed"); - } -} - -void readFile(fs::FS &fs, const char * path){ - Serial.printf("Reading file: %s\n", path); - - File file = fs.open(path); - if(!file){ - Serial.println("Failed to open file for reading"); - return; - } - - Serial.print("Read from file: "); - while(file.available()){ - Serial.write(file.read()); - } -} - -void writeFile(fs::FS &fs, const char * path, const char * message){ - Serial.printf("Writing file: %s\n", path); - - File file = fs.open(path, FILE_WRITE); - if(!file){ - Serial.println("Failed to open file for writing"); - return; - } - if(file.print(message)){ - Serial.println("File written"); - } else { - Serial.println("Write failed"); - } -} - -void appendFile(fs::FS &fs, const char * path, const char * message){ - Serial.printf("Appending to file: %s\n", path); - - File file = fs.open(path, FILE_APPEND); - if(!file){ - Serial.println("Failed to open file for appending"); - return; - } - if(file.print(message)){ - Serial.println("Message appended"); - } else { - Serial.println("Append failed"); - } -} - -void renameFile(fs::FS &fs, const char * path1, const char * path2){ - Serial.printf("Renaming file %s to %s\n", path1, path2); - if (fs.rename(path1, path2)) { - Serial.println("File renamed"); - } else { - Serial.println("Rename failed"); - } -} - -void deleteFile(fs::FS &fs, const char * path){ - Serial.printf("Deleting file: %s\n", path); - if(fs.remove(path)){ - Serial.println("File deleted"); - } else { - Serial.println("Delete failed"); - } -} - -void testFileIO(fs::FS &fs, const char * path){ - File file = fs.open(path); - static uint8_t buf[512]; - size_t len = 0; - uint32_t start = millis(); - uint32_t end = start; - if(file){ - len = file.size(); - size_t flen = len; - start = millis(); - while(len){ - size_t toRead = len; - if(toRead > 512){ - toRead = 512; - } - file.read(buf, toRead); - len -= toRead; - } - end = millis() - start; - Serial.printf("%u bytes read for %u ms\r\n", flen, end); - file.close(); - } else { - Serial.println("Failed to open file for reading"); - } - - file = fs.open(path, FILE_WRITE); - if(!file){ - Serial.println("Failed to open file for writing"); - return; - } - - size_t i; - start = millis(); - for(i=0; i<2048; i++){ - file.write(buf, 512); - } - end = millis() - start; - Serial.printf("%u bytes written for %u ms\n", 2048 * 512, end); - file.close(); -} \ No newline at end of file diff --git a/C/Sketches/Sketch_03.1_SDMMC_Test/sd_read_write.h b/C/Sketches/Sketch_03.1_SDMMC_Test/sd_read_write.h deleted file mode 100644 index 9eb99a4..0000000 --- a/C/Sketches/Sketch_03.1_SDMMC_Test/sd_read_write.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef __SD_READ_WRITE_H -#define __SD_READ_WRITE_H - -#include "Arduino.h" -#include "FS.h" - - -void listDir(fs::FS &fs, const char * dirname, uint8_t levels); -void createDir(fs::FS &fs, const char * path); -void removeDir(fs::FS &fs, const char * path); -void readFile(fs::FS &fs, const char * path); -void writeFile(fs::FS &fs, const char * path, const char * message); -void appendFile(fs::FS &fs, const char * path, const char * message); -void renameFile(fs::FS &fs, const char * path1, const char * path2); -void deleteFile(fs::FS &fs, const char * path); -void testFileIO(fs::FS &fs, const char * path); - -#endif diff --git a/C/Sketches/Sketch_04.1_WiFi_Station/Sketch_04.1_WiFi_Station.ino b/C/Sketches/Sketch_04.1_WiFi_Station/Sketch_04.1_WiFi_Station.ino deleted file mode 100644 index c0142ba..0000000 --- a/C/Sketches/Sketch_04.1_WiFi_Station/Sketch_04.1_WiFi_Station.ino +++ /dev/null @@ -1,28 +0,0 @@ -/********************************************************************** - Filename : WiFi Station - Description : Connect to your router using ESP32 - Auther : www.freenove.com - Modification: 2024/06/20 -**********************************************************************/ -#include - -const char *ssid_Router = "********"; //Enter the router name -const char *password_Router = "********"; //Enter the router password - -void setup(){ - Serial.begin(115200); - delay(2000); - Serial.println("Setup start"); - WiFi.begin(ssid_Router, password_Router); - Serial.println(String("Connecting to ")+ssid_Router); - while (WiFi.status() != WL_CONNECTED){ - delay(500); - Serial.print("."); - } - Serial.println("\nConnected, IP address: "); - Serial.println(WiFi.localIP()); - Serial.println("Setup End"); -} - -void loop() { -} diff --git a/C/Sketches/Sketch_04.2_WiFi_AP/Sketch_04.2_WiFi_AP.ino b/C/Sketches/Sketch_04.2_WiFi_AP/Sketch_04.2_WiFi_AP.ino deleted file mode 100644 index 5d58bbf..0000000 --- a/C/Sketches/Sketch_04.2_WiFi_AP/Sketch_04.2_WiFi_AP.ino +++ /dev/null @@ -1,36 +0,0 @@ -/********************************************************************** - Filename : WiFi AP - Description : Set ESP32 to open an access point - Auther : www.freenove.com - Modification: 2024/06/20 -**********************************************************************/ -#include - -const char *ssid_AP = "WiFi_Name"; //Enter the router name -const char *password_AP = "12345678"; //Enter the router password - -IPAddress local_IP(192,168,1,100);//Set the IP address of ESP32 itself -IPAddress gateway(192,168,1,10); //Set the gateway of ESP32 itself -IPAddress subnet(255,255,255,0); //Set the subnet mask for ESP32 itself - -void setup(){ - Serial.begin(115200); - delay(2000); - Serial.println("Setting soft-AP configuration ... "); - WiFi.disconnect(); - WiFi.mode(WIFI_AP); - Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!"); - Serial.println("Setting soft-AP ... "); - boolean result = WiFi.softAP(ssid_AP, password_AP); - if(result){ - Serial.println("Ready"); - Serial.println(String("Soft-AP IP address = ") + WiFi.softAPIP().toString()); - Serial.println(String("MAC address = ") + WiFi.softAPmacAddress().c_str()); - }else{ - Serial.println("Failed!"); - } - Serial.println("Setup End"); -} - -void loop() { -} diff --git a/C/Sketches/Sketch_04.3_AP_Station/Sketch_04.3_AP_Station.ino b/C/Sketches/Sketch_04.3_AP_Station/Sketch_04.3_AP_Station.ino deleted file mode 100644 index 968da2c..0000000 --- a/C/Sketches/Sketch_04.3_AP_Station/Sketch_04.3_AP_Station.ino +++ /dev/null @@ -1,42 +0,0 @@ -/********************************************************************** - Filename : WiFi AP+Station - Description : ESP32 connects to the user's router, turning on an access point - Auther : www.freenove.com - Modification: 2024/06/20 -**********************************************************************/ -#include - -const char *ssid_Router = "********"; //Enter the router name -const char *password_Router = "********"; //Enter the router password -const char *ssid_AP = "WiFi_Name"; //Enter the router name -const char *password_AP = "12345678"; //Enter the router password - -void setup(){ - Serial.begin(115200); - Serial.println("Setting soft-AP configuration ... "); - WiFi.disconnect(); - WiFi.mode(WIFI_AP); - Serial.println("Setting soft-AP ... "); - boolean result = WiFi.softAP(ssid_AP, password_AP); - if(result){ - Serial.println("Ready"); - Serial.println(String("Soft-AP IP address = ") + WiFi.softAPIP().toString()); - Serial.println(String("MAC address = ") + WiFi.softAPmacAddress().c_str()); - }else{ - Serial.println("Failed!"); - } - - Serial.println("\nSetting Station configuration ... "); - WiFi.begin(ssid_Router, password_Router); - Serial.println(String("Connecting to ")+ ssid_Router); - while (WiFi.status() != WL_CONNECTED){ - delay(500); - Serial.print("."); - } - Serial.println("\nConnected, IP address: "); - Serial.println(WiFi.localIP()); - Serial.println("Setup End"); -} - -void loop() { -} diff --git a/C/Sketches/Sketch_05.1_WiFiClient/Sketch_05.1_WiFiClient.ino b/C/Sketches/Sketch_05.1_WiFiClient/Sketch_05.1_WiFiClient.ino deleted file mode 100644 index fea06b0..0000000 --- a/C/Sketches/Sketch_05.1_WiFiClient/Sketch_05.1_WiFiClient.ino +++ /dev/null @@ -1,59 +0,0 @@ -/********************************************************************** - Filename : WiFi Client - Description : Use ESP32's WiFi client feature to connect and communicate with a remote IP. - Auther : www.freenove.com - Modification: 2024/06/20 -**********************************************************************/ -#include - -const char *ssid_Router = "********"; //Enter the router name -const char *password_Router = "********"; //Enter the router password -#define REMOTE_IP "********" //input the remote server which is you want to connect -#define REMOTE_PORT 8888 //input the remote port which is the remote provide -WiFiClient client; - -void setup() { - Serial.begin(115200); - delay(10); - - WiFi.begin(ssid_Router, password_Router); - Serial.print("\nWaiting for WiFi... "); - while (WiFi.status() != WL_CONNECTED) { - Serial.print("."); - delay(500); - } - Serial.println(""); - Serial.println("WiFi connected"); - Serial.println("IP address: "); - Serial.println(WiFi.localIP()); - delay(500); - - Serial.print("Connecting to "); - Serial.println(REMOTE_IP); - - while (!client.connect(REMOTE_IP, REMOTE_PORT)) { - Serial.println("Connection failed."); - Serial.println("Waiting a moment before retrying..."); - } - Serial.println("Connected"); - client.print("Hello\n"); - client.print("This is my IP.\n"); -} - -void loop() { - if (client.available() > 0) { - delay(20); - //read back one line from the server - String line = client.readString(); - Serial.println(REMOTE_IP + String(":") + line); - } - if (Serial.available() > 0) { - delay(20); - String line = Serial.readString(); - client.print(line); - } - if (client.connected () == 0) { - client.stop(); - WiFi.disconnect(); - } -} diff --git a/C/Sketches/Sketch_05.1_WiFiClient/sketchWiFi/sketchWiFi.pde b/C/Sketches/Sketch_05.1_WiFiClient/sketchWiFi/sketchWiFi.pde deleted file mode 100644 index 82ce0e4..0000000 --- a/C/Sketches/Sketch_05.1_WiFiClient/sketchWiFi/sketchWiFi.pde +++ /dev/null @@ -1,240 +0,0 @@ -/* - ****************************************************************************** - * Sketch WiFi Client and Server - * Author Zhentao Lin @ Freenove (http://www.freenove.com) - * Date 2020/7/11 - ****************************************************************************** - * Brief - * This sketch is used to control a 2D ellipse through communicate to an - * ESP32 board or other micro controller. - * It will automatically detect and connect to a device (serial port) which - * use the same trans format. - ****************************************************************************** - * Copyright - * Copyright © Freenove (http://www.freenove.com) - * License - * Creative Commons Attribution ShareAlike 3.0 - * (http://creativecommons.org/licenses/by-sa/3.0/legalcode) - ****************************************************************************** -*/ -import controlP5.*; -import processing.net.*; - -ControlP5 cp5; -//Println console; -Server myServer; -Client myClient; -int dataIn=0; -int radioFlag1=0; -int radioFlag2=0; -int send_flag=1; - -void setup() { - size(600,400); - smooth(); - noStroke(); - cp5 = new ControlP5(this); - cp5.addTab("default") - .activateEvent(true) - .setHeight(30) - .setWidth(100) - .setLabel("TCP Server") - .setId(1) - ; - cp5.getTab("TCP Client") - .activateEvent(true) - .setHeight(30) - .setWidth(100) - .setId(2) - ; - - cp5.addTextfield("Local IP") - .setPosition(20,40) - .setSize(160,40) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setColorLabel(color(0)) - .setColorBackground(color(100,255)) - .moveTo("default") - ; - cp5.addTextfield("Local PORT") - .setPosition(20,120) - .setSize(160,40) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setColorLabel(color(0)) - .setColorBackground(color(100,255)) - .setText("8888") - .moveTo("default") - ; - cp5.addRadioButton("connect1") - .setPosition(20,200) - .setSize(100,25) - .addItem("Listening", 1) - .setColorLabel(color(0)) - .moveTo("default") - ; - - cp5.addTextfield("Remote IP") - .setPosition(20,40) - .setSize(160,40) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setColorLabel(color(0)) - .setColorBackground(color(100,255)) - .setText("192.168.1.xxx") - .moveTo("TCP Client") - ; - cp5.addTextfield("Remote PORT") - .setPosition(20,120) - .setSize(160,40) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setColorLabel(color(0)) - .setColorBackground(color(100,255)) - .setText("80") - .moveTo("TCP Client") - ; - cp5.addRadioButton("connect2") - .setPosition(20,200) - .setSize(100,25) - .addItem("connect Server",1) - .setColorLabel(color(0)) - .moveTo("TCP Client") - ; - - cp5.addTextarea("recvData") - .setPosition(200,40) - .setSize(350,150) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setColorBackground(color(100,255)) - .scroll(15) - .setColorForeground(color(0,100)) - .moveTo("global") - ; - cp5.addTextfield("sendData") - .setPosition(200,230) - .setSize(350,80) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setLabel("") - .setFocus(true) - .setColorBackground(color(100,255)) - .setColorForeground(color(0,100)) - .moveTo("global") - ; - cp5.addButton("clearRecv") - .setValue(0) - .setPosition(200,200) - .setSize(100,20) - .setColorLabel(color(255,100)) - .moveTo("global") - ; - cp5.addButton("clearSend") - .setValue(0) - .setPosition(200,320) - .setSize(100,20) - .setColorLabel(color(255,100)) - .moveTo("global") - ; - cp5.addButton("Send") - .setValue(0) - .setPosition(450,320) - .setSize(100,20) - .plugTo(this,"send_Textfield_SendData") - .setColorLabel(color(255,100)) - .moveTo("global") - ; - cp5.get(Textfield.class,"Local IP").setText(Server.ip()); -} - -void draw(){ - background(220); - if(radioFlag1==1){ - Client thisClient = myServer.available(); - if (thisClient !=null) { - String whatClientSaid = thisClient.readString(); - if (whatClientSaid != null) { - cp5.get(Textarea.class,"recvData").append(thisClient.ip()+": "); - cp5.get(Textarea.class,"recvData").append(whatClientSaid+"\n"); - } - } - - } - // myServer.active() - if(radioFlag2==1){ - if (myClient.available() > 0) { - String whatClientSaid = myClient.readString(); - if (whatClientSaid != null) { - cp5.get(Textarea.class,"recvData").append(cp5.get(Textfield.class,"Remote IP").getText()+": "); - cp5.get(Textarea.class,"recvData").append(whatClientSaid+"\n"); - } - } - } -} - -void controlEvent(ControlEvent theControlEvent) { - if (theControlEvent.isTab()) { - if(theControlEvent.getTab().getId()==1){ - cp5.get(Textarea.class,"recvData").clear(); - cp5.get(Textfield.class,"sendData").clear(); - send_flag=1; - } - else if(theControlEvent.getTab().getId()==2){ - cp5.get(Textarea.class,"recvData").clear(); - cp5.get(Textfield.class,"sendData").clear(); - send_flag=2; - } - } -} - -void connect1(int a) { - println("a radio Button event: "+a); - radioFlag1=a; - if(radioFlag1==1){ - String port_buffer = cp5.get(Textfield.class,"Local PORT").getText(); - int port = int(port_buffer); - myServer = new Server(this,port); - println(Server.ip()); - cp5.get(Textfield.class,"Local IP").setText(Server.ip()); - println(port); - } - else - myServer.stop(); -} -void connect2(int a) { - println("a radio Button event: "+a); - radioFlag2=a; - if(radioFlag2==1){ - String port_buffer = cp5.get(Textfield.class,"Remote PORT").getText(); - String IP_buffer = cp5.get(Textfield.class,"Remote IP").getText(); - int port = int(port_buffer); - if(IP_buffer.compareTo("192.168.1.xxx")==0){ - println("connect error!"); - } - else{ - myClient = new Client(this,IP_buffer,port); - println("connect success!"); - } - - } - else - myClient.stop(); -} -void clearRecv(){ - cp5.get(Textarea.class,"recvData").clear(); -} -void clearSend(){ - cp5.get(Textfield.class,"sendData").clear(); -} -void send_Textfield_SendData(){ - if(send_flag==1){ - myServer.write(cp5.get(Textfield.class,"sendData").getText()); - cp5.get(Textfield.class,"sendData").clear(); - } - else if(send_flag==2){ - myClient.write(cp5.get(Textfield.class,"sendData").getText()); - cp5.get(Textfield.class,"sendData").clear(); - } -} \ No newline at end of file diff --git a/C/Sketches/Sketch_05.2_WiFiServer/Sketch_05.2_WiFiServer.ino b/C/Sketches/Sketch_05.2_WiFiServer/Sketch_05.2_WiFiServer.ino deleted file mode 100644 index 6a6ffed..0000000 --- a/C/Sketches/Sketch_05.2_WiFiServer/Sketch_05.2_WiFiServer.ino +++ /dev/null @@ -1,53 +0,0 @@ -/********************************************************************** - Filename : WiFi Server - Description : Use ESP32's WiFi server feature to wait for other WiFi devices to connect. - And communicate with them once a connection has been established. - Auther : www.freenove.com - Modification: 2024/06/20 -**********************************************************************/ -#include - -#define port 80 -const char *ssid_Router = "********"; //input your wifi name -const char *password_Router = "********"; //input your wifi passwords -WiFiServer server(port); - -void setup() -{ - Serial.begin(115200); - Serial.printf("\nConnecting to "); - Serial.println(ssid_Router); - WiFi.disconnect(); - WiFi.begin(ssid_Router, password_Router); - delay(1000); - while (WiFi.status() != WL_CONNECTED) { - delay(500); - Serial.print("."); - } - Serial.println(""); - Serial.println("WiFi connected."); - Serial.print("IP address: "); - Serial.println(WiFi.localIP()); - Serial.printf("IP port: %d\n",port); - server.begin(port); - WiFi.setAutoReconnect(true); -} - -void loop(){ - WiFiClient client = server.accept(); // listen for incoming clients - if (client) { // if you get a client, - Serial.println("Client connected."); - while (client.connected()) { // loop while the client's connected - if (client.available()) { // if there's bytes to read from the client, - Serial.println(client.readStringUntil('\n')); // print it out the serial monitor - while(client.read()>0); // clear the wifi receive area cache - } - if(Serial.available()){ // if there's bytes to read from the serial monitor, - client.print(Serial.readStringUntil('\n')); // print it out the client. - while(Serial.read()>0); // clear the wifi receive area cache - } - } - client.stop(); // stop the client connecting. - Serial.println("Client Disconnected."); - } -} diff --git a/C/Sketches/Sketch_05.2_WiFiServer/sketchWiFi/sketchWiFi.pde b/C/Sketches/Sketch_05.2_WiFiServer/sketchWiFi/sketchWiFi.pde deleted file mode 100644 index 82ce0e4..0000000 --- a/C/Sketches/Sketch_05.2_WiFiServer/sketchWiFi/sketchWiFi.pde +++ /dev/null @@ -1,240 +0,0 @@ -/* - ****************************************************************************** - * Sketch WiFi Client and Server - * Author Zhentao Lin @ Freenove (http://www.freenove.com) - * Date 2020/7/11 - ****************************************************************************** - * Brief - * This sketch is used to control a 2D ellipse through communicate to an - * ESP32 board or other micro controller. - * It will automatically detect and connect to a device (serial port) which - * use the same trans format. - ****************************************************************************** - * Copyright - * Copyright © Freenove (http://www.freenove.com) - * License - * Creative Commons Attribution ShareAlike 3.0 - * (http://creativecommons.org/licenses/by-sa/3.0/legalcode) - ****************************************************************************** -*/ -import controlP5.*; -import processing.net.*; - -ControlP5 cp5; -//Println console; -Server myServer; -Client myClient; -int dataIn=0; -int radioFlag1=0; -int radioFlag2=0; -int send_flag=1; - -void setup() { - size(600,400); - smooth(); - noStroke(); - cp5 = new ControlP5(this); - cp5.addTab("default") - .activateEvent(true) - .setHeight(30) - .setWidth(100) - .setLabel("TCP Server") - .setId(1) - ; - cp5.getTab("TCP Client") - .activateEvent(true) - .setHeight(30) - .setWidth(100) - .setId(2) - ; - - cp5.addTextfield("Local IP") - .setPosition(20,40) - .setSize(160,40) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setColorLabel(color(0)) - .setColorBackground(color(100,255)) - .moveTo("default") - ; - cp5.addTextfield("Local PORT") - .setPosition(20,120) - .setSize(160,40) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setColorLabel(color(0)) - .setColorBackground(color(100,255)) - .setText("8888") - .moveTo("default") - ; - cp5.addRadioButton("connect1") - .setPosition(20,200) - .setSize(100,25) - .addItem("Listening", 1) - .setColorLabel(color(0)) - .moveTo("default") - ; - - cp5.addTextfield("Remote IP") - .setPosition(20,40) - .setSize(160,40) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setColorLabel(color(0)) - .setColorBackground(color(100,255)) - .setText("192.168.1.xxx") - .moveTo("TCP Client") - ; - cp5.addTextfield("Remote PORT") - .setPosition(20,120) - .setSize(160,40) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setColorLabel(color(0)) - .setColorBackground(color(100,255)) - .setText("80") - .moveTo("TCP Client") - ; - cp5.addRadioButton("connect2") - .setPosition(20,200) - .setSize(100,25) - .addItem("connect Server",1) - .setColorLabel(color(0)) - .moveTo("TCP Client") - ; - - cp5.addTextarea("recvData") - .setPosition(200,40) - .setSize(350,150) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setColorBackground(color(100,255)) - .scroll(15) - .setColorForeground(color(0,100)) - .moveTo("global") - ; - cp5.addTextfield("sendData") - .setPosition(200,230) - .setSize(350,80) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setLabel("") - .setFocus(true) - .setColorBackground(color(100,255)) - .setColorForeground(color(0,100)) - .moveTo("global") - ; - cp5.addButton("clearRecv") - .setValue(0) - .setPosition(200,200) - .setSize(100,20) - .setColorLabel(color(255,100)) - .moveTo("global") - ; - cp5.addButton("clearSend") - .setValue(0) - .setPosition(200,320) - .setSize(100,20) - .setColorLabel(color(255,100)) - .moveTo("global") - ; - cp5.addButton("Send") - .setValue(0) - .setPosition(450,320) - .setSize(100,20) - .plugTo(this,"send_Textfield_SendData") - .setColorLabel(color(255,100)) - .moveTo("global") - ; - cp5.get(Textfield.class,"Local IP").setText(Server.ip()); -} - -void draw(){ - background(220); - if(radioFlag1==1){ - Client thisClient = myServer.available(); - if (thisClient !=null) { - String whatClientSaid = thisClient.readString(); - if (whatClientSaid != null) { - cp5.get(Textarea.class,"recvData").append(thisClient.ip()+": "); - cp5.get(Textarea.class,"recvData").append(whatClientSaid+"\n"); - } - } - - } - // myServer.active() - if(radioFlag2==1){ - if (myClient.available() > 0) { - String whatClientSaid = myClient.readString(); - if (whatClientSaid != null) { - cp5.get(Textarea.class,"recvData").append(cp5.get(Textfield.class,"Remote IP").getText()+": "); - cp5.get(Textarea.class,"recvData").append(whatClientSaid+"\n"); - } - } - } -} - -void controlEvent(ControlEvent theControlEvent) { - if (theControlEvent.isTab()) { - if(theControlEvent.getTab().getId()==1){ - cp5.get(Textarea.class,"recvData").clear(); - cp5.get(Textfield.class,"sendData").clear(); - send_flag=1; - } - else if(theControlEvent.getTab().getId()==2){ - cp5.get(Textarea.class,"recvData").clear(); - cp5.get(Textfield.class,"sendData").clear(); - send_flag=2; - } - } -} - -void connect1(int a) { - println("a radio Button event: "+a); - radioFlag1=a; - if(radioFlag1==1){ - String port_buffer = cp5.get(Textfield.class,"Local PORT").getText(); - int port = int(port_buffer); - myServer = new Server(this,port); - println(Server.ip()); - cp5.get(Textfield.class,"Local IP").setText(Server.ip()); - println(port); - } - else - myServer.stop(); -} -void connect2(int a) { - println("a radio Button event: "+a); - radioFlag2=a; - if(radioFlag2==1){ - String port_buffer = cp5.get(Textfield.class,"Remote PORT").getText(); - String IP_buffer = cp5.get(Textfield.class,"Remote IP").getText(); - int port = int(port_buffer); - if(IP_buffer.compareTo("192.168.1.xxx")==0){ - println("connect error!"); - } - else{ - myClient = new Client(this,IP_buffer,port); - println("connect success!"); - } - - } - else - myClient.stop(); -} -void clearRecv(){ - cp5.get(Textarea.class,"recvData").clear(); -} -void clearSend(){ - cp5.get(Textfield.class,"sendData").clear(); -} -void send_Textfield_SendData(){ - if(send_flag==1){ - myServer.write(cp5.get(Textfield.class,"sendData").getText()); - cp5.get(Textfield.class,"sendData").clear(); - } - else if(send_flag==2){ - myClient.write(cp5.get(Textfield.class,"sendData").getText()); - cp5.get(Textfield.class,"sendData").clear(); - } -} \ No newline at end of file diff --git a/C/Sketches/Sketch_06.1_CameraWebServer/Sketch_06.1_CameraWebServer.ino b/C/Sketches/Sketch_06.1_CameraWebServer/Sketch_06.1_CameraWebServer.ino deleted file mode 100644 index 994d90c..0000000 --- a/C/Sketches/Sketch_06.1_CameraWebServer/Sketch_06.1_CameraWebServer.ino +++ /dev/null @@ -1,106 +0,0 @@ -/********************************************************************** - Filename : Camera Web Serrver - Description : ESP32 connects to WiFi and prints a url through a serial port. - Users visit the site to view the image data ESP32 camera. - Auther : www.freenove.com - Modification: 2024/06/20 -**********************************************************************/ -#include "esp_camera.h" -#include - -// =================== -// Select camera model -// =================== -#define CAMERA_MODEL_WROVER_KIT // Has PSRAM -//#define CAMERA_MODEL_ESP_EYE // Has PSRAM -//#define CAMERA_MODEL_ESP32S3_EYE // Has PSRAM -//#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM -//#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera version B Has PSRAM -//#define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM -//#define CAMERA_MODEL_M5STACK_ESP32CAM // No PSRAM -//#define CAMERA_MODEL_M5STACK_UNITCAM // No PSRAM -//#define CAMERA_MODEL_AI_THINKER // Has PSRAM -//#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM -// ** Espressif Internal Boards ** -//#define CAMERA_MODEL_ESP32_CAM_BOARD -//#define CAMERA_MODEL_ESP32S2_CAM_BOARD -//#define CAMERA_MODEL_ESP32S3_CAM_LCD - - -#include "camera_pins.h" - -const char *ssid_Router = "********"; //input your wifi name -const char *password_Router = "********"; //input your wifi passwords -camera_config_t config; - -void startCameraServer(); -void camera_init(); - -void setup() { - Serial.begin(115200); - Serial.setDebugOutput(true); - Serial.println(); - - camera_init(); - - // camera init - esp_err_t err = esp_camera_init(&config); - if (err != ESP_OK) { - Serial.printf("Camera init failed with error 0x%x", err); - return; - } - - sensor_t * s = esp_camera_sensor_get(); - s->set_vflip(s, 0); //1-Upside down, 0-No operation - s->set_hmirror(s, 0); //1-Reverse left and right, 0-No operation - s->set_brightness(s, 1); //up the blightness just a bit - s->set_saturation(s, -1); //lower the saturation - - WiFi.begin(ssid_Router, password_Router); - WiFi.setSleep(false); - while (WiFi.status() != WL_CONNECTED) { - delay(500); - Serial.print("."); - } - Serial.println(""); - Serial.println("WiFi connected"); - - startCameraServer(); - - Serial.print("Camera Ready! Use 'http://"); - Serial.print(WiFi.localIP()); - Serial.println("' to connect"); -} - -void loop() { - ; -} - -void camera_init() { - config.ledc_channel = LEDC_CHANNEL_0; - config.ledc_timer = LEDC_TIMER_0; - config.pin_d0 = Y2_GPIO_NUM; - config.pin_d1 = Y3_GPIO_NUM; - config.pin_d2 = Y4_GPIO_NUM; - config.pin_d3 = Y5_GPIO_NUM; - config.pin_d4 = Y6_GPIO_NUM; - config.pin_d5 = Y7_GPIO_NUM; - config.pin_d6 = Y8_GPIO_NUM; - config.pin_d7 = Y9_GPIO_NUM; - config.pin_xclk = XCLK_GPIO_NUM; - config.pin_pclk = PCLK_GPIO_NUM; - config.pin_vsync = VSYNC_GPIO_NUM; - config.pin_href = HREF_GPIO_NUM; - config.pin_sccb_sda = SIOD_GPIO_NUM; - config.pin_sccb_scl = SIOC_GPIO_NUM; - config.pin_pwdn = PWDN_GPIO_NUM; - config.pin_reset = RESET_GPIO_NUM; - config.xclk_freq_hz = 20000000; - config.frame_size = FRAMESIZE_QVGA; - config.pixel_format = PIXFORMAT_JPEG; // for streaming - //config.pixel_format = PIXFORMAT_RGB565; // for face detection/recognition - config.grab_mode = CAMERA_GRAB_WHEN_EMPTY; - config.fb_location = CAMERA_FB_IN_PSRAM; - config.jpeg_quality = 10; - config.fb_count = 2; -} diff --git a/C/Sketches/Sketch_06.1_CameraWebServer/app_httpd.cpp b/C/Sketches/Sketch_06.1_CameraWebServer/app_httpd.cpp deleted file mode 100644 index 91a072d..0000000 --- a/C/Sketches/Sketch_06.1_CameraWebServer/app_httpd.cpp +++ /dev/null @@ -1,1383 +0,0 @@ -// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -#include "esp_http_server.h" -#include "esp_timer.h" -#include "esp_camera.h" -#include "img_converters.h" -#include "fb_gfx.h" -#include "driver/ledc.h" -#include "sdkconfig.h" -#include "camera_index.h" - -#if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG) -#include "esp32-hal-log.h" -#define TAG "" -#else -#include "esp_log.h" -static const char *TAG = "camera_httpd"; -#endif - -// Face Detection will not work on boards without (or with disabled) PSRAM -#ifdef BOARD_HAS_PSRAM -#define CONFIG_ESP_FACE_DETECT_ENABLED 1 -// Face Recognition takes upward from 15 seconds per frame on chips other than ESP32S3 -// Makes no sense to have it enabled for them -#if CONFIG_IDF_TARGET_ESP32S3 -#define CONFIG_ESP_FACE_RECOGNITION_ENABLED 1 -#else -#define CONFIG_ESP_FACE_RECOGNITION_ENABLED 0 -#endif -#else -#define CONFIG_ESP_FACE_DETECT_ENABLED 0 -#define CONFIG_ESP_FACE_RECOGNITION_ENABLED 0 -#endif - -#if CONFIG_ESP_FACE_DETECT_ENABLED - -#include -#include "human_face_detect_msr01.hpp" -#include "human_face_detect_mnp01.hpp" - -#define TWO_STAGE 1 /* very large firmware, very slow, reboots when streaming... - -#define FACE_ID_SAVE_NUMBER 7 -#endif - -#define FACE_COLOR_WHITE 0x00FFFFFF -#define FACE_COLOR_BLACK 0x00000000 -#define FACE_COLOR_RED 0x000000FF -#define FACE_COLOR_GREEN 0x0000FF00 -#define FACE_COLOR_BLUE 0x00FF0000 -#define FACE_COLOR_YELLOW (FACE_COLOR_RED | FACE_COLOR_GREEN) -#define FACE_COLOR_CYAN (FACE_COLOR_BLUE | FACE_COLOR_GREEN) -#define FACE_COLOR_PURPLE (FACE_COLOR_BLUE | FACE_COLOR_RED) -#endif - -#ifdef CONFIG_LED_ILLUMINATOR_ENABLED -int led_duty = 0; -bool isStreaming = false; -#ifdef CONFIG_LED_LEDC_LOW_SPEED_MODE -#define CONFIG_LED_LEDC_SPEED_MODE LEDC_LOW_SPEED_MODE -#else -#define CONFIG_LED_LEDC_SPEED_MODE LEDC_HIGH_SPEED_MODE -#endif -#endif - -typedef struct -{ - httpd_req_t *req; - size_t len; -} jpg_chunking_t; - -#define PART_BOUNDARY "123456789000000000000987654321" -static const char *_STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY; -static const char *_STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n"; -static const char *_STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\nX-Timestamp: %d.%06d\r\n\r\n"; - -httpd_handle_t stream_httpd = NULL; -httpd_handle_t camera_httpd = NULL; - -#if CONFIG_ESP_FACE_DETECT_ENABLED - -static int8_t detection_enabled = 0; - -// #if TWO_STAGE -// static HumanFaceDetectMSR01 s1(0.1F, 0.5F, 10, 0.2F); -// static HumanFaceDetectMNP01 s2(0.5F, 0.3F, 5); -// #else -// static HumanFaceDetectMSR01 s1(0.3F, 0.5F, 10, 0.2F); -// #endif - -#if CONFIG_ESP_FACE_RECOGNITION_ENABLED -static int8_t recognition_enabled = 0; -static int8_t is_enrolling = 0; - -#if QUANT_TYPE - // S16 model - FaceRecognition112V1S16 recognizer; -#else - // S8 model - FaceRecognition112V1S8 recognizer; -#endif -#endif - -#endif - -typedef struct -{ - size_t size; //number of values used for filtering - size_t index; //current value index - size_t count; //value count - int sum; - int *values; //array to be filled with values -} ra_filter_t; - -static ra_filter_t ra_filter; - -static ra_filter_t *ra_filter_init(ra_filter_t *filter, size_t sample_size) -{ - memset(filter, 0, sizeof(ra_filter_t)); - - filter->values = (int *)malloc(sample_size * sizeof(int)); - if (!filter->values) - { - return NULL; - } - memset(filter->values, 0, sample_size * sizeof(int)); - - filter->size = sample_size; - return filter; -} - -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO -static int ra_filter_run(ra_filter_t *filter, int value) -{ - if (!filter->values) - { - return value; - } - filter->sum -= filter->values[filter->index]; - filter->values[filter->index] = value; - filter->sum += filter->values[filter->index]; - filter->index++; - filter->index = filter->index % filter->size; - if (filter->count < filter->size) - { - filter->count++; - } - return filter->sum / filter->count; -} -#endif - -#if CONFIG_ESP_FACE_DETECT_ENABLED -#if CONFIG_ESP_FACE_RECOGNITION_ENABLED -static void rgb_print(fb_data_t *fb, uint32_t color, const char *str) -{ - fb_gfx_print(fb, (fb->width - (strlen(str) * 14)) / 2, 10, color, str); -} - -static int rgb_printf(fb_data_t *fb, uint32_t color, const char *format, ...) -{ - char loc_buf[64]; - char *temp = loc_buf; - int len; - va_list arg; - va_list copy; - va_start(arg, format); - va_copy(copy, arg); - len = vsnprintf(loc_buf, sizeof(loc_buf), format, arg); - va_end(copy); - if (len >= sizeof(loc_buf)) - { - temp = (char *)malloc(len + 1); - if (temp == NULL) - { - return 0; - } - } - vsnprintf(temp, len + 1, format, arg); - va_end(arg); - rgb_print(fb, color, temp); - if (len > 64) - { - free(temp); - } - return len; -} -#endif -static void draw_face_boxes(fb_data_t *fb, std::list *results, int face_id) -{ - int x, y, w, h; - uint32_t color = FACE_COLOR_YELLOW; - if (face_id < 0) - { - color = FACE_COLOR_RED; - } - else if (face_id > 0) - { - color = FACE_COLOR_GREEN; - } - if(fb->bytes_per_pixel == 2){ - //color = ((color >> 8) & 0xF800) | ((color >> 3) & 0x07E0) | (color & 0x001F); - color = ((color >> 16) & 0x001F) | ((color >> 3) & 0x07E0) | ((color << 8) & 0xF800); - } - int i = 0; - for (std::list::iterator prediction = results->begin(); prediction != results->end(); prediction++, i++) - { - // rectangle box - x = (int)prediction->box[0]; - y = (int)prediction->box[1]; - w = (int)prediction->box[2] - x + 1; - h = (int)prediction->box[3] - y + 1; - if((x + w) > fb->width){ - w = fb->width - x; - } - if((y + h) > fb->height){ - h = fb->height - y; - } - fb_gfx_drawFastHLine(fb, x, y, w, color); - fb_gfx_drawFastHLine(fb, x, y + h - 1, w, color); - fb_gfx_drawFastVLine(fb, x, y, h, color); - fb_gfx_drawFastVLine(fb, x + w - 1, y, h, color); -#if TWO_STAGE - // landmarks (left eye, mouth left, nose, right eye, mouth right) - int x0, y0, j; - for (j = 0; j < 10; j+=2) { - x0 = (int)prediction->keypoint[j]; - y0 = (int)prediction->keypoint[j+1]; - fb_gfx_fillRect(fb, x0, y0, 3, 3, color); - } -#endif - } -} - -#if CONFIG_ESP_FACE_RECOGNITION_ENABLED -static int run_face_recognition(fb_data_t *fb, std::list *results) -{ - std::vector landmarks = results->front().keypoint; - int id = -1; - - Tensor tensor; - tensor.set_element((uint8_t *)fb->data).set_shape({fb->height, fb->width, 3}).set_auto_free(false); - - int enrolled_count = recognizer.get_enrolled_id_num(); - - if (enrolled_count < FACE_ID_SAVE_NUMBER && is_enrolling){ - id = recognizer.enroll_id(tensor, landmarks, "", true); - ESP_LOGI(TAG, "Enrolled ID: %d", id); - rgb_printf(fb, FACE_COLOR_CYAN, "ID[%u]", id); - } - - face_info_t recognize = recognizer.recognize(tensor, landmarks); - if(recognize.id >= 0){ - rgb_printf(fb, FACE_COLOR_GREEN, "ID[%u]: %.2f", recognize.id, recognize.similarity); - } else { - rgb_print(fb, FACE_COLOR_RED, "Intruder Alert!"); - } - return recognize.id; -} -#endif -#endif - -#ifdef CONFIG_LED_ILLUMINATOR_ENABLED -void enable_led(bool en) -{ // Turn LED On or Off - int duty = en ? led_duty : 0; - if (en && isStreaming && (led_duty > CONFIG_LED_MAX_INTENSITY)) - { - duty = CONFIG_LED_MAX_INTENSITY; - } - ledc_set_duty(CONFIG_LED_LEDC_SPEED_MODE, CONFIG_LED_LEDC_CHANNEL, duty); - ledc_update_duty(CONFIG_LED_LEDC_SPEED_MODE, CONFIG_LED_LEDC_CHANNEL); - ESP_LOGI(TAG, "Set LED intensity to %d", duty); -} -#endif - -static esp_err_t bmp_handler(httpd_req_t *req) -{ - camera_fb_t *fb = NULL; - esp_err_t res = ESP_OK; -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - uint64_t fr_start = esp_timer_get_time(); -#endif - fb = esp_camera_fb_get(); - if (!fb) - { - ESP_LOGE(TAG, "Camera capture failed"); - httpd_resp_send_500(req); - return ESP_FAIL; - } - - httpd_resp_set_type(req, "image/x-windows-bmp"); - httpd_resp_set_hdr(req, "Content-Disposition", "inline; filename=capture.bmp"); - httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); - - char ts[32]; - snprintf(ts, 32, "%ld.%06ld", fb->timestamp.tv_sec, fb->timestamp.tv_usec); - httpd_resp_set_hdr(req, "X-Timestamp", (const char *)ts); - - - uint8_t * buf = NULL; - size_t buf_len = 0; - bool converted = frame2bmp(fb, &buf, &buf_len); - esp_camera_fb_return(fb); - if(!converted){ - ESP_LOGE(TAG, "BMP Conversion failed"); - httpd_resp_send_500(req); - return ESP_FAIL; - } - res = httpd_resp_send(req, (const char *)buf, buf_len); - free(buf); -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - uint64_t fr_end = esp_timer_get_time(); -#endif - ESP_LOGI(TAG, "BMP: %llums, %uB", (uint64_t)((fr_end - fr_start) / 1000), buf_len); - return res; -} - -static size_t jpg_encode_stream(void *arg, size_t index, const void *data, size_t len) -{ - jpg_chunking_t *j = (jpg_chunking_t *)arg; - if (!index) - { - j->len = 0; - } - if (httpd_resp_send_chunk(j->req, (const char *)data, len) != ESP_OK) - { - return 0; - } - j->len += len; - return len; -} - -static esp_err_t capture_handler(httpd_req_t *req) -{ - camera_fb_t *fb = NULL; - esp_err_t res = ESP_OK; -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - int64_t fr_start = esp_timer_get_time(); -#endif - -#ifdef CONFIG_LED_ILLUMINATOR_ENABLED - enable_led(true); - vTaskDelay(150 / portTICK_PERIOD_MS); // The LED needs to be turned on ~150ms before the call to esp_camera_fb_get() - fb = esp_camera_fb_get(); // or it won't be visible in the frame. A better way to do this is needed. - enable_led(false); -#else - fb = esp_camera_fb_get(); -#endif - - if (!fb) - { - ESP_LOGE(TAG, "Camera capture failed"); - httpd_resp_send_500(req); - return ESP_FAIL; - } - - httpd_resp_set_type(req, "image/jpeg"); - httpd_resp_set_hdr(req, "Content-Disposition", "inline; filename=capture.jpg"); - httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); - - char ts[32]; - snprintf(ts, 32, "%ld.%06ld", fb->timestamp.tv_sec, fb->timestamp.tv_usec); - httpd_resp_set_hdr(req, "X-Timestamp", (const char *)ts); - -#if CONFIG_ESP_FACE_DETECT_ENABLED - size_t out_len, out_width, out_height; - uint8_t *out_buf; - bool s; -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - bool detected = false; -#endif - int face_id = 0; - if (!detection_enabled || fb->width > 400) - { -#endif -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - size_t fb_len = 0; -#endif - if (fb->format == PIXFORMAT_JPEG) - { -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - fb_len = fb->len; -#endif - res = httpd_resp_send(req, (const char *)fb->buf, fb->len); - } - else - { - jpg_chunking_t jchunk = {req, 0}; - res = frame2jpg_cb(fb, 80, jpg_encode_stream, &jchunk) ? ESP_OK : ESP_FAIL; - httpd_resp_send_chunk(req, NULL, 0); -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - fb_len = jchunk.len; -#endif - } - esp_camera_fb_return(fb); -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - int64_t fr_end = esp_timer_get_time(); -#endif - ESP_LOGI(TAG, "JPG: %uB %ums", (uint32_t)(fb_len), (uint32_t)((fr_end - fr_start) / 1000)); - return res; -#if CONFIG_ESP_FACE_DETECT_ENABLED - } - - jpg_chunking_t jchunk = {req, 0}; - - if (fb->format == PIXFORMAT_RGB565 -#if CONFIG_ESP_FACE_RECOGNITION_ENABLED - && !recognition_enabled -#endif - ){ -#if TWO_STAGE - HumanFaceDetectMSR01 s1(0.1F, 0.5F, 10, 0.2F); - HumanFaceDetectMNP01 s2(0.5F, 0.3F, 5); - std::list &candidates = s1.infer((uint16_t *)fb->buf, {(int)fb->height, (int)fb->width, 3}); - std::list &results = s2.infer((uint16_t *)fb->buf, {(int)fb->height, (int)fb->width, 3}, candidates); -#else - HumanFaceDetectMSR01 s1(0.3F, 0.5F, 10, 0.2F); - std::list &results = s1.infer((uint16_t *)fb->buf, {(int)fb->height, (int)fb->width, 3}); -#endif - if (results.size() > 0) { - fb_data_t rfb; - rfb.width = fb->width; - rfb.height = fb->height; - rfb.data = fb->buf; - rfb.bytes_per_pixel = 2; - rfb.format = FB_RGB565; -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - detected = true; -#endif - draw_face_boxes(&rfb, &results, face_id); - } - s = fmt2jpg_cb(fb->buf, fb->len, fb->width, fb->height, PIXFORMAT_RGB565, 90, jpg_encode_stream, &jchunk); - esp_camera_fb_return(fb); - } else - { - out_len = fb->width * fb->height * 3; - out_width = fb->width; - out_height = fb->height; - out_buf = (uint8_t*)malloc(out_len); - if (!out_buf) { - ESP_LOGE(TAG, "out_buf malloc failed"); - httpd_resp_send_500(req); - return ESP_FAIL; - } - s = fmt2rgb888(fb->buf, fb->len, fb->format, out_buf); - esp_camera_fb_return(fb); - if (!s) { - free(out_buf); - ESP_LOGE(TAG, "to rgb888 failed"); - httpd_resp_send_500(req); - return ESP_FAIL; - } - - fb_data_t rfb; - rfb.width = out_width; - rfb.height = out_height; - rfb.data = out_buf; - rfb.bytes_per_pixel = 3; - rfb.format = FB_BGR888; - -#if TWO_STAGE - HumanFaceDetectMSR01 s1(0.1F, 0.5F, 10, 0.2F); - HumanFaceDetectMNP01 s2(0.5F, 0.3F, 5); - std::list &candidates = s1.infer((uint8_t *)out_buf, {(int)out_height, (int)out_width, 3}); - std::list &results = s2.infer((uint8_t *)out_buf, {(int)out_height, (int)out_width, 3}, candidates); -#else - HumanFaceDetectMSR01 s1(0.3F, 0.5F, 10, 0.2F); - std::list &results = s1.infer((uint8_t *)out_buf, {(int)out_height, (int)out_width, 3}); -#endif - - if (results.size() > 0) { -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - detected = true; -#endif -#if CONFIG_ESP_FACE_RECOGNITION_ENABLED - if (recognition_enabled) { - face_id = run_face_recognition(&rfb, &results); - } -#endif - draw_face_boxes(&rfb, &results, face_id); - } - - s = fmt2jpg_cb(out_buf, out_len, out_width, out_height, PIXFORMAT_RGB888, 90, jpg_encode_stream, &jchunk); - free(out_buf); - } - - if (!s) { - ESP_LOGE(TAG, "JPEG compression failed"); - httpd_resp_send_500(req); - return ESP_FAIL; - } -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - int64_t fr_end = esp_timer_get_time(); -#endif - ESP_LOGI(TAG, "FACE: %uB %ums %s%d", (uint32_t)(jchunk.len), (uint32_t)((fr_end - fr_start) / 1000), detected ? "DETECTED " : "", face_id); - return res; -#endif -} - -static esp_err_t stream_handler(httpd_req_t *req) -{ - camera_fb_t *fb = NULL; - struct timeval _timestamp; - esp_err_t res = ESP_OK; - size_t _jpg_buf_len = 0; - uint8_t *_jpg_buf = NULL; - char *part_buf[128]; -#if CONFIG_ESP_FACE_DETECT_ENABLED - #if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - bool detected = false; - int64_t fr_ready = 0; - int64_t fr_recognize = 0; - int64_t fr_encode = 0; - int64_t fr_face = 0; - int64_t fr_start = 0; - #endif - int face_id = 0; - size_t out_len = 0, out_width = 0, out_height = 0; - uint8_t *out_buf = NULL; - bool s = false; -#if TWO_STAGE - HumanFaceDetectMSR01 s1(0.1F, 0.5F, 10, 0.2F); - HumanFaceDetectMNP01 s2(0.5F, 0.3F, 5); -#else - HumanFaceDetectMSR01 s1(0.3F, 0.5F, 10, 0.2F); -#endif -#endif - - static int64_t last_frame = 0; - if (!last_frame) - { - last_frame = esp_timer_get_time(); - } - - res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE); - if (res != ESP_OK) - { - return res; - } - - httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); - httpd_resp_set_hdr(req, "X-Framerate", "60"); - -#ifdef CONFIG_LED_ILLUMINATOR_ENABLED - enable_led(true); - isStreaming = true; -#endif - - while (true) - { -#if CONFIG_ESP_FACE_DETECT_ENABLED - #if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - detected = false; - #endif - face_id = 0; -#endif - - fb = esp_camera_fb_get(); - if (!fb) - { - ESP_LOGE(TAG, "Camera capture failed"); - res = ESP_FAIL; - } - else - { - _timestamp.tv_sec = fb->timestamp.tv_sec; - _timestamp.tv_usec = fb->timestamp.tv_usec; -#if CONFIG_ESP_FACE_DETECT_ENABLED - #if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - fr_start = esp_timer_get_time(); - fr_ready = fr_start; - fr_encode = fr_start; - fr_recognize = fr_start; - fr_face = fr_start; - #endif - if (!detection_enabled || fb->width > 400) - { -#endif - if (fb->format != PIXFORMAT_JPEG) - { - bool jpeg_converted = frame2jpg(fb, 80, &_jpg_buf, &_jpg_buf_len); - esp_camera_fb_return(fb); - fb = NULL; - if (!jpeg_converted) - { - ESP_LOGE(TAG, "JPEG compression failed"); - res = ESP_FAIL; - } - } - else - { - _jpg_buf_len = fb->len; - _jpg_buf = fb->buf; - } -#if CONFIG_ESP_FACE_DETECT_ENABLED - } - else - { - if (fb->format == PIXFORMAT_RGB565 -#if CONFIG_ESP_FACE_RECOGNITION_ENABLED - && !recognition_enabled -#endif - ){ -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - fr_ready = esp_timer_get_time(); -#endif -#if TWO_STAGE - std::list &candidates = s1.infer((uint16_t *)fb->buf, {(int)fb->height, (int)fb->width, 3}); - std::list &results = s2.infer((uint16_t *)fb->buf, {(int)fb->height, (int)fb->width, 3}, candidates); -#else - std::list &results = s1.infer((uint16_t *)fb->buf, {(int)fb->height, (int)fb->width, 3}); -#endif -#if CONFIG_ESP_FACE_DETECT_ENABLED && ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - fr_face = esp_timer_get_time(); - fr_recognize = fr_face; -#endif - if (results.size() > 0) { - fb_data_t rfb; - rfb.width = fb->width; - rfb.height = fb->height; - rfb.data = fb->buf; - rfb.bytes_per_pixel = 2; - rfb.format = FB_RGB565; -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - detected = true; -#endif - draw_face_boxes(&rfb, &results, face_id); - } - s = fmt2jpg(fb->buf, fb->len, fb->width, fb->height, PIXFORMAT_RGB565, 80, &_jpg_buf, &_jpg_buf_len); - esp_camera_fb_return(fb); - fb = NULL; - if (!s) { - ESP_LOGE(TAG, "fmt2jpg failed"); - res = ESP_FAIL; - } -#if CONFIG_ESP_FACE_DETECT_ENABLED && ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - fr_encode = esp_timer_get_time(); -#endif - } else - { - out_len = fb->width * fb->height * 3; - out_width = fb->width; - out_height = fb->height; - out_buf = (uint8_t*)malloc(out_len); - if (!out_buf) { - ESP_LOGE(TAG, "out_buf malloc failed"); - res = ESP_FAIL; - } else { - s = fmt2rgb888(fb->buf, fb->len, fb->format, out_buf); - esp_camera_fb_return(fb); - fb = NULL; - if (!s) { - free(out_buf); - ESP_LOGE(TAG, "to rgb888 failed"); - res = ESP_FAIL; - } else { -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - fr_ready = esp_timer_get_time(); -#endif - - fb_data_t rfb; - rfb.width = out_width; - rfb.height = out_height; - rfb.data = out_buf; - rfb.bytes_per_pixel = 3; - rfb.format = FB_BGR888; - -#if TWO_STAGE - std::list &candidates = s1.infer((uint8_t *)out_buf, {(int)out_height, (int)out_width, 3}); - std::list &results = s2.infer((uint8_t *)out_buf, {(int)out_height, (int)out_width, 3}, candidates); -#else - std::list &results = s1.infer((uint8_t *)out_buf, {(int)out_height, (int)out_width, 3}); -#endif - -#if CONFIG_ESP_FACE_DETECT_ENABLED && ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - fr_face = esp_timer_get_time(); - fr_recognize = fr_face; -#endif - - if (results.size() > 0) { -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - detected = true; -#endif -#if CONFIG_ESP_FACE_RECOGNITION_ENABLED - if (recognition_enabled) { - face_id = run_face_recognition(&rfb, &results); - #if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - fr_recognize = esp_timer_get_time(); - #endif - } -#endif - draw_face_boxes(&rfb, &results, face_id); - } - s = fmt2jpg(out_buf, out_len, out_width, out_height, PIXFORMAT_RGB888, 90, &_jpg_buf, &_jpg_buf_len); - free(out_buf); - if (!s) { - ESP_LOGE(TAG, "fmt2jpg failed"); - res = ESP_FAIL; - } -#if CONFIG_ESP_FACE_DETECT_ENABLED && ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - fr_encode = esp_timer_get_time(); -#endif - } - } - } - } -#endif - } - if (res == ESP_OK) - { - res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY)); - } - if (res == ESP_OK) - { - size_t hlen = snprintf((char *)part_buf, 128, _STREAM_PART, _jpg_buf_len, _timestamp.tv_sec, _timestamp.tv_usec); - res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen); - } - if (res == ESP_OK) - { - res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len); - } - if (fb) - { - esp_camera_fb_return(fb); - fb = NULL; - _jpg_buf = NULL; - } - else if (_jpg_buf) - { - free(_jpg_buf); - _jpg_buf = NULL; - } - if (res != ESP_OK) - { - ESP_LOGE(TAG, "send frame failed failed"); - break; - } - int64_t fr_end = esp_timer_get_time(); - -#if CONFIG_ESP_FACE_DETECT_ENABLED && ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - int64_t ready_time = (fr_ready - fr_start) / 1000; - int64_t face_time = (fr_face - fr_ready) / 1000; - int64_t recognize_time = (fr_recognize - fr_face) / 1000; - int64_t encode_time = (fr_encode - fr_recognize) / 1000; - int64_t process_time = (fr_encode - fr_start) / 1000; -#endif - - int64_t frame_time = fr_end - last_frame; - frame_time /= 1000; -#if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_INFO - uint32_t avg_frame_time = ra_filter_run(&ra_filter, frame_time); -#endif - ESP_LOGI(TAG, "MJPG: %uB %ums (%.1ffps), AVG: %ums (%.1ffps)" -#if CONFIG_ESP_FACE_DETECT_ENABLED - ", %u+%u+%u+%u=%u %s%d" -#endif - , - (uint32_t)(_jpg_buf_len), - (uint32_t)frame_time, 1000.0 / (uint32_t)frame_time, - avg_frame_time, 1000.0 / avg_frame_time -#if CONFIG_ESP_FACE_DETECT_ENABLED - , - (uint32_t)ready_time, (uint32_t)face_time, (uint32_t)recognize_time, (uint32_t)encode_time, (uint32_t)process_time, - (detected) ? "DETECTED " : "", face_id -#endif - ); - } - -#ifdef CONFIG_LED_ILLUMINATOR_ENABLED - isStreaming = false; - enable_led(false); -#endif - - return res; -} - -static esp_err_t parse_get(httpd_req_t *req, char **obuf) -{ - char *buf = NULL; - size_t buf_len = 0; - - buf_len = httpd_req_get_url_query_len(req) + 1; - if (buf_len > 1) { - buf = (char *)malloc(buf_len); - if (!buf) { - httpd_resp_send_500(req); - return ESP_FAIL; - } - if (httpd_req_get_url_query_str(req, buf, buf_len) == ESP_OK) { - *obuf = buf; - return ESP_OK; - } - free(buf); - } - httpd_resp_send_404(req); - return ESP_FAIL; -} - -static esp_err_t cmd_handler(httpd_req_t *req) -{ - char *buf = NULL; - char variable[32]; - char value[32]; - - if (parse_get(req, &buf) != ESP_OK) { - return ESP_FAIL; - } - if (httpd_query_key_value(buf, "var", variable, sizeof(variable)) != ESP_OK || - httpd_query_key_value(buf, "val", value, sizeof(value)) != ESP_OK) { - free(buf); - httpd_resp_send_404(req); - return ESP_FAIL; - } - free(buf); - - int val = atoi(value); - ESP_LOGI(TAG, "%s = %d", variable, val); - sensor_t *s = esp_camera_sensor_get(); - int res = 0; - - if (!strcmp(variable, "framesize")) { - if (s->pixformat == PIXFORMAT_JPEG) { - res = s->set_framesize(s, (framesize_t)val); - } - } - else if (!strcmp(variable, "quality")) - res = s->set_quality(s, val); - else if (!strcmp(variable, "contrast")) - res = s->set_contrast(s, val); - else if (!strcmp(variable, "brightness")) - res = s->set_brightness(s, val); - else if (!strcmp(variable, "saturation")) - res = s->set_saturation(s, val); - else if (!strcmp(variable, "gainceiling")) - res = s->set_gainceiling(s, (gainceiling_t)val); - else if (!strcmp(variable, "colorbar")) - res = s->set_colorbar(s, val); - else if (!strcmp(variable, "awb")) - res = s->set_whitebal(s, val); - else if (!strcmp(variable, "agc")) - res = s->set_gain_ctrl(s, val); - else if (!strcmp(variable, "aec")) - res = s->set_exposure_ctrl(s, val); - else if (!strcmp(variable, "hmirror")) - res = s->set_hmirror(s, val); - else if (!strcmp(variable, "vflip")) - res = s->set_vflip(s, val); - else if (!strcmp(variable, "awb_gain")) - res = s->set_awb_gain(s, val); - else if (!strcmp(variable, "agc_gain")) - res = s->set_agc_gain(s, val); - else if (!strcmp(variable, "aec_value")) - res = s->set_aec_value(s, val); - else if (!strcmp(variable, "aec2")) - res = s->set_aec2(s, val); - else if (!strcmp(variable, "dcw")) - res = s->set_dcw(s, val); - else if (!strcmp(variable, "bpc")) - res = s->set_bpc(s, val); - else if (!strcmp(variable, "wpc")) - res = s->set_wpc(s, val); - else if (!strcmp(variable, "raw_gma")) - res = s->set_raw_gma(s, val); - else if (!strcmp(variable, "lenc")) - res = s->set_lenc(s, val); - else if (!strcmp(variable, "special_effect")) - res = s->set_special_effect(s, val); - else if (!strcmp(variable, "wb_mode")) - res = s->set_wb_mode(s, val); - else if (!strcmp(variable, "ae_level")) - res = s->set_ae_level(s, val); -#ifdef CONFIG_LED_ILLUMINATOR_ENABLED - else if (!strcmp(variable, "led_intensity")) { - led_duty = val; - if (isStreaming) - enable_led(true); - } -#endif - -#if CONFIG_ESP_FACE_DETECT_ENABLED - else if (!strcmp(variable, "face_detect")) { - detection_enabled = val; -#if CONFIG_ESP_FACE_RECOGNITION_ENABLED - if (!detection_enabled) { - recognition_enabled = 0; - } -#endif - } -#if CONFIG_ESP_FACE_RECOGNITION_ENABLED - else if (!strcmp(variable, "face_enroll")){ - is_enrolling = !is_enrolling; - ESP_LOGI(TAG, "Enrolling: %s", is_enrolling?"true":"false"); - } - else if (!strcmp(variable, "face_recognize")) { - recognition_enabled = val; - if (recognition_enabled) { - detection_enabled = val; - } - } -#endif -#endif - else { - ESP_LOGI(TAG, "Unknown command: %s", variable); - res = -1; - } - - if (res < 0) { - return httpd_resp_send_500(req); - } - - httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); - return httpd_resp_send(req, NULL, 0); -} - -static int print_reg(char * p, sensor_t * s, uint16_t reg, uint32_t mask){ - return sprintf(p, "\"0x%x\":%u,", reg, s->get_reg(s, reg, mask)); -} - -static esp_err_t status_handler(httpd_req_t *req) -{ - static char json_response[1024]; - - sensor_t *s = esp_camera_sensor_get(); - char *p = json_response; - *p++ = '{'; - - if(s->id.PID == OV5640_PID || s->id.PID == OV3660_PID){ - for(int reg = 0x3400; reg < 0x3406; reg+=2){ - p+=print_reg(p, s, reg, 0xFFF);//12 bit - } - p+=print_reg(p, s, 0x3406, 0xFF); - - p+=print_reg(p, s, 0x3500, 0xFFFF0);//16 bit - p+=print_reg(p, s, 0x3503, 0xFF); - p+=print_reg(p, s, 0x350a, 0x3FF);//10 bit - p+=print_reg(p, s, 0x350c, 0xFFFF);//16 bit - - for(int reg = 0x5480; reg <= 0x5490; reg++){ - p+=print_reg(p, s, reg, 0xFF); - } - - for(int reg = 0x5380; reg <= 0x538b; reg++){ - p+=print_reg(p, s, reg, 0xFF); - } - - for(int reg = 0x5580; reg < 0x558a; reg++){ - p+=print_reg(p, s, reg, 0xFF); - } - p+=print_reg(p, s, 0x558a, 0x1FF);//9 bit - } else if(s->id.PID == OV2640_PID){ - p+=print_reg(p, s, 0xd3, 0xFF); - p+=print_reg(p, s, 0x111, 0xFF); - p+=print_reg(p, s, 0x132, 0xFF); - } - - p += sprintf(p, "\"xclk\":%u,", s->xclk_freq_hz / 1000000); - p += sprintf(p, "\"pixformat\":%u,", s->pixformat); - p += sprintf(p, "\"framesize\":%u,", s->status.framesize); - p += sprintf(p, "\"quality\":%u,", s->status.quality); - p += sprintf(p, "\"brightness\":%d,", s->status.brightness); - p += sprintf(p, "\"contrast\":%d,", s->status.contrast); - p += sprintf(p, "\"saturation\":%d,", s->status.saturation); - p += sprintf(p, "\"sharpness\":%d,", s->status.sharpness); - p += sprintf(p, "\"special_effect\":%u,", s->status.special_effect); - p += sprintf(p, "\"wb_mode\":%u,", s->status.wb_mode); - p += sprintf(p, "\"awb\":%u,", s->status.awb); - p += sprintf(p, "\"awb_gain\":%u,", s->status.awb_gain); - p += sprintf(p, "\"aec\":%u,", s->status.aec); - p += sprintf(p, "\"aec2\":%u,", s->status.aec2); - p += sprintf(p, "\"ae_level\":%d,", s->status.ae_level); - p += sprintf(p, "\"aec_value\":%u,", s->status.aec_value); - p += sprintf(p, "\"agc\":%u,", s->status.agc); - p += sprintf(p, "\"agc_gain\":%u,", s->status.agc_gain); - p += sprintf(p, "\"gainceiling\":%u,", s->status.gainceiling); - p += sprintf(p, "\"bpc\":%u,", s->status.bpc); - p += sprintf(p, "\"wpc\":%u,", s->status.wpc); - p += sprintf(p, "\"raw_gma\":%u,", s->status.raw_gma); - p += sprintf(p, "\"lenc\":%u,", s->status.lenc); - p += sprintf(p, "\"hmirror\":%u,", s->status.hmirror); - p += sprintf(p, "\"dcw\":%u,", s->status.dcw); - p += sprintf(p, "\"colorbar\":%u", s->status.colorbar); -#ifdef CONFIG_LED_ILLUMINATOR_ENABLED - p += sprintf(p, ",\"led_intensity\":%u", led_duty); -#else - p += sprintf(p, ",\"led_intensity\":%d", -1); -#endif -#if CONFIG_ESP_FACE_DETECT_ENABLED - p += sprintf(p, ",\"face_detect\":%u", detection_enabled); -#if CONFIG_ESP_FACE_RECOGNITION_ENABLED - p += sprintf(p, ",\"face_enroll\":%u,", is_enrolling); - p += sprintf(p, "\"face_recognize\":%u", recognition_enabled); -#endif -#endif - *p++ = '}'; - *p++ = 0; - httpd_resp_set_type(req, "application/json"); - httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); - return httpd_resp_send(req, json_response, strlen(json_response)); -} - -static esp_err_t xclk_handler(httpd_req_t *req) -{ - char *buf = NULL; - char _xclk[32]; - - if (parse_get(req, &buf) != ESP_OK) { - return ESP_FAIL; - } - if (httpd_query_key_value(buf, "xclk", _xclk, sizeof(_xclk)) != ESP_OK) { - free(buf); - httpd_resp_send_404(req); - return ESP_FAIL; - } - free(buf); - - int xclk = atoi(_xclk); - ESP_LOGI(TAG, "Set XCLK: %d MHz", xclk); - - sensor_t *s = esp_camera_sensor_get(); - int res = s->set_xclk(s, LEDC_TIMER_0, xclk); - if (res) { - return httpd_resp_send_500(req); - } - - httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); - return httpd_resp_send(req, NULL, 0); -} - -static esp_err_t reg_handler(httpd_req_t *req) -{ - char *buf = NULL; - char _reg[32]; - char _mask[32]; - char _val[32]; - - if (parse_get(req, &buf) != ESP_OK) { - return ESP_FAIL; - } - if (httpd_query_key_value(buf, "reg", _reg, sizeof(_reg)) != ESP_OK || - httpd_query_key_value(buf, "mask", _mask, sizeof(_mask)) != ESP_OK || - httpd_query_key_value(buf, "val", _val, sizeof(_val)) != ESP_OK) { - free(buf); - httpd_resp_send_404(req); - return ESP_FAIL; - } - free(buf); - - int reg = atoi(_reg); - int mask = atoi(_mask); - int val = atoi(_val); - ESP_LOGI(TAG, "Set Register: reg: 0x%02x, mask: 0x%02x, value: 0x%02x", reg, mask, val); - - sensor_t *s = esp_camera_sensor_get(); - int res = s->set_reg(s, reg, mask, val); - if (res) { - return httpd_resp_send_500(req); - } - - httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); - return httpd_resp_send(req, NULL, 0); -} - -static esp_err_t greg_handler(httpd_req_t *req) -{ - char *buf = NULL; - char _reg[32]; - char _mask[32]; - - if (parse_get(req, &buf) != ESP_OK) { - return ESP_FAIL; - } - if (httpd_query_key_value(buf, "reg", _reg, sizeof(_reg)) != ESP_OK || - httpd_query_key_value(buf, "mask", _mask, sizeof(_mask)) != ESP_OK) { - free(buf); - httpd_resp_send_404(req); - return ESP_FAIL; - } - free(buf); - - int reg = atoi(_reg); - int mask = atoi(_mask); - sensor_t *s = esp_camera_sensor_get(); - int res = s->get_reg(s, reg, mask); - if (res < 0) { - return httpd_resp_send_500(req); - } - ESP_LOGI(TAG, "Get Register: reg: 0x%02x, mask: 0x%02x, value: 0x%02x", reg, mask, res); - - char buffer[20]; - const char * val = itoa(res, buffer, 10); - httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); - return httpd_resp_send(req, val, strlen(val)); -} - -static int parse_get_var(char *buf, const char * key, int def) -{ - char _int[16]; - if(httpd_query_key_value(buf, key, _int, sizeof(_int)) != ESP_OK){ - return def; - } - return atoi(_int); -} - -static esp_err_t pll_handler(httpd_req_t *req) -{ - char *buf = NULL; - - if (parse_get(req, &buf) != ESP_OK) { - return ESP_FAIL; - } - - int bypass = parse_get_var(buf, "bypass", 0); - int mul = parse_get_var(buf, "mul", 0); - int sys = parse_get_var(buf, "sys", 0); - int root = parse_get_var(buf, "root", 0); - int pre = parse_get_var(buf, "pre", 0); - int seld5 = parse_get_var(buf, "seld5", 0); - int pclken = parse_get_var(buf, "pclken", 0); - int pclk = parse_get_var(buf, "pclk", 0); - free(buf); - - ESP_LOGI(TAG, "Set Pll: bypass: %d, mul: %d, sys: %d, root: %d, pre: %d, seld5: %d, pclken: %d, pclk: %d", bypass, mul, sys, root, pre, seld5, pclken, pclk); - sensor_t *s = esp_camera_sensor_get(); - int res = s->set_pll(s, bypass, mul, sys, root, pre, seld5, pclken, pclk); - if (res) { - return httpd_resp_send_500(req); - } - - httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); - return httpd_resp_send(req, NULL, 0); -} - -static esp_err_t win_handler(httpd_req_t *req) -{ - char *buf = NULL; - - if (parse_get(req, &buf) != ESP_OK) { - return ESP_FAIL; - } - - int startX = parse_get_var(buf, "sx", 0); - int startY = parse_get_var(buf, "sy", 0); - int endX = parse_get_var(buf, "ex", 0); - int endY = parse_get_var(buf, "ey", 0); - int offsetX = parse_get_var(buf, "offx", 0); - int offsetY = parse_get_var(buf, "offy", 0); - int totalX = parse_get_var(buf, "tx", 0); - int totalY = parse_get_var(buf, "ty", 0); - int outputX = parse_get_var(buf, "ox", 0); - int outputY = parse_get_var(buf, "oy", 0); - bool scale = parse_get_var(buf, "scale", 0) == 1; - bool binning = parse_get_var(buf, "binning", 0) == 1; - free(buf); - - ESP_LOGI(TAG, "Set Window: Start: %d %d, End: %d %d, Offset: %d %d, Total: %d %d, Output: %d %d, Scale: %u, Binning: %u", startX, startY, endX, endY, offsetX, offsetY, totalX, totalY, outputX, outputY, scale, binning); - sensor_t *s = esp_camera_sensor_get(); - int res = s->set_res_raw(s, startX, startY, endX, endY, offsetX, offsetY, totalX, totalY, outputX, outputY, scale, binning); - if (res) { - return httpd_resp_send_500(req); - } - - httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); - return httpd_resp_send(req, NULL, 0); -} - -static esp_err_t index_handler(httpd_req_t *req) -{ - httpd_resp_set_type(req, "text/html"); - httpd_resp_set_hdr(req, "Content-Encoding", "gzip"); - sensor_t *s = esp_camera_sensor_get(); - if (s != NULL) { - if (s->id.PID == OV3660_PID) { - return httpd_resp_send(req, (const char *)index_ov3660_html_gz, index_ov3660_html_gz_len); - } else if (s->id.PID == OV5640_PID) { - return httpd_resp_send(req, (const char *)index_ov5640_html_gz, index_ov5640_html_gz_len); - } else { - return httpd_resp_send(req, (const char *)index_ov2640_html_gz, index_ov2640_html_gz_len); - } - } else { - ESP_LOGE(TAG, "Camera sensor not found"); - return httpd_resp_send_500(req); - } -} - -void startCameraServer() -{ - httpd_config_t config = HTTPD_DEFAULT_CONFIG(); - config.max_uri_handlers = 16; - - httpd_uri_t index_uri = { - .uri = "/", - .method = HTTP_GET, - .handler = index_handler, - .user_ctx = NULL -#ifdef CONFIG_HTTPD_WS_SUPPORT - , - .is_websocket = true, - .handle_ws_control_frames = false, - .supported_subprotocol = NULL -#endif - }; - - httpd_uri_t status_uri = { - .uri = "/status", - .method = HTTP_GET, - .handler = status_handler, - .user_ctx = NULL -#ifdef CONFIG_HTTPD_WS_SUPPORT - , - .is_websocket = true, - .handle_ws_control_frames = false, - .supported_subprotocol = NULL -#endif - }; - - httpd_uri_t cmd_uri = { - .uri = "/control", - .method = HTTP_GET, - .handler = cmd_handler, - .user_ctx = NULL -#ifdef CONFIG_HTTPD_WS_SUPPORT - , - .is_websocket = true, - .handle_ws_control_frames = false, - .supported_subprotocol = NULL -#endif - }; - - httpd_uri_t capture_uri = { - .uri = "/capture", - .method = HTTP_GET, - .handler = capture_handler, - .user_ctx = NULL -#ifdef CONFIG_HTTPD_WS_SUPPORT - , - .is_websocket = true, - .handle_ws_control_frames = false, - .supported_subprotocol = NULL -#endif - }; - - httpd_uri_t stream_uri = { - .uri = "/stream", - .method = HTTP_GET, - .handler = stream_handler, - .user_ctx = NULL -#ifdef CONFIG_HTTPD_WS_SUPPORT - , - .is_websocket = true, - .handle_ws_control_frames = false, - .supported_subprotocol = NULL -#endif - }; - - httpd_uri_t bmp_uri = { - .uri = "/bmp", - .method = HTTP_GET, - .handler = bmp_handler, - .user_ctx = NULL -#ifdef CONFIG_HTTPD_WS_SUPPORT - , - .is_websocket = true, - .handle_ws_control_frames = false, - .supported_subprotocol = NULL -#endif - }; - - httpd_uri_t xclk_uri = { - .uri = "/xclk", - .method = HTTP_GET, - .handler = xclk_handler, - .user_ctx = NULL -#ifdef CONFIG_HTTPD_WS_SUPPORT - , - .is_websocket = true, - .handle_ws_control_frames = false, - .supported_subprotocol = NULL -#endif - }; - - httpd_uri_t reg_uri = { - .uri = "/reg", - .method = HTTP_GET, - .handler = reg_handler, - .user_ctx = NULL -#ifdef CONFIG_HTTPD_WS_SUPPORT - , - .is_websocket = true, - .handle_ws_control_frames = false, - .supported_subprotocol = NULL -#endif - }; - - httpd_uri_t greg_uri = { - .uri = "/greg", - .method = HTTP_GET, - .handler = greg_handler, - .user_ctx = NULL -#ifdef CONFIG_HTTPD_WS_SUPPORT - , - .is_websocket = true, - .handle_ws_control_frames = false, - .supported_subprotocol = NULL -#endif - }; - - httpd_uri_t pll_uri = { - .uri = "/pll", - .method = HTTP_GET, - .handler = pll_handler, - .user_ctx = NULL -#ifdef CONFIG_HTTPD_WS_SUPPORT - , - .is_websocket = true, - .handle_ws_control_frames = false, - .supported_subprotocol = NULL -#endif - }; - - httpd_uri_t win_uri = { - .uri = "/resolution", - .method = HTTP_GET, - .handler = win_handler, - .user_ctx = NULL -#ifdef CONFIG_HTTPD_WS_SUPPORT - , - .is_websocket = true, - .handle_ws_control_frames = false, - .supported_subprotocol = NULL -#endif - }; - - ra_filter_init(&ra_filter, 20); - -#if CONFIG_ESP_FACE_RECOGNITION_ENABLED - recognizer.set_partition(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, "fr"); - - // load ids from flash partition - recognizer.set_ids_from_flash(); -#endif - ESP_LOGI(TAG, "Starting web server on port: '%d'", config.server_port); - if (httpd_start(&camera_httpd, &config) == ESP_OK) - { - httpd_register_uri_handler(camera_httpd, &index_uri); - httpd_register_uri_handler(camera_httpd, &cmd_uri); - httpd_register_uri_handler(camera_httpd, &status_uri); - httpd_register_uri_handler(camera_httpd, &capture_uri); - httpd_register_uri_handler(camera_httpd, &bmp_uri); - - httpd_register_uri_handler(camera_httpd, &xclk_uri); - httpd_register_uri_handler(camera_httpd, ®_uri); - httpd_register_uri_handler(camera_httpd, &greg_uri); - httpd_register_uri_handler(camera_httpd, &pll_uri); - httpd_register_uri_handler(camera_httpd, &win_uri); - } - - config.server_port += 1; - config.ctrl_port += 1; - ESP_LOGI(TAG, "Starting stream server on port: '%d'", config.server_port); - if (httpd_start(&stream_httpd, &config) == ESP_OK) - { - httpd_register_uri_handler(stream_httpd, &stream_uri); - } -} diff --git a/C/Sketches/Sketch_06.1_CameraWebServer/camera_index.h b/C/Sketches/Sketch_06.1_CameraWebServer/camera_index.h deleted file mode 100644 index fa42e69..0000000 --- a/C/Sketches/Sketch_06.1_CameraWebServer/camera_index.h +++ /dev/null @@ -1,1571 +0,0 @@ - - -//File: index_ov2640.html.gz, Size: 6787 -#define index_ov2640_html_gz_len 6787 -const uint8_t index_ov2640_html_gz[] = { - 0x1F, 0x8B, 0x08, 0x08, 0x23, 0xFC, 0x69, 0x5E, 0x00, 0x03, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x5F, - 0x6F, 0x76, 0x32, 0x36, 0x34, 0x30, 0x2E, 0x68, 0x74, 0x6D, 0x6C, 0x00, 0xED, 0x3D, 0x6B, 0x73, - 0xDB, 0x46, 0x92, 0xDF, 0xFD, 0x2B, 0x60, 0x24, 0x6B, 0x92, 0x25, 0x92, 0x22, 0x29, 0x4A, 0x96, - 0x15, 0x89, 0x3E, 0x5B, 0x96, 0x1F, 0xB5, 0x76, 0xE2, 0xB5, 0x12, 0xC7, 0x5B, 0xA9, 0x2D, 0x07, - 0x04, 0x86, 0x24, 0x62, 0x10, 0xE0, 0x02, 0xA0, 0x48, 0x26, 0xA5, 0xDF, 0x71, 0x3F, 0xE8, 0xFE, - 0xD8, 0x75, 0xCF, 0x03, 0x18, 0x00, 0x83, 0x07, 0x49, 0x89, 0xF4, 0xFA, 0x8E, 0x4E, 0x45, 0x78, - 0x4C, 0xF7, 0xF4, 0xBB, 0x7B, 0x66, 0x30, 0xC0, 0xF9, 0x43, 0xCB, 0x33, 0xC3, 0xD5, 0x8C, 0x68, - 0x93, 0x70, 0xEA, 0x0C, 0x1E, 0x9C, 0xB3, 0x3F, 0x1A, 0xFC, 0xCE, 0x27, 0xC4, 0xB0, 0xD8, 0x21, - 0x3D, 0x9D, 0x92, 0xD0, 0xD0, 0xCC, 0x89, 0xE1, 0x07, 0x24, 0xBC, 0xD0, 0xE7, 0xE1, 0xA8, 0x75, - 0xAA, 0xA7, 0x6F, 0xBB, 0xC6, 0x94, 0x5C, 0xE8, 0x37, 0x36, 0x59, 0xCC, 0x3C, 0x3F, 0xD4, 0x35, - 0xD3, 0x73, 0x43, 0xE2, 0x42, 0xF3, 0x85, 0x6D, 0x85, 0x93, 0x0B, 0x8B, 0xDC, 0xD8, 0x26, 0x69, - 0xD1, 0x93, 0xA6, 0xED, 0xDA, 0xA1, 0x6D, 0x38, 0xAD, 0xC0, 0x34, 0x1C, 0x72, 0xD1, 0x95, 0x71, - 0x85, 0x76, 0xE8, 0x90, 0xC1, 0xD5, 0xF5, 0xFB, 0xA3, 0x9E, 0xF6, 0xD3, 0xC7, 0x5E, 0xFF, 0xA4, - 0x73, 0x7E, 0xC8, 0xAE, 0xC5, 0x6D, 0x82, 0x70, 0x25, 0x9F, 0xE3, 0x6F, 0xE8, 0x59, 0x2B, 0xED, - 0xAF, 0xC4, 0x25, 0xFC, 0x8D, 0x80, 0x88, 0xD6, 0xC8, 0x98, 0xDA, 0xCE, 0xEA, 0x4C, 0x7B, 0xE6, - 0x43, 0x9F, 0xCD, 0xD7, 0xC4, 0xB9, 0x21, 0xA1, 0x6D, 0x1A, 0xCD, 0xC0, 0x70, 0x83, 0x56, 0x40, - 0x7C, 0x7B, 0xF4, 0x43, 0x06, 0x70, 0x68, 0x98, 0x5F, 0xC6, 0xBE, 0x37, 0x77, 0xAD, 0x33, 0xED, - 0xBB, 0xEE, 0x29, 0xFE, 0xCB, 0x36, 0x32, 0x3D, 0xC7, 0xF3, 0xE1, 0xFE, 0xD5, 0x4B, 0xFC, 0x97, - 0xBD, 0x4F, 0x7B, 0x0F, 0xEC, 0x3F, 0xC9, 0x99, 0xD6, 0x3D, 0x99, 0x2D, 0x13, 0xF7, 0x6F, 0x1F, - 0x24, 0x4E, 0x27, 0xBD, 0x3C, 0xEA, 0x39, 0xFC, 0x69, 0x31, 0x7C, 0x40, 0xCC, 0xD0, 0xF6, 0xDC, - 0xF6, 0xD4, 0xB0, 0x5D, 0x05, 0x26, 0xCB, 0x0E, 0x66, 0x8E, 0x01, 0x32, 0x18, 0x39, 0xA4, 0x10, - 0xCF, 0x77, 0x53, 0xE2, 0xCE, 0x9B, 0x25, 0xD8, 0x10, 0x49, 0xCB, 0xB2, 0x7D, 0xD6, 0xEA, 0x0C, - 0xE5, 0x30, 0x9F, 0xBA, 0xA5, 0x68, 0x8B, 0xE8, 0x72, 0x3D, 0x97, 0x28, 0x04, 0x88, 0x1D, 0x2D, - 0x7C, 0x63, 0x86, 0x0D, 0xF0, 0x6F, 0xB6, 0xC9, 0xD4, 0x76, 0x99, 0x51, 0x9D, 0x69, 0x47, 0xFD, - 0xCE, 0x6C, 0x59, 0xA2, 0xCA, 0xA3, 0x13, 0xFC, 0x97, 0x6D, 0x34, 0x33, 0x2C, 0xCB, 0x76, 0xC7, - 0x67, 0xDA, 0xA9, 0x12, 0x85, 0xE7, 0x5B, 0xC4, 0x6F, 0xF9, 0x86, 0x65, 0xCF, 0x83, 0x33, 0xAD, - 0xAF, 0x6A, 0x33, 0x35, 0xFC, 0x31, 0xD0, 0x12, 0x7A, 0x40, 0x6C, 0xAB, 0xAB, 0xA4, 0x84, 0x37, - 0xF1, 0xED, 0xF1, 0x24, 0x04, 0x95, 0x66, 0xDA, 0xA4, 0x85, 0xC6, 0x5D, 0xA8, 0x4C, 0x9F, 0x85, - 0x72, 0x53, 0x4B, 0xCD, 0x70, 0xEC, 0xB1, 0xDB, 0xB2, 0x43, 0x32, 0x05, 0x76, 0x82, 0xD0, 0x27, - 0xA1, 0x39, 0x29, 0x22, 0x65, 0x64, 0x8F, 0xE7, 0x3E, 0x51, 0x10, 0x12, 0xC9, 0xAD, 0x80, 0x61, - 0xB8, 0x99, 0xBD, 0xD5, 0x5A, 0x90, 0xE1, 0x17, 0x3B, 0x6C, 0x71, 0x99, 0x0C, 0xC9, 0xC8, 0xF3, - 0x89, 0xB2, 0xA5, 0x68, 0xE1, 0x78, 0xE6, 0x97, 0x56, 0x10, 0x1A, 0x7E, 0x58, 0x05, 0xA1, 0x31, - 0x0A, 0x89, 0x5F, 0x8E, 0x8F, 0xA0, 0x55, 0x94, 0x63, 0xCB, 0xEF, 0x96, 0x37, 0xB0, 0x5D, 0xC7, - 0x76, 0x49, 0x75, 0xF2, 0xF2, 0xFA, 0x4D, 0xA2, 0x63, 0xAD, 0x2A, 0x28, 0xC6, 0x9E, 0x8E, 0x8B, - 0xAC, 0x84, 0xF2, 0x9A, 0xED, 0x8C, 0xFB, 0x4D, 0xB7, 0xD3, 0xF9, 0x5B, 0xF6, 0xE6, 0x84, 0x30, - 0x33, 0x35, 0xE6, 0xA1, 0xB7, 0xBD, 0x47, 0x64, 0xDC, 0x2A, 0xC5, 0xC7, 0x7F, 0x4D, 0x89, 0x65, - 0x1B, 0x5A, 0x5D, 0x72, 0xE7, 0xD3, 0x0E, 0xD8, 0x54, 0x43, 0x33, 0x5C, 0x4B, 0xAB, 0x7B, 0xBE, - 0x0D, 0x8E, 0x60, 0xD0, 0x70, 0xE3, 0xC0, 0x15, 0x48, 0x1C, 0x33, 0xD2, 0x50, 0xB0, 0x5C, 0xE0, - 0x33, 0xB2, 0x44, 0xD4, 0x6E, 0x83, 0xBF, 0x0A, 0x21, 0x07, 0x7F, 0xA5, 0x0E, 0xA4, 0xE0, 0x91, - 0xA2, 0x2F, 0xD2, 0x97, 0x4C, 0x61, 0x9E, 0xCE, 0xF0, 0x37, 0x35, 0x96, 0xAD, 0x42, 0xDD, 0x89, - 0x46, 0x42, 0x87, 0x90, 0x66, 0xCD, 0x3A, 0x34, 0xBD, 0x99, 0x68, 0x2D, 0x0D, 0xA3, 0x64, 0x43, - 0x0D, 0xC3, 0x91, 0xAA, 0x55, 0x8E, 0x3F, 0xD9, 0x28, 0xD6, 0x60, 0x57, 0xCD, 0x6A, 0x1C, 0x3B, - 0xD8, 0x3F, 0x95, 0x0D, 0x31, 0x4E, 0x72, 0xA3, 0x08, 0xFE, 0xAA, 0x47, 0x92, 0x18, 0x59, 0x69, - 0x34, 0x51, 0x20, 0xCE, 0x8F, 0x28, 0x19, 0xBC, 0x79, 0xDE, 0xAD, 0xC0, 0x5A, 0x4C, 0x42, 0xD5, - 0xE8, 0xA2, 0x40, 0x5C, 0x44, 0x43, 0x69, 0x94, 0xC1, 0xDF, 0x6D, 0x85, 0x7A, 0xE3, 0xBB, 0xE1, - 0x3C, 0x0C, 0x3D, 0x37, 0xD8, 0x2A, 0x45, 0xE5, 0xF9, 0xD9, 0x1F, 0xF3, 0x20, 0xB4, 0x47, 0xAB, - 0x16, 0x77, 0x69, 0xF0, 0xB3, 0x99, 0x01, 0x25, 0xE4, 0x90, 0x84, 0x0B, 0x42, 0x8A, 0xCB, 0x0D, - 0xD7, 0xB8, 0x81, 0xB8, 0x33, 0x1E, 0x3B, 0x2A, 0xDB, 0x33, 0xE7, 0x7E, 0x80, 0x75, 0xDB, 0xCC, - 0xB3, 0x01, 0xB1, 0x9F, 0xED, 0x38, 0xE9, 0x83, 0x15, 0x3B, 0x6A, 0x99, 0x43, 0x45, 0x5F, 0xDE, - 0x3C, 0x44, 0x19, 0x2B, 0x35, 0xE1, 0x01, 0x3B, 0x76, 0xB8, 0x52, 0xDE, 0xE3, 0x9E, 0xA8, 0xB8, - 0x23, 0x5C, 0xB0, 0x30, 0x2D, 0x24, 0xE9, 0x3A, 0x33, 0x27, 0xC4, 0xFC, 0x42, 0xAC, 0x83, 0xD2, - 0x32, 0xAC, 0xAC, 0x3C, 0x6C, 0xDB, 0xEE, 0x6C, 0x1E, 0xB6, 0xB0, 0x9C, 0x9A, 0xDD, 0x8B, 0xCE, - 0xA9, 0x41, 0x0A, 0x16, 0x7B, 0xBD, 0xA2, 0xA2, 0xE2, 0x78, 0xB6, 0x2C, 0x16, 0x82, 0x4C, 0xEC, - 0xC0, 0x31, 0x86, 0xC4, 0x29, 0x22, 0x99, 0x3B, 0x43, 0x4E, 0xD8, 0xE5, 0xB1, 0x2A, 0xBF, 0x76, - 0xA3, 0x94, 0xC5, 0xC9, 0xAB, 0xFF, 0xF8, 0x6F, 0x95, 0xE5, 0x48, 0x8F, 0x9B, 0x89, 0x4B, 0x01, - 0x71, 0xC0, 0xC1, 0xF2, 0x4A, 0x6F, 0x68, 0xB3, 0x00, 0x1A, 0x0A, 0x3B, 0xF0, 0x0D, 0x77, 0x4C, - 0x20, 0x16, 0x2C, 0x9B, 0xE2, 0xB0, 0x78, 0x60, 0x50, 0x89, 0x7D, 0x0C, 0xD5, 0xC7, 0xC5, 0x03, - 0x11, 0x16, 0x10, 0x9A, 0x5A, 0x9B, 0x1D, 0x6C, 0x50, 0x95, 0x48, 0xFA, 0x2D, 0x24, 0xA4, 0xAB, - 0xB4, 0x0E, 0x56, 0x98, 0x28, 0x3D, 0x27, 0x69, 0x5B, 0xCA, 0x42, 0xBF, 0x34, 0x34, 0x88, 0x21, - 0xDF, 0x68, 0x54, 0x36, 0x68, 0x1C, 0x8D, 0x8E, 0x3A, 0x47, 0xFD, 0xD2, 0xCA, 0x49, 0xC9, 0x65, - 0x6A, 0xE0, 0xA8, 0x08, 0x1D, 0x51, 0x58, 0x29, 0x34, 0x82, 0xC0, 0xB8, 0x51, 0x16, 0xED, 0x5E, - 0x60, 0xB3, 0x91, 0x9B, 0x31, 0x0C, 0x60, 0xEC, 0x16, 0x2A, 0x86, 0x5E, 0xDC, 0xD0, 0x7B, 0x4A, - 0xFA, 0x68, 0x49, 0xA7, 0x74, 0x01, 0x21, 0x5E, 0x35, 0xD9, 0x09, 0x0D, 0xA8, 0x9B, 0x48, 0x0A, - 0x56, 0x16, 0x95, 0x21, 0x59, 0x86, 0x2D, 0x8B, 0x98, 0x9E, 0xCF, 0xAA, 0xC1, 0x9C, 0x91, 0x63, - 0x4A, 0x91, 0xE5, 0x16, 0x7B, 0x36, 0xF1, 0x6E, 0x88, 0xAF, 0x10, 0x56, 0x4A, 0xA9, 0xFD, 0x27, - 0x7D, 0xAB, 0x02, 0x36, 0x03, 0xD2, 0xA3, 0x52, 0xF6, 0x49, 0x74, 0xBD, 0xAE, 0xD9, 0x2B, 0xF4, - 0x63, 0x86, 0xAE, 0x0D, 0x3E, 0x63, 0x0C, 0x1D, 0x62, 0x15, 0x64, 0x33, 0x8B, 0x8C, 0x8C, 0xB9, - 0x13, 0x96, 0x58, 0xA5, 0xD1, 0xC1, 0x7F, 0x45, 0x3D, 0xD2, 0x30, 0xF4, 0x1B, 0xCE, 0x0B, 0x5D, - 0xD0, 0xC0, 0xF1, 0x2F, 0x45, 0x9F, 0xA2, 0xD4, 0x30, 0x66, 0x33, 0x62, 0x40, 0x2B, 0x93, 0xE4, - 0xE9, 0xA1, 0xD2, 0x10, 0x43, 0x1D, 0xE7, 0x2B, 0x8D, 0xDB, 0x4B, 0x1D, 0x36, 0x2A, 0x1E, 0xD7, - 0xE2, 0xF9, 0x6C, 0xE4, 0x99, 0x73, 0x55, 0x55, 0x53, 0xCD, 0xF1, 0xB2, 0xF8, 0xCE, 0x84, 0xC8, - 0x02, 0xC7, 0xA6, 0xEE, 0x3F, 0x77, 0x5D, 0xD4, 0x68, 0x2B, 0xF4, 0x81, 0x4D, 0x45, 0x47, 0xD5, - 0x04, 0xB7, 0x51, 0x0C, 0x4B, 0x08, 0x36, 0x6F, 0xEE, 0x2A, 0x15, 0xA6, 0x14, 0xE1, 0x34, 0x8A, - 0xB4, 0x1A, 0xC4, 0x10, 0xDB, 0x12, 0xA8, 0xB6, 0x93, 0x4B, 0x38, 0x99, 0x4F, 0x55, 0x75, 0x94, - 0xE8, 0xAC, 0x0B, 0x49, 0x9F, 0x75, 0xE7, 0x8F, 0x87, 0x46, 0xBD, 0xD3, 0xEC, 0x34, 0x8F, 0xE0, - 0x7F, 0x8A, 0xF1, 0x4C, 0xB1, 0x71, 0x71, 0xF1, 0xE6, 0x58, 0x5E, 0x2A, 0x44, 0x97, 0x4F, 0x2B, - 0xE5, 0x05, 0xFB, 0x52, 0x5D, 0x54, 0xF7, 0xA4, 0xE4, 0xFC, 0x52, 0xB7, 0x5D, 0x92, 0x87, 0x73, - 0x4C, 0x7A, 0x7D, 0x43, 0x54, 0x58, 0xCB, 0xBA, 0x2A, 0x9E, 0x7A, 0x7F, 0xB6, 0x58, 0x11, 0xF2, - 0x7F, 0xDE, 0xDA, 0x25, 0x51, 0x7C, 0xD3, 0x96, 0xBE, 0xB6, 0x5C, 0x82, 0x7D, 0xDB, 0x46, 0x27, - 0x5F, 0xEB, 0x2D, 0x5E, 0xF5, 0x01, 0x85, 0x2E, 0x8C, 0x41, 0x7D, 0x18, 0x8C, 0xE6, 0x56, 0x86, - 0x52, 0x9B, 0x0D, 0x64, 0x30, 0xB2, 0x1D, 0xA7, 0xE5, 0x78, 0x8B, 0xF2, 0x4A, 0xA4, 0xD8, 0x92, - 0x33, 0x76, 0x5A, 0x6E, 0xF2, 0x9B, 0x52, 0x3B, 0x87, 0xC8, 0xF5, 0x1F, 0x41, 0xED, 0xB7, 0xED, - 0x70, 0x85, 0xAE, 0xB1, 0x59, 0xA2, 0xD8, 0xC0, 0x1E, 0xB7, 0xEB, 0xA8, 0x92, 0x29, 0xB1, 0x4A, - 0xB0, 0x78, 0xD8, 0xB3, 0xB0, 0x43, 0x73, 0xB2, 0xC1, 0xD0, 0x33, 0x1E, 0x18, 0xF9, 0xC4, 0x31, - 0xB0, 0x82, 0xDF, 0x68, 0x86, 0xA2, 0x74, 0xF8, 0x26, 0x83, 0x57, 0xE1, 0x84, 0x8A, 0xEE, 0xEB, - 0x99, 0x5D, 0x6A, 0xB3, 0xDA, 0x21, 0x3F, 0x56, 0xAB, 0xCD, 0xBA, 0xA4, 0xDC, 0x4F, 0x7A, 0x86, - 0xBA, 0xD1, 0x1A, 0x11, 0x5D, 0x04, 0xED, 0xB1, 0x4F, 0x56, 0x15, 0x98, 0x69, 0xF2, 0xBF, 0x67, - 0x6C, 0xFE, 0x78, 0xF3, 0xA9, 0x12, 0x9A, 0x00, 0xB8, 0x15, 0xB5, 0xFB, 0x41, 0x85, 0xAE, 0xF3, - 0xBB, 0xAC, 0x62, 0x8F, 0xD1, 0xEC, 0xA8, 0xAE, 0x57, 0x08, 0x37, 0x05, 0x29, 0x54, 0x6D, 0xAA, - 0x22, 0xFB, 0xAA, 0xC7, 0xF3, 0x64, 0x14, 0xE6, 0x2C, 0xFE, 0xD0, 0x3A, 0xF5, 0xA8, 0x38, 0xBA, - 0xB5, 0xA4, 0xD9, 0x94, 0xD2, 0xC8, 0x11, 0x4D, 0x62, 0xE6, 0x5B, 0x9F, 0x12, 0x33, 0x46, 0xCF, - 0xB5, 0x91, 0xE7, 0xAB, 0x44, 0x94, 0xCF, 0x54, 0xCD, 0xD0, 0x66, 0xCA, 0x53, 0x3E, 0xA8, 0x87, - 0x7C, 0xAA, 0xF7, 0x4E, 0x94, 0x6B, 0x2B, 0x05, 0x8D, 0x8B, 0x48, 0xCB, 0x9D, 0x05, 0xCC, 0xA6, - 0xAC, 0xDC, 0x01, 0xB2, 0x1C, 0x8B, 0x94, 0x8A, 0x2A, 0xF6, 0xCA, 0xA2, 0x08, 0x93, 0x9D, 0xC9, - 0x2A, 0x34, 0x76, 0x7B, 0x6A, 0x40, 0xD9, 0x8B, 0xE6, 0x6A, 0x00, 0x46, 0x95, 0xFE, 0xAA, 0x98, - 0xBB, 0x34, 0xC7, 0xDA, 0x3D, 0xE9, 0x94, 0x74, 0x69, 0x3A, 0x5E, 0xB0, 0xE5, 0x04, 0x58, 0xFE, - 0xFC, 0x97, 0xF2, 0x4E, 0xA5, 0xD4, 0x5D, 0xE8, 0x53, 0xC5, 0xEE, 0x98, 0x92, 0x79, 0xB7, 0xA3, - 0x8C, 0xB4, 0x85, 0xB3, 0x94, 0x74, 0x06, 0x8D, 0xAE, 0x5F, 0x9E, 0x69, 0x26, 0x51, 0x87, 0xD1, - 0xE4, 0x44, 0x5D, 0x95, 0xA9, 0xD2, 0x42, 0x3D, 0x4C, 0x6C, 0xCB, 0x22, 0x85, 0x73, 0xC1, 0x38, - 0xE6, 0xAD, 0x58, 0x3C, 0x20, 0xFD, 0xAA, 0x49, 0xA9, 0x7B, 0x71, 0x8A, 0xC2, 0xC7, 0x1A, 0xBA, - 0xF7, 0xED, 0x31, 0x3C, 0xD1, 0xE4, 0xCD, 0xA4, 0x27, 0x4B, 0x91, 0x42, 0x52, 0x95, 0xCE, 0x1D, - 0xCD, 0xB5, 0xA2, 0xC8, 0x40, 0x0E, 0xD8, 0x2A, 0x1B, 0xCD, 0x53, 0x54, 0xD1, 0x85, 0x94, 0x36, - 0x5F, 0x5B, 0xE2, 0xCB, 0x80, 0xAD, 0xBC, 0xD5, 0x95, 0x3B, 0x5C, 0x6A, 0xA3, 0x16, 0x90, 0xEE, - 0x37, 0x57, 0x34, 0x7B, 0xAA, 0x8C, 0x0A, 0x88, 0x8C, 0x52, 0x8C, 0x78, 0xB8, 0x2A, 0xD9, 0x6A, - 0x53, 0xE7, 0x38, 0x3F, 0x94, 0x9E, 0x86, 0x3B, 0x3F, 0x8C, 0x1F, 0xDC, 0x3B, 0xC7, 0x47, 0xE2, - 0xE4, 0x87, 0xE6, 0x78, 0x3F, 0xA6, 0x63, 0x04, 0xC1, 0x85, 0x8E, 0x8F, 0x76, 0xE9, 0xC9, 0x67, - 0xE8, 0xCE, 0x2D, 0xFB, 0x46, 0xB3, 0xAD, 0x0B, 0xDD, 0xF1, 0xC6, 0x5E, 0xEA, 0x1E, 0xBD, 0xCF, - 0xB4, 0x0C, 0x79, 0xEC, 0x42, 0x4F, 0xAC, 0x2F, 0xEA, 0x14, 0x2A, 0xBE, 0xA4, 0x0F, 0x1E, 0x7D, - 0xF7, 0xE4, 0xF1, 0xE3, 0x93, 0x1F, 0x1E, 0xB9, 0xC3, 0x60, 0xC6, 0xFF, 0xFF, 0x33, 0x5B, 0x8E, - 0xFD, 0xE9, 0x63, 0xEF, 0xA4, 0x0F, 0xC3, 0x3D, 0x12, 0x86, 0x60, 0x7A, 0xC1, 0xF9, 0x21, 0x45, - 0x9A, 0x22, 0xE4, 0x10, 0x28, 0xC9, 0xA1, 0x8D, 0x97, 0x3B, 0x2A, 0xF2, 0x44, 0x93, 0x00, 0x32, - 0xF8, 0xD0, 0xF0, 0x15, 0x4D, 0x68, 0x33, 0x56, 0x4C, 0xD3, 0x50, 0xA2, 0x53, 0x9D, 0x0C, 0xBD, - 0x65, 0x9A, 0x03, 0xCA, 0x14, 0x57, 0x18, 0x6F, 0x45, 0xAC, 0x3C, 0x84, 0x00, 0x46, 0xC1, 0x71, - 0x71, 0x15, 0xDA, 0x28, 0x1B, 0x25, 0x54, 0x80, 0x8D, 0x97, 0xA6, 0xF3, 0x45, 0xE8, 0x5E, 0x17, - 0x4A, 0x71, 0xBD, 0x90, 0x85, 0xCA, 0x9C, 0xAE, 0x12, 0xAC, 0x72, 0x18, 0x69, 0xD9, 0x90, 0x71, - 0x01, 0xA2, 0x6D, 0x51, 0xEC, 0xEC, 0x5A, 0x31, 0x26, 0x8A, 0x4D, 0xD2, 0xAB, 0x00, 0xD6, 0x07, - 0x9F, 0x2E, 0xDF, 0xFE, 0x5D, 0x7B, 0xF7, 0xFA, 0x4F, 0xA5, 0x86, 0xCA, 0x88, 0xC2, 0x18, 0x5D, - 0xA1, 0x67, 0x0A, 0xC6, 0xF4, 0x21, 0x64, 0xA2, 0x73, 0xCD, 0x50, 0x0C, 0x98, 0xED, 0x1D, 0xE2, - 0x8E, 0xC3, 0xC9, 0x85, 0xDE, 0xD5, 0xF1, 0x91, 0x16, 0x71, 0xD6, 0xD3, 0x35, 0x8C, 0xDF, 0xF4, - 0xE0, 0xC6, 0x70, 0xE6, 0x78, 0xD4, 0xA9, 0xC2, 0x6B, 0xD6, 0xB4, 0x94, 0xCD, 0x78, 0x60, 0x89, - 0x64, 0x2C, 0x05, 0xE2, 0xA4, 0x94, 0xF5, 0xC1, 0x35, 0x09, 0xCF, 0x0F, 0xD9, 0xAD, 0x12, 0xAD, - 0x15, 0xF7, 0x0D, 0x9E, 0xCC, 0xCC, 0xA1, 0xC8, 0x84, 0x8A, 0x14, 0x3F, 0xF2, 0x8D, 0x29, 0x41, - 0xA9, 0x54, 0xD2, 0xBC, 0xAC, 0xF5, 0x08, 0x52, 0x1F, 0x7C, 0x20, 0xB4, 0x20, 0x02, 0x32, 0x2A, - 0x29, 0xFE, 0x9C, 0xD7, 0xA8, 0x89, 0xFE, 0x23, 0x7B, 0xE6, 0x6B, 0x52, 0x2D, 0x83, 0x99, 0x79, - 0x05, 0xB9, 0x3F, 0x6C, 0xB5, 0xB4, 0xDE, 0xBB, 0xF7, 0x5A, 0xAB, 0x55, 0xA1, 0xB1, 0x37, 0xA3, - 0xEE, 0xC4, 0xF5, 0xDF, 0x3D, 0xD2, 0x07, 0xBF, 0x7C, 0x7A, 0xF5, 0xAC, 0x0E, 0x75, 0x61, 0x67, - 0xD9, 0xED, 0x75, 0x3A, 0x8D, 0xF3, 0x43, 0xD6, 0x64, 0x7D, 0x5C, 0x3D, 0xD0, 0x2B, 0xC5, 0xD5, - 0x3B, 0x05, 0x5C, 0x9D, 0x5E, 0x7F, 0x0B, 0x5C, 0x5D, 0x7D, 0xF0, 0xFA, 0x05, 0xC3, 0xF4, 0xB8, - 0xB7, 0x0D, 0x51, 0x60, 0xE0, 0x94, 0x26, 0x20, 0x67, 0xF9, 0xF8, 0xE4, 0x74, 0x73, 0x4C, 0x4F, - 0x80, 0xBB, 0x8F, 0x80, 0xE9, 0x14, 0x04, 0x75, 0xB2, 0x8D, 0x9C, 0x4E, 0xF5, 0x01, 0xE2, 0x81, - 0x88, 0xBE, 0xEC, 0x9F, 0x6E, 0x81, 0xE7, 0x31, 0x88, 0x08, 0x11, 0x01, 0x92, 0xE5, 0xD1, 0x36, - 0x32, 0x3A, 0xD1, 0x07, 0x97, 0x6F, 0x5E, 0xD6, 0xFB, 0xC0, 0x58, 0xEF, 0xC9, 0xC9, 0xE6, 0x78, - 0x8E, 0xF5, 0xC1, 0x3F, 0x90, 0x20, 0x20, 0x66, 0xD9, 0xEB, 0x6F, 0x41, 0x50, 0x5F, 0x1F, 0x00, - 0x3C, 0xE2, 0xD8, 0x18, 0x05, 0xD8, 0xF5, 0x6B, 0x4A, 0x0C, 0x22, 0xEA, 0x3E, 0xDE, 0x82, 0x2B, - 0xB0, 0xEA, 0x7F, 0xA0, 0x78, 0x00, 0xC9, 0xB2, 0xDB, 0xDF, 0xC6, 0xA6, 0x01, 0x11, 0x25, 0x09, - 0x7C, 0x0D, 0x5D, 0x6D, 0x73, 0x4C, 0x60, 0xD3, 0x4F, 0x4E, 0x96, 0x4F, 0x4E, 0xAA, 0x21, 0xC0, - 0x18, 0x89, 0xF1, 0xA6, 0x28, 0x8A, 0x16, 0x07, 0xD9, 0xA2, 0x00, 0xFA, 0xEF, 0x39, 0x0C, 0x8B, - 0xC2, 0xD5, 0xDA, 0xE1, 0x93, 0xC3, 0x81, 0x4C, 0xD8, 0x41, 0xB5, 0xC8, 0x29, 0x51, 0x12, 0x3D, - 0xA1, 0xA3, 0x0F, 0xFA, 0x15, 0x32, 0x54, 0xA2, 0x84, 0xA1, 0xB0, 0x09, 0xFA, 0x69, 0xDA, 0x44, - 0xCB, 0xC3, 0x84, 0x09, 0x2E, 0x71, 0xA4, 0x4B, 0x11, 0x64, 0xA3, 0xD0, 0xAC, 0xA0, 0xD5, 0x58, - 0xEA, 0x83, 0x93, 0xA3, 0xD2, 0x94, 0xB6, 0xB9, 0x32, 0x86, 0x74, 0x00, 0xEE, 0x92, 0x20, 0x58, - 0x5B, 0x1F, 0x31, 0xA8, 0x3E, 0x78, 0x1E, 0x1D, 0x6F, 0xA3, 0x95, 0x56, 0x6F, 0x0B, 0xB5, 0x48, - 0xE4, 0x30, 0xCD, 0xB4, 0x7A, 0x5C, 0x35, 0x71, 0xF1, 0x72, 0xB7, 0x8A, 0x29, 0xA3, 0x76, 0x1B, - 0xBD, 0x60, 0x01, 0xEE, 0x1B, 0x41, 0xB8, 0xB6, 0x56, 0x04, 0x20, 0x44, 0x68, 0x7E, 0xB4, 0x37, - 0x8D, 0x44, 0xA4, 0x7C, 0x03, 0xFA, 0x08, 0x8C, 0x70, 0xCE, 0x9E, 0x85, 0x5A, 0x5B, 0x23, 0x31, - 0x28, 0xD4, 0x03, 0xD1, 0xF1, 0xDE, 0xB4, 0x22, 0x91, 0xF3, 0x2D, 0xE8, 0x65, 0x46, 0x4C, 0xDB, - 0x70, 0x3E, 0x93, 0xD1, 0x08, 0x12, 0xD6, 0xFA, 0xBA, 0x49, 0x80, 0x83, 0x7E, 0xD8, 0xB9, 0x76, - 0x45, 0xCF, 0xD7, 0xAE, 0xCD, 0x53, 0xE8, 0x36, 0x2F, 0xD0, 0xD3, 0xD9, 0x9B, 0x4F, 0x52, 0x13, - 0x3A, 0x24, 0x62, 0x47, 0xFA, 0xE0, 0x47, 0x2F, 0xA2, 0x73, 0xF3, 0x02, 0xE3, 0x47, 0x32, 0xA6, - 0x73, 0xC0, 0xDB, 0x54, 0x3B, 0xAF, 0x7C, 0x63, 0x45, 0x37, 0x19, 0x6E, 0x53, 0x7C, 0x7D, 0x20, - 0x96, 0xF6, 0xB3, 0xED, 0x6E, 0xCE, 0x4C, 0x1F, 0x09, 0x21, 0xC4, 0xDD, 0x0E, 0x0B, 0x94, 0xA4, - 0xCF, 0xE1, 0x60, 0x3B, 0x24, 0x27, 0x38, 0x5E, 0x9D, 0xD9, 0xC6, 0xD7, 0x50, 0x6E, 0x19, 0x8B, - 0xE1, 0xDA, 0x6E, 0x01, 0x30, 0xFA, 0xE0, 0xD9, 0xAF, 0xCF, 0xD7, 0x0E, 0x52, 0x6C, 0x25, 0xB5, - 0x8A, 0x85, 0xC7, 0xF3, 0x11, 0xD8, 0x59, 0x66, 0xA2, 0x48, 0xED, 0x39, 0x55, 0x27, 0x8B, 0x14, - 0x7C, 0x09, 0x02, 0xE9, 0xC2, 0x93, 0x2E, 0xB1, 0x59, 0x8D, 0xC7, 0xFB, 0x8B, 0x60, 0x40, 0xC4, - 0xE7, 0xB1, 0x61, 0xAF, 0x9F, 0x57, 0x04, 0x20, 0xD5, 0x94, 0xF6, 0x0A, 0x8E, 0x76, 0xA5, 0x2E, - 0xD6, 0xED, 0xDE, 0x74, 0xC6, 0xB9, 0xDE, 0xB7, 0xE2, 0x80, 0x90, 0xA9, 0x67, 0xAD, 0x3F, 0x0D, - 0xC4, 0xE1, 0xF4, 0x01, 0x68, 0xED, 0x1D, 0x1C, 0xAC, 0x9D, 0x65, 0x04, 0x82, 0x7B, 0x4E, 0x2F, - 0xCF, 0xE6, 0xA1, 0xB7, 0x4D, 0x66, 0xB9, 0x9E, 0xBB, 0xEE, 0x6A, 0x9B, 0xB4, 0x72, 0xE9, 0x78, - 0x73, 0x6B, 0x73, 0x0C, 0x90, 0x53, 0x7E, 0x1A, 0x8D, 0x6C, 0x73, 0xF3, 0xAC, 0x04, 0x19, 0xE5, - 0xB5, 0x37, 0xAD, 0x08, 0x7F, 0xCF, 0x51, 0x9C, 0x98, 0xEB, 0x07, 0x08, 0x62, 0x82, 0x16, 0xAF, - 0x2E, 0xB5, 0xEB, 0xAB, 0x1F, 0xAF, 0x7F, 0xFA, 0xB0, 0x9B, 0xE8, 0x00, 0x7D, 0xEE, 0x29, 0x30, - 0x20, 0xB7, 0xFB, 0x8E, 0x09, 0x40, 0x44, 0x6F, 0x13, 0x3D, 0xF5, 0x98, 0xA2, 0x5E, 0x5C, 0xBF, - 0xDF, 0x95, 0x96, 0x7A, 0xFB, 0x53, 0x53, 0xEF, 0x6B, 0xD0, 0xD3, 0x67, 0x87, 0xDC, 0x10, 0x67, - 0x03, 0x5D, 0x31, 0x40, 0xD4, 0x97, 0xF6, 0x16, 0x8F, 0xF6, 0x36, 0x90, 0x8B, 0x48, 0xF9, 0x06, - 0x86, 0x71, 0x60, 0x15, 0x9F, 0x29, 0xD1, 0x9B, 0x38, 0x0F, 0x83, 0xD4, 0x07, 0x57, 0xCB, 0x99, - 0x17, 0xCC, 0xFD, 0x8A, 0x09, 0x55, 0xAD, 0x91, 0xCE, 0x56, 0x0A, 0x11, 0xA4, 0x30, 0x8D, 0x74, - 0xB8, 0x42, 0x70, 0x91, 0x44, 0x5A, 0x3F, 0xEB, 0xDF, 0xA9, 0x56, 0x10, 0xF9, 0x7D, 0x2A, 0x66, - 0xBC, 0x41, 0xDE, 0x19, 0x63, 0xDE, 0x79, 0x75, 0xB9, 0x9B, 0x50, 0x36, 0xDE, 0x5B, 0xC2, 0x19, - 0xEF, 0x35, 0xE1, 0x68, 0x7C, 0x0D, 0x5B, 0x48, 0x61, 0xC3, 0x41, 0x04, 0x07, 0x84, 0xB1, 0xF3, - 0x26, 0x03, 0x08, 0xC9, 0x73, 0xBA, 0xCB, 0x6D, 0x5C, 0x47, 0x90, 0x91, 0xF4, 0x9C, 0xA3, 0xD8, - 0x6F, 0x8E, 0xEF, 0xD4, 0x6B, 0x8E, 0x4A, 0xA9, 0xDD, 0xC6, 0x69, 0x90, 0x13, 0x93, 0xD8, 0x0E, - 0x6E, 0x65, 0x5E, 0x57, 0x21, 0x12, 0x2C, 0xD3, 0x89, 0x76, 0xC9, 0xCE, 0xB6, 0xD1, 0x4D, 0x6F, - 0x1B, 0xDD, 0xC8, 0x14, 0x25, 0xD5, 0x73, 0x72, 0x4F, 0x99, 0xA6, 0xDB, 0x3B, 0xBD, 0x4F, 0xF5, - 0x0C, 0x67, 0xEB, 0xC7, 0x34, 0x80, 0xD1, 0x07, 0xCF, 0xDF, 0xEF, 0x26, 0xA6, 0x61, 0x67, 0x15, - 0x63, 0xDA, 0x56, 0x11, 0x8C, 0x32, 0xB5, 0xEF, 0x52, 0x6C, 0xB1, 0x81, 0x36, 0x16, 0x48, 0xF8, - 0xAF, 0x3B, 0xD2, 0xC6, 0xA2, 0xBA, 0x36, 0xEE, 0x38, 0xC3, 0x2C, 0xBE, 0x06, 0xFD, 0xF8, 0xC6, - 0xE2, 0xF3, 0x78, 0x6A, 0xAC, 0xAD, 0x23, 0x0E, 0xA7, 0x0F, 0x3E, 0x18, 0x0B, 0xED, 0xD5, 0xBB, - 0x67, 0x3B, 0xD1, 0x95, 0xE8, 0x74, 0x3F, 0xFA, 0x8A, 0x58, 0xDE, 0xB7, 0xCE, 0x1C, 0xE2, 0xAE, - 0xEF, 0x54, 0x08, 0xA4, 0x0F, 0xDE, 0x12, 0x37, 0xD0, 0x2E, 0x3D, 0x9F, 0xBF, 0x76, 0x6E, 0x27, - 0x5A, 0xA3, 0x3D, 0xEF, 0x47, 0x65, 0x8C, 0xE9, 0x7D, 0xEB, 0x6B, 0x32, 0xB5, 0x7D, 0xDF, 0xF3, - 0xD7, 0x56, 0x19, 0x87, 0xD3, 0x07, 0xAF, 0x5B, 0xEF, 0xE8, 0xD1, 0x4E, 0xD4, 0x25, 0x7A, 0xDD, - 0x8F, 0xC6, 0x22, 0x9E, 0xF7, 0xAD, 0xB4, 0x9B, 0x91, 0x63, 0xCF, 0xD6, 0x56, 0x19, 0x85, 0xD2, - 0x07, 0x1F, 0x5B, 0x2F, 0xE1, 0xEF, 0x4E, 0xD4, 0xC5, 0x7A, 0xDC, 0x8F, 0xB2, 0x38, 0xB7, 0xFB, - 0x56, 0x95, 0x65, 0x2E, 0xD6, 0x56, 0x14, 0xC0, 0xE8, 0x83, 0x17, 0x97, 0xBF, 0x6A, 0xF5, 0x17, - 0xDE, 0xC2, 0xC5, 0x07, 0x2E, 0xB5, 0xAB, 0x1F, 0x1B, 0x3B, 0xD1, 0x18, 0x76, 0xBD, 0x1F, 0x7D, - 0x51, 0xA6, 0xF7, 0xAD, 0x2D, 0xBA, 0xAF, 0x66, 0x68, 0xAC, 0x1F, 0x0E, 0x05, 0x20, 0x3E, 0xFB, - 0x02, 0x47, 0xDA, 0x73, 0x63, 0x37, 0x01, 0x31, 0xEA, 0x77, 0x17, 0x45, 0x7B, 0xCC, 0xE4, 0xBE, - 0xF5, 0xE4, 0x10, 0xAB, 0x82, 0x8A, 0x92, 0x25, 0x86, 0xF5, 0x19, 0xB7, 0xA8, 0xE0, 0xD6, 0xCD, - 0x15, 0xD4, 0x1A, 0x57, 0x2F, 0xB4, 0x37, 0xE2, 0xB4, 0x02, 0x37, 0x1B, 0xCF, 0xD9, 0xE5, 0x0D, - 0x6D, 0x93, 0xF4, 0x24, 0x07, 0xB7, 0xBD, 0xE3, 0xE3, 0xED, 0x86, 0xB7, 0x79, 0xD3, 0xA8, 0xC7, - 0xC7, 0xF7, 0xA8, 0x93, 0x91, 0x61, 0x92, 0xCF, 0x16, 0x09, 0x37, 0x79, 0x18, 0x46, 0x82, 0xD5, - 0x07, 0x2F, 0xE1, 0x44, 0x7B, 0x41, 0x4F, 0x76, 0x55, 0x06, 0xCA, 0xFD, 0xEF, 0xC2, 0x93, 0x12, - 0xFC, 0xEE, 0xDB, 0x99, 0x28, 0x31, 0x50, 0x74, 0x7B, 0x63, 0x77, 0xA3, 0xBD, 0x05, 0x09, 0x70, - 0xAE, 0xBE, 0x0F, 0xEC, 0x7C, 0xB7, 0x0A, 0x8C, 0x89, 0xD8, 0x99, 0x0E, 0x25, 0xBE, 0x77, 0xA1, - 0x46, 0x79, 0x83, 0x11, 0x7F, 0x33, 0x67, 0x99, 0xA6, 0xF8, 0x46, 0x17, 0x3A, 0x9D, 0x46, 0xC2, - 0x56, 0x10, 0xDA, 0x8E, 0xA3, 0x0F, 0x5E, 0x91, 0x50, 0xBB, 0xC6, 0xC3, 0x8A, 0x3B, 0x5B, 0x24, - 0x2C, 0x62, 0x5B, 0x5B, 0xE8, 0x13, 0x63, 0xAA, 0x0F, 0xAE, 0xF1, 0x9D, 0xA5, 0x80, 0x0B, 0xCF, - 0xD6, 0x47, 0x46, 0x85, 0x48, 0x5C, 0xDF, 0x03, 0xA2, 0x22, 0x25, 0xF1, 0x77, 0xA1, 0xE9, 0x9A, - 0x38, 0x92, 0xAE, 0x0D, 0xAE, 0x68, 0x63, 0x0D, 0xAD, 0xAC, 0xBC, 0xBB, 0xCA, 0x5B, 0x6E, 0xE8, - 0x1E, 0x3B, 0xDC, 0x34, 0x97, 0x7C, 0xA3, 0x31, 0x68, 0x95, 0xED, 0xA0, 0x1D, 0x9C, 0x07, 0x33, - 0xC3, 0x15, 0xCD, 0xE8, 0xF6, 0xD2, 0x05, 0xDF, 0x2F, 0x38, 0xF4, 0x1C, 0x0B, 0x1A, 0x3E, 0xB3, - 0x6E, 0xF0, 0xED, 0x4E, 0x96, 0x76, 0x1D, 0xED, 0x7C, 0x43, 0x10, 0x30, 0x0B, 0x81, 0xA1, 0x44, - 0xB7, 0x13, 0x5F, 0xA0, 0x67, 0x7B, 0x14, 0xF1, 0x7D, 0x38, 0x05, 0xCA, 0xCD, 0xD9, 0xAC, 0xE7, - 0x93, 0x71, 0x24, 0x48, 0xD5, 0x1E, 0x4E, 0xE5, 0xD6, 0xBD, 0x0F, 0x64, 0x6C, 0x07, 0x40, 0xA3, - 0x06, 0x66, 0x71, 0x48, 0xB7, 0x3B, 0x31, 0x53, 0xAE, 0xB6, 0x95, 0x4E, 0xEE, 0x92, 0x6F, 0x04, - 0x56, 0x6E, 0x90, 0x5C, 0xAB, 0x62, 0x4C, 0x6F, 0x67, 0x4C, 0x62, 0x2C, 0x33, 0xFA, 0x87, 0xAD, - 0xD6, 0xA4, 0x8F, 0x1B, 0xB7, 0x34, 0xC1, 0xDA, 0xF9, 0xE1, 0xA4, 0x5F, 0xB6, 0xE7, 0xA8, 0x74, - 0xD7, 0x1D, 0x70, 0xBA, 0xF1, 0xA6, 0x3B, 0x94, 0xD2, 0x00, 0xA8, 0x69, 0x6A, 0xEF, 0x8C, 0xE0, - 0x4B, 0x53, 0xFB, 0x88, 0xF9, 0x7D, 0x87, 0x7B, 0xEF, 0x90, 0x76, 0xC3, 0xB2, 0xFC, 0xDC, 0xFD, - 0x77, 0xFD, 0xC4, 0xFE, 0xBB, 0x13, 0xB1, 0xFF, 0x4E, 0x9A, 0x69, 0x5F, 0x76, 0xBB, 0xDD, 0x2A, - 0x9C, 0x57, 0xDC, 0x82, 0x77, 0x27, 0x2C, 0x4D, 0x41, 0x98, 0x15, 0x59, 0xEA, 0x0B, 0x96, 0xFA, - 0x12, 0x4B, 0xA7, 0x77, 0xB9, 0xA9, 0xF0, 0x4E, 0x38, 0xE2, 0xEB, 0xB8, 0x5F, 0x09, 0x4B, 0x95, - 0xF6, 0x49, 0x52, 0xDB, 0xBE, 0xAB, 0x6D, 0x92, 0xB4, 0x49, 0x3A, 0x18, 0x1E, 0x17, 0xC6, 0x42, - 0x0A, 0xC2, 0x7C, 0xFE, 0xD5, 0x5D, 0xFA, 0xFC, 0x78, 0x0B, 0x9F, 0x1F, 0x67, 0x7C, 0x7E, 0x87, - 0xCE, 0x2E, 0x08, 0xFF, 0xC6, 0x1C, 0x5E, 0xB0, 0xB5, 0x86, 0xD3, 0x2B, 0xD9, 0xDA, 0xAD, 0x87, - 0x44, 0x96, 0xF0, 0xEA, 0x2E, 0x3D, 0x24, 0xC7, 0x6E, 0x37, 0x32, 0x52, 0x1E, 0x73, 0x06, 0xBB, - 0xC9, 0x49, 0xB4, 0x92, 0x92, 0xD5, 0xC9, 0x7B, 0xC7, 0x8D, 0x86, 0x47, 0x7D, 0x5E, 0x36, 0xDD, - 0x85, 0x7A, 0xAA, 0xEF, 0xC7, 0xCE, 0x6D, 0x72, 0x37, 0x45, 0x19, 0xBE, 0x11, 0x61, 0x26, 0x55, - 0xB8, 0x95, 0x0B, 0xB3, 0xCB, 0xB7, 0x7F, 0x5F, 0xAF, 0x16, 0x4B, 0xF7, 0xB4, 0xBB, 0x7A, 0x6C, - 0x33, 0x6B, 0x95, 0x05, 0xC6, 0x69, 0x87, 0x88, 0x83, 0x6F, 0x26, 0xE8, 0x7D, 0x8A, 0x38, 0x57, - 0x8C, 0x0D, 0xA5, 0xA0, 0x10, 0x81, 0xE5, 0x0D, 0xFA, 0x68, 0x20, 0xE4, 0x73, 0x96, 0x70, 0x2C, - 0xE2, 0x9A, 0xE6, 0x8D, 0x46, 0xF4, 0x73, 0x57, 0x8F, 0x31, 0x60, 0x04, 0x5F, 0xF0, 0x7A, 0xA7, - 0x1B, 0x91, 0xA4, 0x1A, 0xF2, 0xC5, 0x14, 0x46, 0xB4, 0x51, 0x13, 0xE3, 0x86, 0x76, 0x67, 0x22, - 0x38, 0x62, 0x22, 0x78, 0xF1, 0xE6, 0xA3, 0x4A, 0x06, 0xCC, 0xD7, 0x3A, 0x59, 0x11, 0x1C, 0x6D, - 0xFE, 0x6E, 0x85, 0x6E, 0x65, 0x69, 0x75, 0x62, 0x69, 0x1D, 0x8D, 0xE2, 0x2D, 0xA2, 0xDB, 0x84, - 0x2C, 0x85, 0x04, 0x8E, 0xD9, 0x43, 0xE0, 0xDA, 0x7B, 0xD9, 0x03, 0x2A, 0xD9, 0xC1, 0xF1, 0x3A, - 0x76, 0x60, 0x1D, 0x6D, 0x61, 0x06, 0xC7, 0x39, 0x66, 0x70, 0x57, 0x32, 0xE8, 0xEB, 0x83, 0xF7, - 0x9B, 0x98, 0x41, 0xBF, 0xA2, 0x19, 0x1C, 0x09, 0x33, 0x88, 0xF7, 0x0F, 0xF7, 0xAB, 0x0A, 0x4B, - 0xB2, 0x82, 0xC7, 0x23, 0x7C, 0x6C, 0xE6, 0x71, 0x35, 0x4F, 0xD8, 0x5D, 0xCC, 0x5D, 0xD8, 0xEE, - 0xFA, 0xF1, 0xF6, 0x57, 0xDB, 0xB5, 0xBC, 0xC5, 0x7A, 0x21, 0x57, 0xEE, 0xE8, 0x6B, 0x0F, 0xB7, - 0xEB, 0x8D, 0x5A, 0x71, 0x66, 0xA7, 0xB5, 0xC4, 0xCA, 0xDE, 0x0D, 0x3C, 0x5F, 0xCB, 0xBE, 0x39, - 0x24, 0xB1, 0x01, 0x51, 0xB4, 0xAE, 0x56, 0x04, 0x64, 0xB7, 0x5C, 0xBC, 0x79, 0xA9, 0x6D, 0xF0, - 0x5A, 0x07, 0x05, 0xB2, 0x2E, 0x7B, 0xF9, 0x85, 0xB6, 0xC1, 0xDB, 0x2F, 0x14, 0xD8, 0x72, 0xB6, - 0xA8, 0xE0, 0x8B, 0x48, 0xB4, 0xCD, 0xDE, 0x44, 0x52, 0xBA, 0x5B, 0x83, 0xB5, 0xDA, 0x3C, 0xA5, - 0x44, 0xE3, 0x32, 0xE6, 0xAD, 0x50, 0x63, 0x55, 0xDB, 0x62, 0x4F, 0x71, 0x4A, 0x06, 0xC0, 0xC1, - 0x97, 0x74, 0x37, 0x4B, 0x40, 0xAA, 0x6D, 0x4A, 0x4D, 0x13, 0xB6, 0x46, 0x65, 0xF8, 0xE9, 0x4C, - 0x0A, 0x66, 0x51, 0xE7, 0x6B, 0x06, 0xB3, 0xB8, 0xCE, 0x07, 0x63, 0xDA, 0xFB, 0xE0, 0xE5, 0x9F, - 0x0A, 0x96, 0x56, 0x9B, 0xB3, 0x74, 0x74, 0x57, 0x2C, 0x6D, 0x91, 0xAA, 0x22, 0xEB, 0x0A, 0xBD, - 0xD0, 0x70, 0x36, 0x36, 0x2E, 0x06, 0x0D, 0xB6, 0xC5, 0x62, 0xAE, 0x76, 0x0D, 0xAC, 0xEE, 0xD4, - 0xC0, 0x04, 0x01, 0xD5, 0x94, 0xD1, 0xCF, 0x2A, 0xE3, 0xF4, 0x6B, 0xB3, 0x2F, 0xC6, 0x51, 0x55, - 0xF3, 0x52, 0x70, 0x74, 0xF2, 0x35, 0x99, 0x97, 0x37, 0x0F, 0xF1, 0xEA, 0xC6, 0xC1, 0x8B, 0x81, - 0x63, 0xF0, 0xA2, 0x47, 0xBB, 0x37, 0xB0, 0x88, 0x82, 0x8D, 0xF5, 0x71, 0x74, 0xA7, 0xAF, 0x3C, - 0xBB, 0x8B, 0x08, 0xC6, 0x58, 0xDA, 0xC2, 0xC4, 0x7A, 0xFD, 0x1D, 0x9A, 0x98, 0xB4, 0xD0, 0xC4, - 0xF3, 0x20, 0x2F, 0x60, 0x74, 0xBE, 0x36, 0x10, 0x17, 0x34, 0xEB, 0xAC, 0x24, 0xA9, 0xB3, 0xF2, - 0xF9, 0x21, 0x14, 0x85, 0x59, 0x04, 0x39, 0x74, 0x9E, 0xB3, 0x2F, 0x27, 0xAA, 0x3B, 0x8C, 0xDF, - 0x74, 0x48, 0x97, 0xD5, 0xE2, 0x77, 0xEA, 0x46, 0x85, 0x66, 0xFA, 0x5D, 0xBB, 0xA5, 0x6F, 0x15, - 0x3C, 0x37, 0xF8, 0x2B, 0x38, 0x6E, 0x08, 0x5F, 0x03, 0xD4, 0x26, 0x3E, 0x19, 0x5D, 0xE8, 0xDF, - 0x45, 0x38, 0xB9, 0xB4, 0xB0, 0x89, 0xAE, 0x41, 0x48, 0x76, 0x1D, 0xCF, 0xC0, 0x62, 0xD5, 0x98, - 0x85, 0x40, 0x69, 0xFB, 0x8F, 0x19, 0x4E, 0xF2, 0x1A, 0xF8, 0xBE, 0x06, 0xA3, 0xDA, 0x4A, 0x33, - 0x7D, 0x3B, 0x2F, 0x7F, 0xB0, 0x06, 0x0F, 0xA3, 0x35, 0xC3, 0xFF, 0xF9, 0xEF, 0xB2, 0xA9, 0x19, - 0xFC, 0x7E, 0x66, 0x2C, 0x00, 0x30, 0x23, 0xDF, 0xBC, 0xD0, 0x81, 0x52, 0xDF, 0x0B, 0xA0, 0x14, - 0xB5, 0xC7, 0x76, 0x8E, 0xAA, 0xF2, 0xA4, 0x7D, 0xA8, 0x12, 0x77, 0xAA, 0xB1, 0x62, 0x6C, 0x72, - 0x1E, 0x98, 0xBE, 0x3D, 0x83, 0x52, 0xCD, 0xF2, 0xCC, 0xF9, 0x94, 0xB8, 0x61, 0xDB, 0xB0, 0xAC, - 0xAB, 0x1B, 0x38, 0x78, 0x8B, 0x33, 0xCC, 0x20, 0xF9, 0x7A, 0xED, 0xC5, 0x4F, 0xEF, 0x2E, 0xD9, - 0x3B, 0x2B, 0xDF, 0x82, 0xBC, 0x88, 0x55, 0x6B, 0x6A, 0xA3, 0xB9, 0xCB, 0xAA, 0xF7, 0x3A, 0xC1, - 0xB6, 0xEC, 0x3B, 0xA6, 0x37, 0x86, 0xAF, 0x0D, 0x8D, 0x80, 0xBC, 0xF6, 0x82, 0x50, 0xBB, 0xD0, - 0x22, 0x8C, 0x8E, 0x67, 0xD2, 0x77, 0xA2, 0xB4, 0x19, 0x5F, 0xBC, 0x25, 0x63, 0xFC, 0x17, 0xDF, - 0x81, 0xA6, 0x11, 0xD4, 0x81, 0x56, 0x3B, 0x3B, 0xED, 0xD6, 0xD0, 0xFE, 0xA2, 0x2E, 0x46, 0xF8, - 0x65, 0x52, 0x68, 0x57, 0x9F, 0xFB, 0x4E, 0x53, 0x33, 0x87, 0x0D, 0xF6, 0x9E, 0x51, 0x7A, 0x19, - 0xAF, 0x89, 0x17, 0x50, 0xB7, 0xC3, 0x09, 0x71, 0xEB, 0x31, 0x65, 0xE0, 0x0C, 0x33, 0xCF, 0x0D, - 0x12, 0x1F, 0x59, 0xB5, 0x47, 0xF1, 0xF5, 0x36, 0x14, 0xF4, 0xE1, 0x3C, 0xD0, 0x1E, 0x5E, 0x5C, - 0x68, 0x58, 0xE0, 0x26, 0xDE, 0x5F, 0x6A, 0x0E, 0xD3, 0xED, 0x9A, 0x5A, 0xEA, 0xC2, 0xCF, 0x10, - 0x1A, 0xA4, 0x37, 0x65, 0xDF, 0x6A, 0xC4, 0x49, 0xBD, 0xAA, 0x39, 0x02, 0xC0, 0x28, 0x52, 0x6F, - 0x24, 0x09, 0xAC, 0x5B, 0x46, 0x68, 0x34, 0x92, 0xEF, 0x4C, 0x85, 0x5E, 0x81, 0x92, 0xA6, 0x46, - 0x6F, 0xC9, 0x2F, 0x70, 0xBD, 0x6D, 0xB4, 0x41, 0x86, 0xC0, 0x6F, 0x04, 0x4D, 0x7C, 0x3F, 0xFD, - 0xF5, 0x58, 0x80, 0x6E, 0x75, 0x9B, 0x1A, 0xDE, 0x49, 0xC2, 0x4A, 0x44, 0x3E, 0x10, 0xD7, 0x84, - 0xD0, 0x8A, 0xD1, 0x2A, 0x50, 0x32, 0x74, 0xB7, 0x09, 0x15, 0x41, 0xEC, 0xF9, 0x40, 0xC6, 0x20, - 0xB1, 0x71, 0x93, 0x0F, 0xA0, 0x9B, 0x74, 0xF4, 0xDC, 0x64, 0x41, 0x51, 0xD2, 0xDA, 0xE1, 0x21, - 0xB8, 0x34, 0x04, 0x25, 0x02, 0x56, 0x31, 0xAE, 0xD7, 0xF8, 0x02, 0x26, 0x58, 0x54, 0xAD, 0xB3, - 0xAC, 0x1D, 0x00, 0x82, 0x76, 0xE8, 0x5D, 0x87, 0xBE, 0xED, 0x8E, 0x61, 0xE8, 0xD1, 0x88, 0xB1, - 0xD1, 0xDB, 0x88, 0x32, 0x75, 0x9F, 0x5E, 0xA7, 0x9D, 0xA4, 0x6F, 0xD4, 0xF9, 0xF5, 0x83, 0x5A, - 0xA3, 0xC6, 0x89, 0xA7, 0xE7, 0x60, 0x6E, 0x75, 0x76, 0xF0, 0x88, 0xD2, 0xD8, 0xD0, 0xCE, 0xCF, - 0x79, 0x37, 0xAC, 0x15, 0x5E, 0x84, 0x46, 0xF4, 0x4F, 0xEA, 0x56, 0x64, 0x8A, 0xBF, 0x7F, 0xFF, - 0x97, 0xB0, 0xD9, 0xDB, 0x43, 0xA0, 0xFA, 0x29, 0xCE, 0x20, 0x7C, 0xFF, 0x17, 0xFC, 0xFF, 0xF6, - 0x11, 0x9D, 0x36, 0xF8, 0xFE, 0x2F, 0xFC, 0x73, 0xFB, 0x08, 0x7A, 0x82, 0x63, 0xDA, 0xDF, 0xED, - 0xEF, 0x54, 0x0E, 0x59, 0xE9, 0x8D, 0x73, 0xA5, 0x17, 0x89, 0x6D, 0x6D, 0x9A, 0xC6, 0x05, 0x44, - 0xFD, 0x1E, 0xFB, 0x6F, 0xDD, 0xF4, 0x2C, 0x50, 0x4F, 0x08, 0x96, 0x2C, 0x94, 0xEE, 0x80, 0x4A, - 0x84, 0xA0, 0xA2, 0x97, 0x08, 0xDB, 0x23, 0xDA, 0x52, 0xE3, 0xAE, 0x12, 0x1B, 0x88, 0x68, 0x39, - 0x33, 0xFC, 0x80, 0xBC, 0x71, 0xC3, 0x7A, 0x98, 0x70, 0x8A, 0x1C, 0x89, 0x0F, 0x06, 0x09, 0x16, - 0xF0, 0x07, 0x70, 0xD0, 0xAE, 0xC6, 0x95, 0x16, 0x19, 0xDB, 0x83, 0xC8, 0x0E, 0x63, 0x4A, 0xD9, - 0xCD, 0x1C, 0x3B, 0xFC, 0x64, 0x3A, 0x5F, 0xEA, 0xF8, 0x5A, 0xD3, 0x74, 0xA8, 0xC8, 0x88, 0x08, - 0x1B, 0x3D, 0xC5, 0xFF, 0x81, 0x5C, 0xF0, 0x4F, 0xAE, 0x7E, 0x00, 0x2B, 0x2B, 0xE1, 0xEB, 0x74, - 0x0A, 0xE0, 0xF3, 0xB2, 0xA9, 0xB1, 0x83, 0x15, 0x78, 0x86, 0x6B, 0xE1, 0x39, 0xFE, 0x59, 0x09, - 0xED, 0xE1, 0x05, 0x7E, 0x04, 0xD7, 0x68, 0xCD, 0x8A, 0x97, 0xD8, 0x01, 0xB6, 0xA2, 0x35, 0x06, - 0x6D, 0xC5, 0x8E, 0xE0, 0x1A, 0xBE, 0xE2, 0x07, 0x6C, 0xB7, 0xA9, 0x0D, 0x6D, 0xD7, 0xA5, 0x07, - 0x25, 0xD4, 0xC7, 0xA9, 0xFE, 0x69, 0xB0, 0x04, 0x0E, 0x38, 0x69, 0xB7, 0x8F, 0x82, 0x55, 0x74, - 0xB6, 0xBA, 0x7D, 0x44, 0xF0, 0x1E, 0x25, 0x12, 0x8E, 0x57, 0xFC, 0x18, 0xAE, 0x03, 0x7D, 0x78, - 0x47, 0x10, 0x4C, 0x2F, 0xAC, 0xE2, 0x0B, 0xD0, 0x22, 0xC4, 0xFB, 0x9C, 0x78, 0x38, 0x5B, 0x45, - 0x67, 0x08, 0x4D, 0x61, 0x39, 0x1B, 0x70, 0xBA, 0x8A, 0x4F, 0xE1, 0x2E, 0x7D, 0x5D, 0x11, 0x12, - 0xC1, 0x78, 0xBA, 0x7D, 0xC4, 0x79, 0x82, 0x4B, 0xFC, 0x28, 0x2D, 0x6A, 0x8C, 0x09, 0x21, 0x8F, - 0x22, 0xCF, 0x59, 0x92, 0x96, 0xF2, 0x07, 0xF8, 0xC7, 0x95, 0x43, 0xF0, 0xF0, 0xF9, 0xEA, 0x8D, - 0x55, 0xAF, 0xF1, 0x05, 0xD9, 0x1A, 0xC6, 0x30, 0x19, 0xA6, 0xED, 0xB9, 0xA6, 0x63, 0x9B, 0xE8, - 0x28, 0xF5, 0x86, 0x76, 0x31, 0xE0, 0x71, 0x0C, 0x0D, 0x1A, 0x9A, 0xCB, 0x46, 0x9A, 0x8B, 0x5A, - 0x2C, 0x29, 0xD6, 0x1A, 0x6D, 0x6A, 0x87, 0xDC, 0xD6, 0x10, 0x05, 0x77, 0xC1, 0x6A, 0x38, 0xB0, - 0xB1, 0x02, 0x47, 0xC6, 0x5B, 0x0A, 0x91, 0xD0, 0xD6, 0x12, 0x16, 0x8A, 0x46, 0x0E, 0xB5, 0x9D, - 0x54, 0x94, 0x2D, 0xF0, 0x6A, 0xE1, 0xC0, 0x0F, 0xD3, 0x0E, 0x0C, 0xAA, 0xF2, 0xC3, 0x7A, 0xED, - 0x0A, 0x9F, 0xFB, 0xFF, 0xAD, 0x76, 0x80, 0x8D, 0x0E, 0x6A, 0xFF, 0x3A, 0xD3, 0x6A, 0x07, 0xB2, - 0x27, 0xDF, 0xA6, 0x5D, 0x8E, 0x69, 0x6C, 0x5C, 0x51, 0x63, 0x63, 0x49, 0x63, 0xE3, 0xBB, 0xD5, - 0x98, 0xBC, 0x10, 0xBC, 0x8D, 0xD6, 0xE4, 0x95, 0xD7, 0x02, 0xCD, 0x95, 0xC2, 0x73, 0xA5, 0x71, - 0x6D, 0x8D, 0x55, 0xDA, 0xDA, 0x44, 0x4D, 0x2C, 0xC5, 0x81, 0xF7, 0x10, 0xFF, 0xF5, 0xCF, 0xEF, - 0xDE, 0x62, 0xA8, 0x54, 0xAB, 0x2C, 0xD2, 0x58, 0xBA, 0x1C, 0x51, 0x60, 0xC0, 0xDC, 0x99, 0x08, - 0xDC, 0x89, 0x1C, 0x7A, 0x50, 0xD3, 0xEA, 0x14, 0x25, 0x66, 0xD0, 0x12, 0x43, 0xE0, 0x81, 0xB7, - 0x9A, 0xEF, 0x62, 0xB0, 0x15, 0xCE, 0x1B, 0x43, 0x15, 0xD8, 0x02, 0x02, 0x54, 0x52, 0x22, 0xC3, - 0x9C, 0x71, 0x18, 0x29, 0x27, 0xEC, 0xDC, 0x45, 0xA8, 0xBF, 0x06, 0x55, 0x83, 0x9A, 0x88, 0xE9, - 0x71, 0x6C, 0x0B, 0x4A, 0xA5, 0xC3, 0x23, 0x7F, 0x25, 0x01, 0xF1, 0x39, 0x6C, 0x85, 0x81, 0x8B, - 0x4C, 0x50, 0x09, 0x8D, 0x98, 0xBA, 0xCC, 0xC7, 0xB3, 0x5A, 0x07, 0xCF, 0x4A, 0x81, 0x87, 0x67, - 0x9E, 0x4A, 0x68, 0xF8, 0x44, 0x57, 0x2E, 0x96, 0x6A, 0xC4, 0xF0, 0xC9, 0x25, 0x15, 0x4F, 0x3C, - 0xD3, 0x55, 0xE3, 0x89, 0x4F, 0x8A, 0xE4, 0xE3, 0xA9, 0x28, 0x1B, 0x3E, 0x13, 0xA1, 0xB0, 0xE7, - 0x74, 0x35, 0xD2, 0x11, 0xFF, 0x6D, 0x5E, 0x7F, 0x8C, 0x0C, 0x88, 0x16, 0xF1, 0x9F, 0xBD, 0x78, - 0xC9, 0xF8, 0xA3, 0xA8, 0x16, 0x89, 0xA3, 0xCC, 0x06, 0xC4, 0x69, 0x1B, 0x21, 0xC4, 0x27, 0x18, - 0xC7, 0x93, 0xA0, 0x8D, 0x15, 0x6E, 0x24, 0xC6, 0xCC, 0xAD, 0xB6, 0x0B, 0x04, 0x50, 0x84, 0x8D, - 0xB3, 0x4E, 0xDA, 0x3C, 0x33, 0xB8, 0xD8, 0xE5, 0x3C, 0x74, 0xEC, 0x6E, 0x0E, 0x46, 0x9E, 0x61, - 0x92, 0x10, 0x78, 0x31, 0x0F, 0x1B, 0x1D, 0xC5, 0x48, 0xB8, 0x7A, 0xC7, 0xC7, 0xD9, 0x3C, 0xC3, - 0x3B, 0xE0, 0x5F, 0x4F, 0x43, 0x0C, 0x38, 0x1F, 0x15, 0x0F, 0xCD, 0x4C, 0x28, 0x04, 0xB5, 0x9A, - 0x58, 0xB2, 0xAB, 0x9D, 0x65, 0x2A, 0x6E, 0x80, 0xE0, 0x8B, 0x70, 0xDA, 0x53, 0x46, 0x63, 0xE2, - 0x9B, 0x20, 0x43, 0x18, 0x7C, 0x47, 0x9F, 0xFE, 0x62, 0xC8, 0xE8, 0x3E, 0x8A, 0x08, 0x13, 0xBB, - 0x86, 0x03, 0xD7, 0xD4, 0x25, 0xB6, 0xB6, 0xD3, 0xF2, 0x5C, 0xA2, 0xEE, 0x35, 0x51, 0xBF, 0xF3, - 0x8E, 0xF8, 0x19, 0x7F, 0x38, 0x3D, 0x06, 0xF3, 0x49, 0x38, 0xF7, 0x5D, 0x5E, 0xCF, 0x67, 0xEB, - 0x1B, 0xE5, 0x50, 0x72, 0x87, 0xB6, 0x79, 0x78, 0xA8, 0x3D, 0x0B, 0x43, 0x03, 0x14, 0x80, 0xEB, - 0x94, 0x13, 0x94, 0x8F, 0x66, 0xF0, 0x49, 0x09, 0xCF, 0x47, 0xA3, 0x64, 0x0F, 0x15, 0x13, 0xE6, - 0xB7, 0xF8, 0xA5, 0x34, 0xE1, 0xCE, 0x14, 0x55, 0xFB, 0xDF, 0x73, 0xE2, 0xAF, 0xAE, 0xA9, 0xC0, - 0x3C, 0xFF, 0x99, 0xE3, 0xD4, 0x6B, 0xED, 0x78, 0xD9, 0xB9, 0xC6, 0xC6, 0xE0, 0x6D, 0x40, 0x75, - 0x05, 0x7D, 0x80, 0x8E, 0x63, 0x9B, 0x67, 0xDC, 0x44, 0x7A, 0x87, 0x71, 0xD7, 0x05, 0x57, 0x46, - 0x7A, 0xD0, 0x0F, 0x2D, 0x3C, 0xF7, 0x0B, 0x59, 0xCD, 0x67, 0x20, 0xFE, 0x78, 0x18, 0x9F, 0x9A, - 0x58, 0xE0, 0xD2, 0x21, 0x6D, 0x68, 0x79, 0xC9, 0x07, 0x72, 0xDD, 0x23, 0x45, 0xA3, 0x58, 0x05, - 0xD4, 0x3A, 0xD1, 0x13, 0xB3, 0x1F, 0x92, 0xB9, 0x7D, 0xA0, 0x3E, 0x53, 0x4C, 0x81, 0x70, 0x02, - 0xB9, 0xF0, 0x44, 0xF2, 0x4A, 0xF5, 0x90, 0x9A, 0x9E, 0xB8, 0x6D, 0x3C, 0x88, 0x23, 0xC3, 0x7C, - 0x66, 0x19, 0x21, 0x49, 0x06, 0x87, 0xC8, 0x16, 0xC4, 0xCD, 0xA9, 0x17, 0x92, 0x54, 0xC4, 0xB0, - 0x71, 0x6F, 0x86, 0xE1, 0x7C, 0x8C, 0xAD, 0xF1, 0x5E, 0xDD, 0x5F, 0xE1, 0xE3, 0x6B, 0xF8, 0x7F, - 0x66, 0x0E, 0xA2, 0xDA, 0xB8, 0x39, 0x63, 0x21, 0x51, 0x3C, 0x88, 0xAD, 0x44, 0x96, 0x43, 0x22, - 0x2C, 0xF0, 0xFB, 0xA2, 0xA7, 0x87, 0x0F, 0xE9, 0xD1, 0x83, 0x48, 0x69, 0x22, 0x7A, 0x5C, 0x68, - 0xF1, 0x8D, 0x94, 0x82, 0xB3, 0xB8, 0x53, 0x38, 0x04, 0x72, 0x09, 0x03, 0xF3, 0xAD, 0x48, 0xBD, - 0x33, 0xA8, 0x36, 0xD1, 0x16, 0xFE, 0x3F, 0xEA, 0x7F, 0x45, 0x51, 0xFF, 0xFE, 0x42, 0x7C, 0x81, - 0x6D, 0xA7, 0x3C, 0x80, 0xC1, 0xA9, 0xA7, 0x05, 0x0F, 0x6A, 0x50, 0xED, 0x28, 0xE7, 0xFD, 0x78, - 0xE8, 0x8E, 0xED, 0x6B, 0x62, 0x5B, 0x8C, 0xE8, 0xD8, 0xB2, 0x50, 0x46, 0x38, 0x7D, 0x8F, 0x13, - 0xDC, 0x38, 0xDB, 0x5D, 0xAF, 0xB1, 0xB5, 0x05, 0x1A, 0x8F, 0x6F, 0xE3, 0x92, 0x64, 0xE2, 0x2D, - 0x8A, 0x20, 0x7D, 0x88, 0x3A, 0x37, 0x24, 0x05, 0x1C, 0x41, 0xF3, 0xED, 0x3C, 0xA5, 0x5D, 0x8B, - 0x6D, 0x3F, 0x3C, 0x19, 0x40, 0x03, 0x71, 0x05, 0x40, 0x43, 0x9F, 0x7A, 0x8D, 0x84, 0x96, 0xB8, - 0x65, 0x58, 0x05, 0x59, 0x85, 0x88, 0x69, 0x99, 0x97, 0xC4, 0xCC, 0x42, 0xE9, 0x1A, 0x41, 0x56, - 0xBE, 0x0C, 0x10, 0xC9, 0xD3, 0x0B, 0xCD, 0x9D, 0x3B, 0x0E, 0xD8, 0x20, 0xB2, 0x00, 0x36, 0x28, - 0xDF, 0x55, 0x86, 0xE8, 0xFF, 0xDC, 0x78, 0x16, 0x51, 0x9E, 0x90, 0xC0, 0xA3, 0x47, 0x49, 0x6C, - 0xB8, 0xC8, 0xC0, 0xCA, 0xF8, 0xA8, 0x37, 0xD6, 0xFE, 0xD2, 0x73, 0x47, 0xF6, 0x38, 0xCE, 0xB3, - 0x9C, 0x24, 0x48, 0xD6, 0x0F, 0x13, 0x82, 0x97, 0x6A, 0x1C, 0x20, 0xC4, 0xB6, 0xA8, 0x80, 0xE8, - 0x8B, 0x39, 0x33, 0xB3, 0xB1, 0x4F, 0xA9, 0xD5, 0xD7, 0x09, 0x7F, 0x65, 0x5F, 0x03, 0xE4, 0x8F, - 0xC6, 0x1C, 0x5F, 0x10, 0xF5, 0x4E, 0xD4, 0x95, 0x8C, 0x71, 0x9C, 0xC0, 0x88, 0x8C, 0xA5, 0xE8, - 0xC6, 0x1F, 0xC5, 0x87, 0x2F, 0xAF, 0xE2, 0x2F, 0xD0, 0x92, 0x3F, 0x02, 0x4A, 0x3B, 0x07, 0x34, - 0xF8, 0x82, 0x2D, 0x29, 0xB5, 0x67, 0x6B, 0x03, 0xDA, 0x30, 0x07, 0x09, 0xED, 0x20, 0x8B, 0xA4, - 0x90, 0x72, 0xF1, 0xF6, 0x62, 0x85, 0x40, 0x28, 0xBA, 0xC5, 0x10, 0x45, 0x41, 0x7B, 0x85, 0xC3, - 0x22, 0x54, 0xA9, 0x9D, 0x8F, 0x0A, 0x84, 0xCC, 0x11, 0xEB, 0x6C, 0x63, 0x1F, 0x1B, 0xA2, 0x23, - 0x72, 0xEE, 0x63, 0xC9, 0xEB, 0xB9, 0x3D, 0x69, 0xA9, 0x4D, 0xD2, 0x99, 0x7E, 0x06, 0x5A, 0xAB, - 0x2B, 0xA8, 0x87, 0xA6, 0xAF, 0xF0, 0x29, 0x81, 0x88, 0x87, 0xE8, 0x42, 0xB2, 0x7C, 0x15, 0x6E, - 0x1D, 0x4D, 0x5F, 0xCB, 0x76, 0xC6, 0x92, 0x6C, 0x9C, 0x61, 0x63, 0x43, 0xBE, 0xA3, 0x9C, 0xD3, - 0xD5, 0xE4, 0xEF, 0x0B, 0xCA, 0x99, 0x61, 0xCB, 0x74, 0x53, 0x80, 0x93, 0x2D, 0xEB, 0xA6, 0x91, - 0xCE, 0x87, 0x53, 0x3B, 0x54, 0x20, 0xAC, 0x75, 0x6B, 0xEB, 0x64, 0x2E, 0xD9, 0xCB, 0x59, 0xA4, - 0xA4, 0x45, 0x3D, 0x20, 0x4A, 0x4C, 0xC7, 0xD3, 0xEF, 0x71, 0x78, 0xCE, 0xD3, 0x1B, 0xC3, 0xC7, - 0x49, 0x76, 0x54, 0x70, 0x6A, 0xF1, 0x87, 0xA1, 0x60, 0xAB, 0x96, 0x14, 0x45, 0x72, 0xDD, 0x52, - 0xAC, 0x15, 0x26, 0xC7, 0x00, 0xF2, 0x62, 0xD9, 0xEF, 0x3E, 0x01, 0xB8, 0x00, 0x27, 0x35, 0xB4, - 0xEF, 0xFF, 0xA2, 0x28, 0x6E, 0xB5, 0x11, 0x44, 0x99, 0x60, 0x42, 0x2C, 0xBA, 0x24, 0x11, 0xE2, - 0x27, 0x39, 0x71, 0xC1, 0x27, 0xB1, 0x4E, 0x79, 0xFB, 0x7B, 0x64, 0x21, 0x51, 0x92, 0x2A, 0x1D, - 0xA6, 0xD0, 0xE5, 0xEC, 0xE2, 0x11, 0x0A, 0x2B, 0xEC, 0x15, 0x93, 0x52, 0xF8, 0x63, 0x11, 0xC8, - 0x69, 0x43, 0x35, 0x04, 0xDD, 0xFC, 0x08, 0x75, 0x4F, 0xCA, 0x4C, 0x1B, 0x7C, 0x80, 0x05, 0x1A, - 0xB0, 0x44, 0xA8, 0x64, 0x3A, 0xC2, 0x61, 0x14, 0x13, 0x53, 0x42, 0xC2, 0x8C, 0x19, 0xCE, 0x4B, - 0xF9, 0x5A, 0x2F, 0xAF, 0x1F, 0x22, 0x59, 0xFC, 0x11, 0xC0, 0xB0, 0xA8, 0xF1, 0x20, 0x12, 0x43, - 0x16, 0x07, 0x76, 0x20, 0x21, 0x48, 0x88, 0x28, 0x4F, 0x4C, 0xC9, 0xED, 0xD6, 0xB5, 0x38, 0x52, - 0xE5, 0x8E, 0xEA, 0x34, 0x39, 0xD3, 0xD2, 0x34, 0x4B, 0xFB, 0xFD, 0x8D, 0x9A, 0xCC, 0xBF, 0xF8, - 0x0C, 0x8C, 0x14, 0xF1, 0x1A, 0xEB, 0x90, 0x93, 0x19, 0x5C, 0x96, 0x90, 0x72, 0x87, 0x65, 0xB6, - 0xF8, 0x41, 0x78, 0xA3, 0xF8, 0xA0, 0x98, 0xCD, 0x0C, 0x2F, 0xE5, 0x5A, 0x30, 0x62, 0x30, 0x71, - 0x96, 0x1C, 0xED, 0x49, 0xE2, 0x51, 0xD6, 0x81, 0xB9, 0xE2, 0x62, 0xD6, 0xC5, 0xDC, 0xF5, 0xC6, - 0x26, 0x8B, 0xC2, 0x89, 0x57, 0xFA, 0x1C, 0x02, 0x95, 0x57, 0x0C, 0x70, 0x19, 0x3D, 0x77, 0x52, - 0x0A, 0x19, 0x3F, 0xA3, 0x22, 0xE1, 0xA0, 0x0F, 0xA0, 0x54, 0x5B, 0x17, 0xA1, 0x4D, 0x13, 0xA0, - 0x88, 0xB5, 0x1C, 0x36, 0xB1, 0x4B, 0x5D, 0x82, 0x97, 0x53, 0x4F, 0x11, 0xBC, 0xB4, 0x31, 0x5D, - 0x82, 0xA6, 0x7E, 0x5F, 0x0E, 0x2C, 0x3F, 0xED, 0x22, 0xD3, 0x6E, 0xDC, 0x54, 0x00, 0x8E, 0x1F, - 0xD1, 0x91, 0x40, 0x45, 0x36, 0x2B, 0x02, 0x8C, 0x5E, 0x8A, 0x52, 0x93, 0xF4, 0x1B, 0x84, 0xDE, - 0x8C, 0x6D, 0xCE, 0x4F, 0x85, 0xA1, 0x05, 0x9D, 0x25, 0x6D, 0xE3, 0xFD, 0x3A, 0x2F, 0xAE, 0x64, - 0xD9, 0x26, 0x97, 0x42, 0xE4, 0x4D, 0xFE, 0xB5, 0x64, 0x65, 0x4C, 0xA7, 0x59, 0x95, 0x3D, 0xA0, - 0xA5, 0xB4, 0x03, 0xDF, 0x64, 0xC9, 0x20, 0x7A, 0xA0, 0x05, 0x63, 0x15, 0x1E, 0xFE, 0xCE, 0xFA, - 0xC4, 0xE4, 0x9D, 0xB0, 0xA9, 0x46, 0x29, 0x2D, 0xDE, 0x2C, 0x4D, 0x4A, 0x3C, 0x15, 0xC5, 0xFC, - 0x3B, 0xC0, 0x2C, 0xC0, 0x5F, 0x90, 0xF0, 0x40, 0x93, 0xED, 0x2D, 0x27, 0x28, 0xC7, 0x62, 0xE2, - 0x51, 0x30, 0x49, 0xBC, 0x94, 0xC9, 0xD8, 0xD3, 0x50, 0x4F, 0x3F, 0x9B, 0x43, 0x48, 0x5E, 0x2F, - 0xC0, 0xF9, 0xC0, 0xDB, 0x17, 0xF5, 0xC6, 0x6D, 0x11, 0x3B, 0x4C, 0x5C, 0xB1, 0xED, 0x54, 0x25, - 0x82, 0xA6, 0x09, 0x35, 0xB6, 0x84, 0x7C, 0xD4, 0xE8, 0x64, 0x87, 0xB9, 0x72, 0xC5, 0xE0, 0x26, - 0x4F, 0xB0, 0x17, 0x59, 0xD1, 0xB2, 0xFA, 0x36, 0x81, 0x20, 0x4E, 0x00, 0x19, 0x62, 0x53, 0x25, - 0xAC, 0x64, 0x17, 0xA2, 0x81, 0xA0, 0x5D, 0xF6, 0xC1, 0x1C, 0xDA, 0x93, 0xD5, 0x7F, 0xAA, 0x5C, - 0x64, 0x02, 0x88, 0x9C, 0x29, 0x07, 0x05, 0x3E, 0x45, 0x65, 0x1A, 0xEE, 0x8D, 0x11, 0xC8, 0x4E, - 0x63, 0x02, 0x41, 0x21, 0xE1, 0x7E, 0x53, 0xD7, 0x59, 0x03, 0x9D, 0x3B, 0x00, 0x3B, 0x6B, 0xD3, - 0x6D, 0x27, 0x38, 0x8E, 0x41, 0x1B, 0xA0, 0x27, 0x89, 0xDB, 0xEC, 0x43, 0xD1, 0xE2, 0x3E, 0x3B, - 0x63, 0x0D, 0xA2, 0x5E, 0xF0, 0xD3, 0xCC, 0x6D, 0x63, 0x36, 0x23, 0xAE, 0x75, 0x39, 0xB1, 0x1D, - 0xAB, 0xCE, 0x40, 0xA3, 0x07, 0x6D, 0x7C, 0x8D, 0x7E, 0xE6, 0x98, 0x3E, 0xD4, 0xC1, 0xB1, 0x82, - 0x37, 0x5F, 0xB2, 0x6B, 0xF5, 0x5A, 0xCF, 0x12, 0xCF, 0xE4, 0xF0, 0x66, 0x6D, 0xCB, 0x37, 0x16, - 0x6F, 0xF0, 0x99, 0x3F, 0x6A, 0x0E, 0xCD, 0x4E, 0xB3, 0xC3, 0x1B, 0x84, 0x50, 0x6C, 0x09, 0x91, - 0x23, 0x5E, 0x7C, 0x36, 0xEA, 0x97, 0x0F, 0x6F, 0x63, 0xBC, 0xA1, 0xF7, 0x82, 0x5D, 0xAA, 0xD7, - 0xE8, 0x43, 0x83, 0x87, 0x7F, 0xCC, 0x70, 0xA9, 0x59, 0xA4, 0x19, 0x49, 0x8C, 0xF8, 0x3C, 0x20, - 0x8A, 0x8A, 0x35, 0xFF, 0x41, 0x46, 0x0A, 0x97, 0x5D, 0xC8, 0x13, 0x68, 0xEE, 0x75, 0x15, 0xA8, - 0x78, 0x5A, 0x10, 0xC1, 0x91, 0x93, 0x97, 0x30, 0xBC, 0xFD, 0x27, 0x31, 0x7C, 0xD0, 0xC7, 0x81, - 0x56, 0xD7, 0x3B, 0xFA, 0x41, 0x9D, 0x5E, 0x7F, 0x07, 0xEC, 0x4C, 0xEA, 0x8D, 0x83, 0x6E, 0xA3, - 0xD1, 0x0E, 0x40, 0x67, 0xA4, 0xDE, 0xEA, 0x89, 0x26, 0xF0, 0x87, 0xB6, 0x61, 0x9D, 0xE4, 0xDF, - 0x7F, 0xED, 0xCD, 0xFD, 0xA0, 0xA8, 0xC1, 0x3B, 0xDB, 0xC5, 0x4C, 0x5C, 0xD4, 0xE4, 0x1A, 0x06, - 0x2F, 0xAE, 0x95, 0x69, 0xA2, 0xD3, 0x87, 0x1C, 0xC5, 0x48, 0x93, 0x3E, 0xFB, 0x05, 0x25, 0xBF, - 0x54, 0xEC, 0xF3, 0x7A, 0x93, 0xE0, 0x4C, 0x79, 0x5D, 0xAC, 0x5D, 0xDD, 0xCA, 0xC6, 0x11, 0x57, - 0x74, 0x7C, 0xAE, 0x21, 0xA3, 0xFF, 0x54, 0xC0, 0xE2, 0x35, 0x52, 0x66, 0x0E, 0xBD, 0x4A, 0x19, - 0xAA, 0xAC, 0xAF, 0x0A, 0xEB, 0xD1, 0xE4, 0x44, 0x73, 0x7A, 0x8C, 0x9D, 0xAC, 0x3D, 0x2F, 0xE7, - 0xE0, 0xE3, 0x53, 0x11, 0x51, 0xD9, 0x35, 0x1C, 0x70, 0x46, 0xA1, 0x1F, 0x06, 0xA0, 0x45, 0xF9, - 0x08, 0x6E, 0x4B, 0x19, 0x8C, 0x8F, 0x56, 0x4B, 0x00, 0xA4, 0x57, 0x89, 0x4B, 0xB0, 0xD2, 0x28, - 0xB8, 0xB0, 0x5E, 0x48, 0xBF, 0xFC, 0x9A, 0xA2, 0x00, 0xAC, 0x59, 0xCE, 0x15, 0x51, 0x06, 0xDA, - 0x35, 0xA2, 0xA0, 0x87, 0x40, 0x7C, 0xD8, 0x26, 0x85, 0xBC, 0x9C, 0x61, 0x7D, 0x76, 0x48, 0x9F, - 0x8A, 0x85, 0x79, 0x43, 0xF9, 0xEC, 0x30, 0xFE, 0x56, 0x32, 0x10, 0xF1, 0x51, 0x81, 0x58, 0x84, - 0xA4, 0x58, 0xDE, 0x44, 0x96, 0xB7, 0x98, 0xCE, 0x28, 0x81, 0x90, 0xBF, 0x7D, 0xC0, 0xC4, 0x45, - 0x2A, 0x8A, 0x8B, 0x70, 0x71, 0x21, 0x40, 0x3C, 0xC2, 0x2D, 0x9F, 0x5B, 0x89, 0xEC, 0xFF, 0xD7, - 0xE7, 0x31, 0x67, 0x8B, 0x61, 0x21, 0x9D, 0x7C, 0xEE, 0x42, 0x62, 0xAF, 0x18, 0x20, 0xF1, 0x81, - 0x24, 0xC6, 0xD6, 0x62, 0x58, 0x8D, 0x2D, 0x31, 0xF7, 0x81, 0x00, 0x31, 0x5B, 0xEA, 0x19, 0x12, - 0xC1, 0x4A, 0xF4, 0xB2, 0x32, 0xCD, 0x70, 0x2D, 0x2D, 0xFA, 0x4C, 0x76, 0x44, 0x2C, 0x7B, 0xD3, - 0x57, 0x69, 0xB9, 0xC9, 0x9A, 0x49, 0x4C, 0x46, 0x73, 0x2C, 0xA5, 0xA0, 0x51, 0x4B, 0x09, 0x3A, - 0xA2, 0xA3, 0x10, 0x5A, 0x34, 0x62, 0x45, 0x63, 0x74, 0x5A, 0x49, 0x58, 0x51, 0xEB, 0xD8, 0x71, - 0x62, 0x04, 0x62, 0x8E, 0xE6, 0x38, 0x3D, 0xA7, 0xC7, 0x06, 0x2F, 0x8C, 0xD9, 0xD4, 0x10, 0x45, - 0x6E, 0x10, 0xB1, 0x94, 0x68, 0x13, 0x39, 0x08, 0x83, 0xCF, 0x23, 0xB3, 0x94, 0x14, 0xB6, 0xE6, - 0xA9, 0xBF, 0x77, 0x08, 0xCE, 0x87, 0xF0, 0x7D, 0x8C, 0xB8, 0x07, 0xD1, 0xF3, 0x35, 0xC7, 0x5B, - 0x10, 0x5C, 0xBF, 0x14, 0x8F, 0x9B, 0x68, 0x43, 0x02, 0x31, 0x95, 0xB0, 0x59, 0x2D, 0x8C, 0x41, - 0xE1, 0xC4, 0x0E, 0x60, 0x10, 0x8E, 0x9F, 0xB3, 0x24, 0x0F, 0xF5, 0x28, 0x21, 0x96, 0xB2, 0x97, - 0x9D, 0xED, 0x4F, 0x88, 0x93, 0xC1, 0xC4, 0xB2, 0x7C, 0xC8, 0x79, 0xCC, 0x04, 0xA2, 0xA2, 0x79, - 0xB4, 0x35, 0x44, 0x18, 0xDD, 0xFE, 0x6A, 0xA5, 0xA8, 0x66, 0xA0, 0x54, 0x90, 0x11, 0x58, 0x2C, - 0xCB, 0x98, 0xD7, 0x8C, 0x34, 0x55, 0x93, 0x95, 0x05, 0x1A, 0xC5, 0x39, 0x7B, 0x65, 0x94, 0xCF, - 0xD7, 0x0A, 0x93, 0x38, 0x4B, 0xAC, 0xEC, 0x77, 0x7E, 0x28, 0x76, 0x16, 0xB0, 0x33, 0x2C, 0x18, - 0x07, 0x0F, 0xCE, 0x0F, 0x27, 0xE1, 0xD4, 0x19, 0x3C, 0xF8, 0x5F, 0x94, 0x18, 0xA6, 0xBF, 0xBA, - 0xAB, 0x00, 0x00 -}; - - -//File: index_ov3660.html.gz, Size: 8887 -#define index_ov3660_html_gz_len 8887 -const uint8_t index_ov3660_html_gz[] = { - 0x1F, 0x8B, 0x08, 0x08, 0xA3, 0xFA, 0x69, 0x5E, 0x00, 0x03, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x5F, - 0x6F, 0x76, 0x33, 0x36, 0x36, 0x30, 0x2E, 0x68, 0x74, 0x6D, 0x6C, 0x00, 0xED, 0x3D, 0x69, 0x73, - 0xDB, 0x46, 0xB2, 0xDF, 0xFD, 0x2B, 0x60, 0x24, 0x6B, 0x51, 0x65, 0x91, 0xE2, 0xAD, 0x23, 0x12, - 0xFD, 0x6C, 0x59, 0xB1, 0x53, 0x1B, 0x67, 0xBD, 0x71, 0xE2, 0x24, 0xB5, 0xB5, 0xE5, 0x80, 0xC4, - 0x90, 0x44, 0x0C, 0x02, 0x5C, 0x00, 0xD4, 0x91, 0x94, 0x7E, 0xC7, 0xFB, 0x41, 0xEF, 0x8F, 0xBD, - 0xEE, 0x39, 0x70, 0x71, 0x00, 0x0C, 0x00, 0x11, 0x52, 0xF2, 0x1E, 0x5D, 0x65, 0xE1, 0x98, 0xEE, - 0xE9, 0x7B, 0x7A, 0x7A, 0x06, 0xC0, 0xD9, 0x53, 0xD3, 0x9D, 0x05, 0xB7, 0x6B, 0xA2, 0x2D, 0x83, - 0x95, 0x3D, 0x79, 0x72, 0xC6, 0xFE, 0x68, 0xF0, 0x3B, 0x5B, 0x12, 0xC3, 0x64, 0x87, 0xF4, 0x74, - 0x45, 0x02, 0x43, 0x9B, 0x2D, 0x0D, 0xCF, 0x27, 0xC1, 0xB9, 0xBE, 0x09, 0xE6, 0xED, 0x63, 0x3D, - 0x7D, 0xDB, 0x31, 0x56, 0xE4, 0x5C, 0xBF, 0xB2, 0xC8, 0xF5, 0xDA, 0xF5, 0x02, 0x5D, 0x9B, 0xB9, - 0x4E, 0x40, 0x1C, 0x68, 0x7E, 0x6D, 0x99, 0xC1, 0xF2, 0xDC, 0x24, 0x57, 0xD6, 0x8C, 0xB4, 0xE9, - 0xC9, 0x81, 0xE5, 0x58, 0x81, 0x65, 0xD8, 0x6D, 0x7F, 0x66, 0xD8, 0xE4, 0xBC, 0x17, 0xC7, 0x15, - 0x58, 0x81, 0x4D, 0x26, 0x97, 0x1F, 0xDE, 0x0F, 0xFA, 0xDA, 0x3F, 0x3E, 0x0E, 0xC6, 0xE3, 0xEE, - 0xD9, 0x21, 0xBB, 0x16, 0xB5, 0xF1, 0x83, 0xDB, 0xF8, 0x39, 0xFE, 0xA6, 0xAE, 0x79, 0xAB, 0xFD, - 0x91, 0xB8, 0x84, 0xBF, 0x39, 0x10, 0xD1, 0x9E, 0x1B, 0x2B, 0xCB, 0xBE, 0x3D, 0xD5, 0x5E, 0x7A, - 0xD0, 0xE7, 0xC1, 0x5B, 0x62, 0x5F, 0x91, 0xC0, 0x9A, 0x19, 0x07, 0xBE, 0xE1, 0xF8, 0x6D, 0x9F, - 0x78, 0xD6, 0xFC, 0xAB, 0x2D, 0xC0, 0xA9, 0x31, 0xFB, 0xBC, 0xF0, 0xDC, 0x8D, 0x63, 0x9E, 0x6A, - 0x5F, 0xF4, 0x8E, 0xF1, 0xDF, 0x76, 0xA3, 0x99, 0x6B, 0xBB, 0x1E, 0xDC, 0xBF, 0xFC, 0x1A, 0xFF, - 0x6D, 0xDF, 0xA7, 0xBD, 0xFB, 0xD6, 0xEF, 0xE4, 0x54, 0xEB, 0x8D, 0xD7, 0x37, 0x89, 0xFB, 0x77, - 0x4F, 0x12, 0xA7, 0xCB, 0x7E, 0x16, 0xF5, 0x1C, 0xFE, 0x38, 0x1F, 0xDE, 0x27, 0xB3, 0xC0, 0x72, - 0x9D, 0xCE, 0xCA, 0xB0, 0x1C, 0x09, 0x26, 0xD3, 0xF2, 0xD7, 0xB6, 0x01, 0x32, 0x98, 0xDB, 0x24, - 0x17, 0xCF, 0x17, 0x2B, 0xE2, 0x6C, 0x0E, 0x0A, 0xB0, 0x21, 0x92, 0xB6, 0x69, 0x79, 0xAC, 0xD5, - 0x29, 0xCA, 0x61, 0xB3, 0x72, 0x0A, 0xD1, 0xE6, 0xD1, 0xE5, 0xB8, 0x0E, 0x91, 0x08, 0x10, 0x3B, - 0xBA, 0xF6, 0x8C, 0x35, 0x36, 0xC0, 0xBF, 0xDB, 0x4D, 0x56, 0x96, 0xC3, 0x8C, 0xEA, 0x54, 0x1B, - 0x0C, 0xBB, 0xEB, 0x9B, 0x02, 0x55, 0x0E, 0xC6, 0xF8, 0x6F, 0xBB, 0xD1, 0xDA, 0x30, 0x4D, 0xCB, - 0x59, 0x9C, 0x6A, 0xC7, 0x52, 0x14, 0xAE, 0x67, 0x12, 0xAF, 0xED, 0x19, 0xA6, 0xB5, 0xF1, 0x4F, - 0xB5, 0xA1, 0xAC, 0xCD, 0xCA, 0xF0, 0x16, 0x40, 0x4B, 0xE0, 0x02, 0xB1, 0xED, 0x9E, 0x94, 0x12, - 0xDE, 0xC4, 0xB3, 0x16, 0xCB, 0x00, 0x54, 0xBA, 0xD5, 0x26, 0x2D, 0x34, 0xEE, 0x42, 0x45, 0xFA, - 0xCC, 0x95, 0x9B, 0x5C, 0x6A, 0x86, 0x6D, 0x2D, 0x9C, 0xB6, 0x15, 0x90, 0x15, 0xB0, 0xE3, 0x07, - 0x1E, 0x09, 0x66, 0xCB, 0x3C, 0x52, 0xE6, 0xD6, 0x62, 0xE3, 0x11, 0x09, 0x21, 0xA1, 0xDC, 0x72, - 0x18, 0x86, 0x9B, 0xDB, 0xB7, 0xDA, 0xD7, 0x64, 0xFA, 0xD9, 0x0A, 0xDA, 0x5C, 0x26, 0x53, 0x32, - 0x77, 0x3D, 0x22, 0x6D, 0x29, 0x5A, 0xD8, 0xEE, 0xEC, 0x73, 0xDB, 0x0F, 0x0C, 0x2F, 0x50, 0x41, - 0x68, 0xCC, 0x03, 0xE2, 0x15, 0xE3, 0x23, 0x68, 0x15, 0xC5, 0xD8, 0xB2, 0xBB, 0xE5, 0x0D, 0x2C, - 0xC7, 0xB6, 0x1C, 0xA2, 0x4E, 0x5E, 0x56, 0xBF, 0x49, 0x74, 0xAC, 0x95, 0x82, 0x62, 0xAC, 0xD5, - 0x22, 0xCF, 0x4A, 0x28, 0xAF, 0xDB, 0x9D, 0x71, 0xBF, 0xE9, 0x75, 0xBB, 0x7F, 0xDB, 0xBE, 0xB9, - 0x24, 0xCC, 0x4C, 0x8D, 0x4D, 0xE0, 0xD6, 0xF7, 0x88, 0x2D, 0xB7, 0x4A, 0xF1, 0xF1, 0x5F, 0x2B, - 0x62, 0x5A, 0x86, 0xD6, 0x8A, 0xB9, 0xF3, 0x71, 0x17, 0x6C, 0x6A, 0x5F, 0x33, 0x1C, 0x53, 0x6B, - 0xB9, 0x9E, 0x05, 0x8E, 0x60, 0xD0, 0x70, 0x63, 0xC3, 0x15, 0x18, 0x38, 0xD6, 0x64, 0x5F, 0xC2, - 0x72, 0x8E, 0xCF, 0xC4, 0x25, 0x22, 0x77, 0x1B, 0xFC, 0x29, 0x84, 0x1C, 0xFC, 0x15, 0x3A, 0x90, - 0x84, 0x47, 0x8A, 0x3E, 0x4F, 0x5F, 0x71, 0x0A, 0xB3, 0x74, 0x86, 0xBF, 0x95, 0x71, 0xD3, 0xCE, - 0xD5, 0x9D, 0x68, 0x24, 0x74, 0x08, 0xC3, 0xEC, 0xAC, 0x05, 0x4D, 0xAF, 0x96, 0x5A, 0x5B, 0xC3, - 0x28, 0xB9, 0x2F, 0x87, 0xE1, 0x48, 0xE5, 0x2A, 0xC7, 0x5F, 0xDC, 0x28, 0x4A, 0xB0, 0x2B, 0x67, - 0x35, 0x8A, 0x1D, 0xEC, 0x9F, 0xCC, 0x86, 0x18, 0x27, 0x99, 0x51, 0x04, 0x7F, 0xEA, 0x91, 0x24, - 0x42, 0x56, 0x18, 0x4D, 0x24, 0x88, 0xB3, 0x23, 0xCA, 0x16, 0xDE, 0x2C, 0xEF, 0x96, 0x60, 0xCD, - 0x27, 0x41, 0x35, 0xBA, 0x48, 0x10, 0xE7, 0xD1, 0x50, 0x18, 0x65, 0xF0, 0x77, 0xA7, 0x90, 0x6F, - 0x7C, 0x31, 0xDD, 0x04, 0x81, 0xEB, 0xF8, 0xB5, 0x86, 0xA8, 0x2C, 0x3F, 0xFB, 0x6D, 0xE3, 0x07, - 0xD6, 0xFC, 0xB6, 0xCD, 0x5D, 0x1A, 0xFC, 0x6C, 0x6D, 0x40, 0x0A, 0x39, 0x25, 0xC1, 0x35, 0x21, - 0xF9, 0xE9, 0x86, 0x63, 0x5C, 0x41, 0xDC, 0x59, 0x2C, 0x6C, 0x99, 0xED, 0xCD, 0x36, 0x9E, 0x8F, - 0x79, 0xDB, 0xDA, 0xB5, 0x00, 0xB1, 0xB7, 0xDD, 0x71, 0xD2, 0x07, 0x15, 0x3B, 0x6A, 0xCF, 0xA6, - 0x92, 0xBE, 0xDC, 0x4D, 0x80, 0x32, 0x96, 0x6A, 0xC2, 0x05, 0x76, 0xAC, 0xE0, 0x56, 0x7A, 0x8F, - 0x7B, 0xA2, 0xE4, 0x8E, 0x70, 0xC1, 0xDC, 0x61, 0x21, 0x49, 0xD7, 0xE9, 0x6C, 0x49, 0x66, 0x9F, - 0x89, 0xF9, 0xBC, 0x30, 0x0D, 0x2B, 0x4A, 0x0F, 0x3B, 0x96, 0xB3, 0xDE, 0x04, 0x6D, 0x4C, 0xA7, - 0xD6, 0x3B, 0xD1, 0x39, 0x35, 0x48, 0xC1, 0x62, 0xBF, 0x9F, 0x97, 0x54, 0x8C, 0xD6, 0x37, 0xF9, - 0x42, 0x88, 0x13, 0x3B, 0xB1, 0x8D, 0x29, 0xB1, 0xF3, 0x48, 0xE6, 0xCE, 0x90, 0x11, 0x76, 0x79, - 0xAC, 0xCA, 0xCE, 0xDD, 0x28, 0x65, 0xD1, 0xE0, 0x35, 0x3C, 0xFA, 0x9B, 0xB2, 0x1C, 0xE9, 0xF1, - 0x41, 0xE2, 0x92, 0x4F, 0x6C, 0x70, 0xB0, 0xAC, 0xD4, 0x1B, 0xDA, 0x5C, 0x03, 0x0D, 0xB9, 0x1D, - 0x78, 0x86, 0xB3, 0x20, 0x10, 0x0B, 0x6E, 0x0E, 0xC4, 0x61, 0xFE, 0xC4, 0x40, 0x89, 0x7D, 0x0C, - 0xD5, 0xA3, 0xFC, 0x89, 0x08, 0x0B, 0x08, 0x07, 0x5A, 0x87, 0x1D, 0x54, 0xC8, 0x4A, 0x62, 0xFA, - 0xCD, 0x25, 0xA4, 0x27, 0xB5, 0x0E, 0x96, 0x98, 0x48, 0x3D, 0x27, 0x69, 0x5B, 0xD2, 0x44, 0xBF, - 0x30, 0x34, 0x88, 0x29, 0xDF, 0x7C, 0x5E, 0x34, 0x69, 0x9C, 0xCF, 0x07, 0xDD, 0xC1, 0xB0, 0x30, - 0x73, 0x92, 0x72, 0x99, 0x9A, 0x38, 0x4A, 0x42, 0x47, 0x18, 0x56, 0x72, 0x8D, 0xC0, 0x37, 0xAE, - 0xA4, 0x49, 0xBB, 0xEB, 0x5B, 0x6C, 0xE6, 0x66, 0x4C, 0x7D, 0x98, 0xBB, 0x05, 0x92, 0xA9, 0x17, - 0x37, 0xF4, 0xBE, 0x94, 0x3E, 0x9A, 0xD2, 0x49, 0x5D, 0x40, 0x88, 0x57, 0x4E, 0x76, 0x42, 0x03, - 0xF2, 0x26, 0x31, 0x05, 0x4B, 0x93, 0xCA, 0x80, 0xDC, 0x04, 0x6D, 0x93, 0xCC, 0x5C, 0x8F, 0x65, - 0x83, 0x19, 0x33, 0xC7, 0x94, 0x22, 0x8B, 0x2D, 0xF6, 0x74, 0xE9, 0x5E, 0x11, 0x4F, 0x22, 0xAC, - 0x94, 0x52, 0x87, 0x27, 0x43, 0x53, 0x01, 0x9B, 0x01, 0xC3, 0xA3, 0x54, 0xF6, 0x49, 0x74, 0xFD, - 0xDE, 0xAC, 0x9F, 0xEB, 0xC7, 0x0C, 0x5D, 0x07, 0x7C, 0xC6, 0x98, 0xDA, 0xC4, 0xCC, 0x19, 0xCD, - 0x4C, 0x32, 0x37, 0x36, 0x76, 0x50, 0x60, 0x95, 0x46, 0x17, 0xFF, 0xE5, 0xF5, 0x48, 0xC3, 0xD0, - 0xBF, 0xB0, 0x2E, 0x74, 0x4E, 0x03, 0xC7, 0xBF, 0x25, 0x7D, 0x8A, 0x54, 0xC3, 0x58, 0xAF, 0x89, - 0x01, 0xAD, 0x66, 0x24, 0x4B, 0x0F, 0x4A, 0x53, 0x0C, 0x79, 0x9C, 0x57, 0x9A, 0xB7, 0x17, 0x3A, - 0x6C, 0x98, 0x3C, 0x96, 0xE2, 0xF9, 0x74, 0xEE, 0xCE, 0x36, 0xB2, 0xAC, 0x46, 0xCD, 0xF1, 0xB6, - 0xF1, 0x9D, 0x0A, 0x91, 0xF9, 0xB6, 0x45, 0xDD, 0x7F, 0xE3, 0x38, 0xA8, 0xD1, 0x76, 0xE0, 0x01, - 0x9B, 0x92, 0x8E, 0xD4, 0x04, 0x57, 0x29, 0x86, 0x25, 0x04, 0x9B, 0x55, 0xBB, 0x4A, 0x85, 0x29, - 0x49, 0x38, 0x0D, 0x23, 0xAD, 0x06, 0x31, 0xC4, 0x32, 0x05, 0xAA, 0x7A, 0x72, 0x09, 0x96, 0x9B, - 0x95, 0x2C, 0x8F, 0x12, 0x9D, 0xF5, 0x60, 0xD0, 0x67, 0xDD, 0x79, 0x8B, 0xA9, 0xD1, 0xEA, 0x1E, - 0x74, 0x0F, 0x06, 0xF0, 0x9F, 0x64, 0x3E, 0x93, 0x6F, 0x5C, 0x5C, 0xBC, 0x19, 0x96, 0x97, 0x0A, - 0xD1, 0xC5, 0x65, 0xA5, 0xAC, 0x60, 0x5F, 0xA8, 0x0B, 0x75, 0x4F, 0x4A, 0xD6, 0x97, 0x7A, 0x9D, - 0x82, 0x71, 0x38, 0xC3, 0xA4, 0xCB, 0x1B, 0xA2, 0xC4, 0x5A, 0xCA, 0xAA, 0x78, 0xE5, 0xFE, 0xDE, - 0x66, 0x49, 0xC8, 0xFF, 0x79, 0x6B, 0x8F, 0x89, 0xE2, 0x2F, 0x6D, 0xE9, 0xA5, 0xE5, 0xE2, 0x3F, - 0xB4, 0x6D, 0x74, 0xB3, 0xB5, 0xDE, 0xE6, 0x59, 0x1F, 0x50, 0xE8, 0xC0, 0x1C, 0xD4, 0x83, 0xC9, - 0x68, 0x66, 0x66, 0x18, 0x6B, 0x53, 0x41, 0x06, 0x73, 0xCB, 0xB6, 0xDB, 0xB6, 0x7B, 0x5D, 0x9C, - 0x89, 0xE4, 0x5B, 0xF2, 0x96, 0x9D, 0x16, 0x9B, 0x7C, 0x55, 0x6A, 0x37, 0x10, 0xB9, 0xFE, 0x14, - 0xD4, 0xFE, 0xB5, 0x1D, 0x2E, 0xD7, 0x35, 0xAA, 0x0D, 0x14, 0x15, 0xEC, 0xB1, 0x5E, 0x47, 0x4A, - 0xA6, 0xC4, 0x32, 0xC1, 0xFC, 0x69, 0xCF, 0xB5, 0x15, 0xCC, 0x96, 0x15, 0xA6, 0x9E, 0xD1, 0xC4, - 0xC8, 0x23, 0xB6, 0x81, 0x19, 0x7C, 0xA5, 0x0A, 0x45, 0xE1, 0xF4, 0x2D, 0x0E, 0xAE, 0xC2, 0x09, - 0x15, 0xDD, 0xE3, 0xA9, 0x2E, 0x75, 0x58, 0xEE, 0x90, 0x1D, 0xAB, 0xE5, 0x66, 0x5D, 0x90, 0xEE, - 0x27, 0x3D, 0x43, 0xDE, 0xA8, 0x44, 0x44, 0x17, 0x41, 0x7B, 0xE1, 0x91, 0x5B, 0x05, 0x66, 0x0E, - 0xF8, 0xDF, 0x53, 0x56, 0x3F, 0xAE, 0x5E, 0x2A, 0xA1, 0x03, 0x00, 0xB7, 0xA2, 0xCE, 0xD0, 0x57, - 0xE8, 0x3A, 0xBB, 0x4B, 0x15, 0x7B, 0x0C, 0xAB, 0xA3, 0xBA, 0xAE, 0x10, 0x6E, 0x72, 0x86, 0x50, - 0xB9, 0xA9, 0x8A, 0xD1, 0x57, 0x3E, 0x9F, 0x27, 0xF3, 0x20, 0x63, 0xF1, 0x87, 0xE6, 0xA9, 0x83, - 0xFC, 0xE8, 0xD6, 0x8E, 0x55, 0x53, 0x0A, 0x23, 0x47, 0x58, 0xC4, 0xCC, 0xB6, 0x3E, 0x29, 0x66, - 0x8C, 0x9E, 0xA5, 0x91, 0x67, 0xAB, 0x44, 0xA4, 0xCF, 0x54, 0xCD, 0xD0, 0x66, 0xC5, 0x87, 0x7C, - 0x50, 0x0F, 0xF9, 0xB9, 0xD5, 0x1F, 0x4B, 0xD7, 0x56, 0x72, 0x1A, 0xE7, 0x91, 0x96, 0x59, 0x05, - 0xDC, 0x1E, 0xB2, 0x32, 0x27, 0xC8, 0xF1, 0x58, 0x24, 0x55, 0x54, 0xBE, 0x57, 0xE6, 0x45, 0x98, - 0xED, 0x4A, 0x56, 0xAE, 0xB1, 0x5B, 0x2B, 0x03, 0xD2, 0x5E, 0x34, 0x57, 0x03, 0x30, 0xCA, 0xF4, - 0xA7, 0x62, 0xEE, 0xB1, 0x1A, 0x6B, 0x6F, 0xDC, 0x2D, 0xE8, 0x72, 0x66, 0xBB, 0x7E, 0xCD, 0x02, - 0x58, 0x76, 0xFD, 0x4B, 0x7A, 0x47, 0x69, 0xE8, 0xCE, 0xF5, 0xA9, 0x7C, 0x77, 0x4C, 0xC9, 0xBC, - 0xD7, 0x95, 0x46, 0xDA, 0xDC, 0x2A, 0x25, 0xAD, 0xA0, 0xD1, 0xF5, 0xCB, 0x53, 0x6D, 0x46, 0xE4, - 0x61, 0x34, 0x59, 0xA8, 0x53, 0x29, 0x95, 0xE6, 0xEA, 0x61, 0x69, 0x99, 0x26, 0xC9, 0xAD, 0x05, - 0xE3, 0x9C, 0x57, 0x31, 0x79, 0x40, 0xFA, 0x65, 0x45, 0xA9, 0x9D, 0x38, 0x45, 0xEE, 0xB6, 0x86, - 0xDE, 0xAE, 0x3D, 0x86, 0x0F, 0x34, 0x59, 0x95, 0xF4, 0x64, 0x2A, 0x92, 0x4B, 0xAA, 0xD4, 0xB9, - 0xC3, 0x5A, 0x2B, 0x8A, 0x0C, 0xE4, 0x80, 0xAD, 0xB6, 0xA3, 0x79, 0x8A, 0x2A, 0xBA, 0x90, 0xD2, - 0xE1, 0x6B, 0x4B, 0x7C, 0x19, 0xB0, 0x9D, 0xB5, 0xBA, 0x72, 0x8F, 0x4B, 0x6D, 0xD4, 0x02, 0xD2, - 0xFD, 0x66, 0x8A, 0xE6, 0x81, 0x32, 0xA3, 0x1C, 0x22, 0xC3, 0x21, 0x46, 0x6C, 0xAE, 0x4A, 0xB6, - 0x2A, 0xEB, 0x1C, 0xE1, 0xF9, 0xD9, 0x61, 0x6C, 0x3B, 0xDC, 0xD9, 0x61, 0xB4, 0x73, 0xEF, 0x0C, - 0xF7, 0xC4, 0xC5, 0x77, 0xCD, 0xF1, 0x8E, 0x66, 0xB6, 0xE1, 0xFB, 0xE7, 0x3A, 0xEE, 0xED, 0xD2, - 0x93, 0x9B, 0xE8, 0xCE, 0x4C, 0xEB, 0x4A, 0xB3, 0xCC, 0x73, 0xDD, 0x76, 0x17, 0x6E, 0xEA, 0x1E, - 0xBD, 0xCF, 0xD4, 0x0C, 0x03, 0xD9, 0xB9, 0x9E, 0x58, 0x60, 0xD4, 0x29, 0x54, 0x74, 0x49, 0x9F, - 0x3C, 0xFB, 0xE2, 0xE4, 0xE8, 0x68, 0xFC, 0xD5, 0x33, 0x67, 0xEA, 0xAF, 0xF9, 0xFF, 0x3F, 0xB0, - 0xF5, 0x58, 0xB6, 0xA9, 0x0F, 0xC6, 0xB6, 0x20, 0x00, 0xDB, 0xF3, 0xCF, 0x0E, 0x29, 0xD2, 0x14, - 0x21, 0x87, 0x40, 0x49, 0x06, 0x6D, 0x3C, 0xDF, 0x91, 0x91, 0x27, 0x9A, 0xF8, 0x30, 0x84, 0x4F, - 0x0D, 0x4F, 0xD2, 0x84, 0x36, 0x63, 0xD9, 0x34, 0x8D, 0x25, 0x3A, 0x55, 0xCA, 0xD4, 0xBD, 0x49, - 0x73, 0x40, 0x99, 0xE2, 0x1A, 0xE3, 0xAD, 0x88, 0x99, 0x85, 0x10, 0xC0, 0x28, 0x38, 0xAE, 0xAE, - 0x42, 0x1B, 0x69, 0xA3, 0x84, 0x0A, 0xB0, 0xF1, 0xCD, 0xCC, 0xFE, 0x2C, 0x94, 0xAF, 0x0B, 0xA5, - 0x38, 0x6E, 0xC0, 0x62, 0x65, 0x46, 0x57, 0x09, 0x56, 0x39, 0x4C, 0x6C, 0xDD, 0x90, 0x71, 0x01, - 0xA2, 0x6D, 0x53, 0xEC, 0xEC, 0x5A, 0x3E, 0x26, 0x8A, 0x2D, 0xA6, 0x57, 0x01, 0xAC, 0x4F, 0x7E, - 0xBE, 0xF8, 0xF6, 0xEF, 0xDA, 0xBB, 0xB7, 0xBF, 0x4B, 0x35, 0x54, 0x44, 0x14, 0x06, 0x69, 0x85, - 0x9E, 0x29, 0x18, 0xD3, 0x87, 0x90, 0x89, 0xCE, 0x35, 0x43, 0x31, 0xE0, 0x70, 0x6F, 0x13, 0x67, - 0x11, 0x2C, 0xCF, 0xF5, 0x9E, 0x8E, 0x7B, 0x5A, 0xC4, 0x59, 0x5F, 0xD7, 0x30, 0x80, 0xD3, 0x83, - 0x2B, 0xC3, 0xDE, 0xE0, 0x51, 0x57, 0x85, 0xD7, 0x6D, 0xD3, 0x92, 0x36, 0xE3, 0x91, 0x25, 0x94, - 0x71, 0x2C, 0x12, 0x27, 0xA5, 0xAC, 0x4F, 0x3E, 0x90, 0xE0, 0xEC, 0x90, 0xDD, 0x2A, 0xD0, 0x5A, - 0x7E, 0xDF, 0xE0, 0xC9, 0xCC, 0x1C, 0xF2, 0x4C, 0x28, 0x4F, 0xF1, 0x73, 0xCF, 0x58, 0x11, 0x94, - 0x8A, 0x92, 0xE6, 0xE3, 0x5A, 0x0F, 0x21, 0xF5, 0xC9, 0xF7, 0x84, 0x66, 0x44, 0x40, 0x86, 0x92, - 0xE2, 0xCF, 0x78, 0x92, 0x9A, 0xE8, 0x3F, 0xB4, 0x67, 0xBE, 0x28, 0xD5, 0x36, 0x98, 0x99, 0x2B, - 0xC8, 0xFD, 0x69, 0xBB, 0xAD, 0x0D, 0xDE, 0xBD, 0xD7, 0xDA, 0x6D, 0x85, 0xC6, 0xEE, 0x9A, 0xBA, - 0x13, 0xD7, 0x7F, 0xEF, 0x48, 0x9F, 0xFC, 0xF3, 0xE7, 0x37, 0x2F, 0x5B, 0xFD, 0xEE, 0xF0, 0xF8, - 0xA6, 0x37, 0x1A, 0x0F, 0xF7, 0xCF, 0x0E, 0x59, 0x93, 0xF2, 0xB8, 0xC6, 0xFA, 0xE4, 0x3D, 0x12, - 0xD2, 0x3A, 0x1E, 0x0F, 0xEB, 0xE2, 0x1A, 0x21, 0xAE, 0xB7, 0xAF, 0x5B, 0x47, 0xFD, 0xEE, 0x4D, - 0xAF, 0x7F, 0xDC, 0xAD, 0x81, 0x6A, 0xA8, 0x4F, 0xBE, 0x06, 0x4C, 0xBD, 0x13, 0x44, 0xD5, 0x2D, - 0x87, 0x0A, 0x45, 0xDB, 0xAF, 0x28, 0xDA, 0x81, 0x3E, 0xF9, 0x11, 0x45, 0x0B, 0x39, 0x37, 0xF2, - 0xD0, 0xAD, 0xC3, 0x43, 0x1F, 0x5C, 0x86, 0xE2, 0x02, 0x51, 0x00, 0x13, 0xFD, 0x3A, 0xA2, 0xED, - 0xE9, 0x13, 0x14, 0x07, 0x62, 0x02, 0xE9, 0xD6, 0x40, 0x04, 0xB1, 0x83, 0xD2, 0x04, 0xE4, 0xDC, - 0x1C, 0x8D, 0x8F, 0xAB, 0x63, 0x3A, 0x01, 0xEE, 0x3E, 0x02, 0xA6, 0x63, 0x10, 0xD4, 0xB8, 0x8E, - 0x9C, 0x8E, 0xF5, 0x09, 0xE2, 0x19, 0x0F, 0xBB, 0x37, 0xC3, 0x3A, 0x36, 0x03, 0x5E, 0xF1, 0x16, - 0x11, 0x01, 0x92, 0x9B, 0x41, 0x1D, 0x19, 0x81, 0x4B, 0x5C, 0x7C, 0xF3, 0x75, 0x6B, 0x08, 0x8C, - 0xF5, 0x4F, 0xC6, 0xD5, 0xF1, 0x80, 0x3B, 0xFC, 0x13, 0x09, 0x02, 0x62, 0x6E, 0xFA, 0xC3, 0x1A, - 0x04, 0x81, 0x33, 0x00, 0x3C, 0xE2, 0xA8, 0x8C, 0x02, 0xEC, 0xFA, 0x2D, 0x25, 0x06, 0x11, 0xF5, - 0x8E, 0x6A, 0x70, 0x05, 0x56, 0xFD, 0x4F, 0x14, 0x0F, 0x20, 0xB9, 0xE9, 0x0D, 0xEB, 0xD8, 0x34, - 0x20, 0xA2, 0x24, 0x81, 0xAF, 0xA1, 0xAB, 0x55, 0xC7, 0x04, 0x36, 0x7D, 0x32, 0xBE, 0x39, 0x19, - 0xAB, 0x21, 0xC0, 0xE1, 0x07, 0x43, 0x79, 0xDE, 0x00, 0x95, 0x3F, 0x7E, 0xE5, 0x8D, 0x4D, 0xFF, - 0xD9, 0xC0, 0x94, 0x33, 0xB8, 0x2D, 0x3D, 0x32, 0x71, 0x38, 0x90, 0x09, 0x3B, 0x50, 0x1B, 0x94, - 0x62, 0x94, 0x84, 0xBB, 0x9F, 0xF4, 0xC9, 0x50, 0x61, 0xF0, 0x4F, 0x64, 0x87, 0x14, 0x36, 0x41, - 0x3F, 0xCD, 0x48, 0xD0, 0xF2, 0x30, 0x17, 0x01, 0x97, 0x18, 0xE8, 0xB1, 0x08, 0x52, 0x69, 0xD4, - 0x93, 0xD0, 0x6A, 0xDC, 0xE8, 0x93, 0xF1, 0xA0, 0x30, 0x5B, 0xA8, 0xAE, 0x8C, 0x29, 0x2D, 0x6E, - 0x38, 0xC4, 0xF7, 0x4B, 0xEB, 0x23, 0x02, 0xD5, 0x27, 0xAF, 0xC2, 0xE3, 0x3A, 0x5A, 0x69, 0x17, - 0x71, 0x4A, 0x61, 0x33, 0xD4, 0x12, 0x23, 0x87, 0x69, 0xA6, 0x3D, 0xE0, 0xAA, 0x89, 0x34, 0x73, - 0xBF, 0x8A, 0xD9, 0xA5, 0x5E, 0x70, 0x6E, 0xE3, 0x19, 0x7E, 0x50, 0x5A, 0x2B, 0x02, 0x10, 0x22, - 0x34, 0x3F, 0x7A, 0x30, 0x8D, 0x84, 0xA4, 0xFC, 0x05, 0xF4, 0xE1, 0x1B, 0xC1, 0x86, 0xED, 0x33, - 0x2B, 0xAD, 0x91, 0x08, 0x14, 0xF2, 0x81, 0xF0, 0xB8, 0x96, 0x56, 0xEA, 0x84, 0xAF, 0x18, 0x39, - 0x5C, 0x2F, 0x22, 0x84, 0x0D, 0x77, 0xA4, 0x97, 0x22, 0x6A, 0x6B, 0xE9, 0x65, 0x69, 0x78, 0xEB, - 0x4A, 0xE1, 0x2B, 0x84, 0x04, 0xAD, 0x88, 0xC3, 0x07, 0x73, 0x95, 0x88, 0x98, 0xBF, 0x80, 0xAF, - 0x98, 0xC4, 0x71, 0x2D, 0xBF, 0xFC, 0xD4, 0x93, 0xC3, 0xE9, 0x93, 0xD7, 0xA4, 0xFD, 0x1D, 0x1E, - 0xD5, 0x51, 0xC7, 0xCB, 0x4D, 0xE0, 0xD6, 0x50, 0x88, 0xA0, 0x85, 0xA9, 0xA3, 0xCB, 0xB5, 0x71, - 0xBC, 0x23, 0x6D, 0x1C, 0xEF, 0x50, 0x1B, 0x06, 0xF9, 0x64, 0x93, 0x2B, 0x62, 0x97, 0x56, 0x87, - 0x00, 0xD4, 0x27, 0x97, 0x37, 0x6B, 0xD7, 0xC7, 0xA7, 0x77, 0xBE, 0xC5, 0xF3, 0x5A, 0x4E, 0x32, - 0xAA, 0xA1, 0x93, 0x90, 0x20, 0xEE, 0x23, 0x23, 0xAE, 0x95, 0xD1, 0x8E, 0xB4, 0x52, 0x44, 0x6B, - 0x1D, 0xAD, 0x2C, 0x0C, 0xCB, 0x99, 0x11, 0xCB, 0xC6, 0x27, 0x09, 0xCA, 0x2A, 0x26, 0x06, 0xAB, - 0x4F, 0xDE, 0x44, 0x27, 0x75, 0x14, 0xD3, 0xAD, 0xA1, 0x97, 0x38, 0x3D, 0x49, 0x7F, 0x19, 0xC1, - 0xAC, 0x7C, 0x47, 0xBA, 0xE9, 0xF5, 0x76, 0x39, 0xAA, 0xAC, 0xC9, 0xCC, 0x32, 0xEC, 0x4F, 0x64, - 0x3E, 0x87, 0x69, 0x50, 0xF9, 0xA1, 0x25, 0x01, 0x0E, 0xE3, 0x0B, 0x3B, 0xD7, 0x2E, 0xE9, 0x79, - 0xE9, 0x62, 0x5A, 0x0A, 0x5D, 0xF5, 0x8A, 0x5A, 0x7A, 0x4E, 0xC8, 0x97, 0x95, 0x09, 0xAD, 0x61, - 0xB2, 0x23, 0x7D, 0xF2, 0x9D, 0x1B, 0xD2, 0x59, 0x7D, 0xDA, 0xFA, 0x1D, 0x59, 0xD0, 0x55, 0xDB, - 0x3A, 0x73, 0xE8, 0x37, 0x9E, 0x71, 0x4B, 0x5F, 0x0B, 0x50, 0x67, 0x4A, 0xFF, 0x3D, 0x31, 0xB5, - 0x1F, 0x2C, 0xA7, 0x3A, 0x33, 0x43, 0x24, 0x84, 0x10, 0xA7, 0x1E, 0x96, 0x11, 0x4C, 0x91, 0xE0, - 0xA0, 0x1E, 0x92, 0x31, 0x16, 0x98, 0xD7, 0x96, 0xF1, 0x18, 0x26, 0xF1, 0xC6, 0xF5, 0xB4, 0xFC, - 0x80, 0x72, 0x3D, 0x85, 0x71, 0xF9, 0xA7, 0x57, 0xDA, 0x25, 0xDD, 0x67, 0x5C, 0x3A, 0x5C, 0xB1, - 0x2D, 0x50, 0x2A, 0x86, 0x1E, 0xAD, 0x23, 0x60, 0x9F, 0x5B, 0x0B, 0x3C, 0x72, 0x07, 0x52, 0x5D, - 0xE4, 0x91, 0xB0, 0x27, 0x08, 0xA4, 0x3B, 0x46, 0xF4, 0x18, 0xB7, 0x6A, 0x3C, 0xEE, 0x30, 0x15, - 0x9B, 0x5D, 0x97, 0x4F, 0xC3, 0x66, 0xD7, 0xA0, 0x26, 0xF3, 0x0A, 0xB7, 0xA0, 0x9B, 0x1A, 0xE8, - 0xAB, 0x11, 0x45, 0x61, 0xAF, 0x0F, 0xA3, 0x28, 0xCA, 0xEF, 0x43, 0x2B, 0x0A, 0xAC, 0xE5, 0x13, - 0x8E, 0xA3, 0x55, 0x9C, 0x8A, 0x02, 0xEA, 0x93, 0x77, 0x86, 0xB3, 0x81, 0x41, 0xA6, 0x29, 0x85, - 0x85, 0x1D, 0x3F, 0x98, 0x7B, 0x71, 0xBE, 0x1F, 0x5A, 0x75, 0x40, 0xC8, 0xCA, 0x35, 0xCB, 0x4F, - 0x77, 0x38, 0x1C, 0x0B, 0x89, 0xEF, 0xE0, 0xA8, 0x74, 0x62, 0x20, 0x30, 0xEC, 0x38, 0x23, 0x60, - 0x53, 0xA9, 0xEA, 0xC9, 0xC0, 0x87, 0x8D, 0xE3, 0xDC, 0xD6, 0xC9, 0x04, 0x2E, 0x6C, 0x77, 0x63, - 0x56, 0xC7, 0x00, 0x69, 0xC0, 0x3F, 0xE6, 0x73, 0x6B, 0x56, 0x3D, 0x91, 0x80, 0x24, 0xE0, 0xAD, - 0xBB, 0x52, 0x84, 0xDF, 0xF1, 0xC0, 0x4B, 0x66, 0x15, 0x66, 0x72, 0x33, 0xD0, 0xE2, 0xE5, 0x45, - 0xA3, 0x03, 0x2F, 0xF4, 0xF9, 0x40, 0x91, 0x01, 0xB9, 0x7D, 0xE8, 0xA0, 0x00, 0x44, 0x7C, 0xA2, - 0xC6, 0x53, 0x45, 0x59, 0x0C, 0x32, 0x8C, 0xE8, 0x62, 0xFA, 0xFD, 0x50, 0xF3, 0xBB, 0x88, 0xA2, - 0xE4, 0xEC, 0xAE, 0x37, 0x1A, 0x8C, 0xC3, 0xE9, 0xDD, 0xA0, 0x7F, 0xBF, 0x13, 0x3C, 0x44, 0xBE, - 0x5B, 0xFD, 0xF4, 0xAB, 0xA8, 0x06, 0xA2, 0xD1, 0x77, 0xB8, 0xCE, 0x50, 0x22, 0x60, 0xD7, 0x77, - 0xA4, 0xFE, 0xC3, 0x79, 0x52, 0xFF, 0x11, 0xB8, 0xD2, 0xA2, 0x42, 0xC4, 0x5B, 0x60, 0xC4, 0x7B, - 0x73, 0xD1, 0x8C, 0x86, 0x16, 0x0F, 0x16, 0xEA, 0x16, 0x0F, 0x1A, 0xEA, 0x34, 0xBE, 0x43, 0x4D, - 0x48, 0xA1, 0x62, 0x06, 0xCB, 0x01, 0x59, 0x2D, 0xAB, 0x4E, 0x90, 0xEB, 0xDD, 0xD4, 0x89, 0x72, - 0x82, 0x8C, 0x64, 0x90, 0x1B, 0x47, 0xAB, 0x22, 0xA3, 0xFB, 0x5D, 0xD6, 0x1D, 0x16, 0x51, 0x5B, - 0xC7, 0x69, 0x3C, 0xE3, 0xFA, 0xD3, 0x62, 0x65, 0x94, 0x56, 0x06, 0x87, 0x03, 0x5D, 0xBC, 0x7B, - 0xD9, 0x64, 0xBA, 0x20, 0xFA, 0x7D, 0x18, 0x3F, 0x0A, 0xB9, 0x7E, 0xE8, 0x58, 0x67, 0x13, 0xA7, - 0x7C, 0xB0, 0x43, 0x20, 0x7D, 0xF2, 0x2D, 0x71, 0x7C, 0xED, 0xC2, 0xF5, 0xF8, 0xBB, 0x18, 0x1B, - 0xD1, 0x1A, 0xED, 0xF9, 0x61, 0x54, 0xC6, 0x98, 0x7E, 0x68, 0x7D, 0x2D, 0x57, 0x96, 0xE7, 0xB9, - 0x5E, 0x69, 0x95, 0x71, 0x38, 0x98, 0x56, 0xB4, 0xDF, 0xD1, 0xA3, 0x46, 0xD4, 0x25, 0x7A, 0x7D, - 0x18, 0x8D, 0x85, 0x3C, 0x3F, 0xB4, 0xD2, 0xAE, 0xE6, 0xB6, 0xB5, 0x2E, 0xAD, 0x32, 0x0A, 0xA5, - 0x4F, 0x3E, 0xB6, 0xBF, 0x86, 0xBF, 0x8D, 0xA8, 0x8B, 0xF5, 0xF8, 0x30, 0xCA, 0xE2, 0xDC, 0x3E, - 0xB4, 0xAA, 0xA6, 0xEB, 0xF2, 0xE1, 0x10, 0x60, 0xF4, 0xC9, 0xAB, 0xF7, 0xCD, 0xE4, 0x7E, 0xD8, - 0x99, 0xA2, 0x86, 0x6A, 0xE9, 0x83, 0x32, 0xF5, 0xD0, 0xDA, 0xB8, 0xAE, 0xA0, 0x8D, 0x6B, 0x24, - 0xFC, 0xA7, 0x86, 0xB4, 0x71, 0xAD, 0xAE, 0x8D, 0x7B, 0xF6, 0x97, 0xEB, 0xC7, 0xA0, 0x1F, 0xFA, - 0xB0, 0xDF, 0xD4, 0x28, 0x3F, 0x1C, 0x09, 0x40, 0xDC, 0x34, 0x06, 0x47, 0xDA, 0x2B, 0xA3, 0x99, - 0x01, 0x29, 0xEC, 0xB7, 0x09, 0x17, 0x8A, 0x98, 0x7C, 0x68, 0x3D, 0xD9, 0xC4, 0xAC, 0x90, 0xE4, - 0x99, 0x9F, 0xF0, 0xC9, 0x39, 0x7C, 0xA2, 0xFC, 0x16, 0xB2, 0xBD, 0xCB, 0xD7, 0xDA, 0x37, 0xE2, - 0xF4, 0xA1, 0x0A, 0x43, 0x49, 0x9A, 0x92, 0xF3, 0xA6, 0xFE, 0x68, 0x57, 0xDB, 0x32, 0x00, 0xF3, - 0x0E, 0x75, 0x33, 0x37, 0x66, 0xE4, 0x93, 0x49, 0x82, 0x2A, 0xEB, 0xFE, 0x31, 0x58, 0x7D, 0xF2, - 0x35, 0x9C, 0x68, 0xAF, 0xE9, 0x49, 0x53, 0xE9, 0x78, 0xBC, 0xFF, 0x26, 0x3C, 0x2A, 0xC1, 0xEF, - 0x43, 0x3B, 0x15, 0x25, 0x06, 0x26, 0x3F, 0xEE, 0xC2, 0xA9, 0xF4, 0xDC, 0x53, 0x02, 0x9C, 0xAB, - 0xEF, 0x7B, 0x76, 0xDE, 0xAC, 0x02, 0x23, 0x22, 0x1A, 0xD3, 0x61, 0x8C, 0xEF, 0x26, 0xD4, 0x18, - 0x7F, 0xF8, 0x91, 0xBF, 0x36, 0xB8, 0x48, 0x53, 0xFC, 0x21, 0x3C, 0xBA, 0xDD, 0x88, 0x04, 0x6D, - 0x3F, 0xB0, 0x6C, 0x5B, 0x9F, 0xBC, 0x21, 0x81, 0xF6, 0x01, 0x0F, 0x15, 0x9F, 0xBA, 0x8B, 0x61, - 0x11, 0xCF, 0xDC, 0x06, 0x1E, 0x31, 0x56, 0xFA, 0xE4, 0x03, 0xBE, 0x50, 0x19, 0x70, 0xE1, 0x59, - 0x79, 0x64, 0x54, 0x88, 0xC4, 0xF1, 0x5C, 0x20, 0x2A, 0x54, 0x12, 0x7F, 0x51, 0xA3, 0xAE, 0x89, - 0xA3, 0xD8, 0xB5, 0xC9, 0x25, 0x6D, 0xAC, 0xA1, 0x95, 0x15, 0x77, 0x17, 0x7F, 0x1C, 0x30, 0xDF, - 0x39, 0xE8, 0x03, 0xC0, 0xF8, 0x44, 0x6F, 0xF2, 0x7D, 0xEB, 0xA0, 0x56, 0xF6, 0x7C, 0xFF, 0xE4, - 0xCC, 0x5F, 0x1B, 0x8E, 0x68, 0x46, 0x1F, 0x7E, 0xBF, 0xE6, 0x4F, 0x33, 0x4F, 0x5D, 0xDB, 0xFC, - 0x2A, 0xB6, 0xF0, 0xFF, 0x21, 0x7C, 0x2C, 0x17, 0x41, 0xC0, 0x2E, 0x04, 0x86, 0x02, 0xE5, 0x2E, - 0x3D, 0x81, 0x9E, 0x3D, 0x41, 0x8D, 0x6F, 0xEB, 0xCA, 0xD1, 0x6E, 0xC6, 0x93, 0xC4, 0x1E, 0x59, - 0x84, 0x92, 0x94, 0x3D, 0x61, 0x2E, 0x7D, 0xAE, 0xF8, 0x7B, 0xB2, 0xB0, 0x7C, 0xA0, 0x51, 0x03, - 0xBB, 0x38, 0xA4, 0xCF, 0x62, 0x32, 0x5B, 0x56, 0x7B, 0xCE, 0x37, 0xDE, 0x25, 0x7F, 0x4D, 0x81, - 0xF4, 0xF1, 0xED, 0x52, 0xA9, 0x63, 0xFA, 0x59, 0xEB, 0x24, 0xC6, 0x22, 0xAB, 0x7F, 0xDA, 0x6E, - 0x2F, 0x87, 0xF8, 0x54, 0xA9, 0x26, 0x58, 0x3B, 0x3B, 0x5C, 0x0E, 0x8B, 0x9E, 0xDA, 0x2B, 0x7C, - 0x24, 0x18, 0x38, 0xAD, 0xFC, 0x44, 0x30, 0x4A, 0x69, 0x02, 0xD4, 0x1C, 0x68, 0xEF, 0x0C, 0xFF, - 0xF3, 0x81, 0xF6, 0x11, 0x87, 0xF8, 0x06, 0x1F, 0x0C, 0x46, 0xDA, 0x0D, 0xD3, 0xF4, 0x32, 0x1F, - 0x0E, 0x1E, 0x26, 0x1E, 0x0E, 0x1E, 0x8B, 0x87, 0x83, 0xA3, 0x95, 0xAA, 0xEE, 0xCD, 0xA0, 0xDB, - 0x3D, 0x56, 0x61, 0x5D, 0xF1, 0x01, 0xE1, 0x7B, 0xE1, 0x69, 0x05, 0xD2, 0x54, 0xE4, 0x69, 0x28, - 0x78, 0x8A, 0x6D, 0xD8, 0xBF, 0x99, 0xCF, 0x1F, 0x1B, 0x47, 0x7C, 0xC9, 0xB0, 0x3A, 0x4B, 0xDD, - 0x7E, 0xD3, 0x4F, 0x71, 0x53, 0xE3, 0xBE, 0xAF, 0x87, 0xB8, 0x69, 0x93, 0x74, 0x34, 0x1C, 0xE5, - 0x06, 0x43, 0x0A, 0xC2, 0x9C, 0xFE, 0xCD, 0x7D, 0x3A, 0xFD, 0xA2, 0x86, 0xD3, 0x2F, 0xB6, 0x9C, - 0xBE, 0x41, 0x6F, 0x17, 0x84, 0xFF, 0xD5, 0x3C, 0x5E, 0xF0, 0x55, 0xC2, 0xEB, 0xA5, 0x7C, 0x75, - 0xBB, 0xF7, 0xEA, 0xF7, 0x85, 0x4E, 0x12, 0x1A, 0xC3, 0x9B, 0xFB, 0x74, 0x92, 0x0C, 0xD3, 0xAD, - 0x64, 0xA7, 0x3C, 0xEC, 0x4C, 0x9A, 0x19, 0x97, 0x68, 0x36, 0x15, 0x57, 0x28, 0xEF, 0x1D, 0x1F, - 0xD7, 0x1D, 0x0C, 0x79, 0xEA, 0x74, 0x1F, 0xEA, 0x51, 0x7F, 0x61, 0x44, 0x66, 0x93, 0xFB, 0x49, - 0xCC, 0xD6, 0xB1, 0x14, 0x57, 0x39, 0x31, 0x7B, 0xFF, 0xED, 0xB7, 0xE5, 0x72, 0xB1, 0x78, 0x2F, - 0x8F, 0x24, 0x17, 0xCB, 0x2D, 0x53, 0xDF, 0xAE, 0xE1, 0x06, 0x52, 0x5D, 0xC9, 0x74, 0x23, 0x70, - 0x7D, 0xF2, 0x8A, 0x1E, 0x6B, 0x31, 0x89, 0x95, 0x32, 0x5E, 0xE5, 0x59, 0x27, 0x05, 0x8C, 0xD5, - 0xB1, 0x23, 0x12, 0xD2, 0xBA, 0x51, 0xC4, 0x95, 0x53, 0xBB, 0x8E, 0xB1, 0xA7, 0xCE, 0x54, 0x6D, - 0x9F, 0xA0, 0x4D, 0x8A, 0x52, 0xE1, 0xD5, 0xC6, 0xAE, 0xAC, 0x36, 0x0E, 0xAB, 0x4F, 0xDE, 0xC1, - 0x64, 0xDC, 0x5A, 0xDB, 0x16, 0xCC, 0x3C, 0x5A, 0x5D, 0xAD, 0xAD, 0x0D, 0x7A, 0xFB, 0x0D, 0x8E, - 0x91, 0x82, 0x8C, 0x92, 0x6F, 0xCB, 0xE9, 0x45, 0x0F, 0xB3, 0x0D, 0xEE, 0xE9, 0x75, 0x39, 0x75, - 0x15, 0xE2, 0xB9, 0x6E, 0x50, 0x59, 0x1B, 0x02, 0x18, 0x12, 0x15, 0x38, 0xD2, 0x22, 0x9D, 0xA8, - 0xAB, 0x22, 0xB6, 0xB5, 0x36, 0xC2, 0xA6, 0xA6, 0x0E, 0xA5, 0x8D, 0xB4, 0xB8, 0x3F, 0x45, 0x75, - 0x07, 0xAA, 0x04, 0x6B, 0x4F, 0x9F, 0xF4, 0x4B, 0x60, 0x28, 0xDE, 0x87, 0xCA, 0x5A, 0xD5, 0x77, - 0x22, 0xFF, 0xB6, 0x7A, 0xEC, 0xE3, 0xB0, 0x90, 0x76, 0xDF, 0x42, 0xAA, 0xBB, 0xD2, 0x5E, 0x43, - 0x5F, 0xD4, 0x89, 0x7A, 0xA3, 0x26, 0x9D, 0x48, 0x90, 0x51, 0xDD, 0x89, 0x7A, 0x8F, 0xC3, 0x87, - 0x50, 0x1F, 0x6B, 0x8F, 0x54, 0xD6, 0x07, 0x87, 0xD5, 0x27, 0xEF, 0x3D, 0x82, 0xCA, 0xA8, 0xE4, - 0x3D, 0x21, 0x92, 0x6A, 0xCE, 0x73, 0x0F, 0x8E, 0xD2, 0xEB, 0x8C, 0xEA, 0xE1, 0xE8, 0x97, 0x73, - 0x36, 0x09, 0x86, 0x81, 0x3C, 0x08, 0x0C, 0x1E, 0xA7, 0x0B, 0x13, 0xDB, 0x1C, 0x55, 0x77, 0x62, - 0x01, 0x8D, 0xB3, 0x67, 0x38, 0xAC, 0x6C, 0x38, 0x31, 0x44, 0x8F, 0x2A, 0xEE, 0xD6, 0xC4, 0x70, - 0x1F, 0xC6, 0x34, 0xE9, 0x97, 0x32, 0xE9, 0x66, 0x4C, 0x67, 0x8D, 0x2F, 0x17, 0x24, 0x6A, 0x7B, - 0x3E, 0x29, 0xB2, 0x78, 0xA4, 0x61, 0xB0, 0x10, 0x69, 0xE8, 0xEB, 0x05, 0xE9, 0x5E, 0xF7, 0x46, - 0x73, 0x5E, 0x41, 0xC0, 0xF6, 0x32, 0x4B, 0xF9, 0xAD, 0x01, 0x31, 0xE6, 0x64, 0x29, 0x70, 0xC8, - 0xEB, 0x63, 0xCB, 0x7F, 0x29, 0x61, 0x95, 0xC7, 0x0A, 0x0E, 0xCC, 0x55, 0x18, 0x0E, 0xDD, 0xCD, - 0xE6, 0xBF, 0x21, 0x15, 0x35, 0xC6, 0xEE, 0x06, 0x13, 0xE0, 0xD8, 0xB2, 0x11, 0x55, 0x00, 0x0B, - 0x9A, 0x01, 0x9B, 0xF1, 0x95, 0x58, 0x09, 0xCA, 0x6C, 0x72, 0x3F, 0xF3, 0xFC, 0x6B, 0xCB, 0x29, - 0x3F, 0xCF, 0xFF, 0xC9, 0x72, 0x4C, 0xF7, 0xBA, 0xDC, 0x54, 0x3F, 0xDE, 0xD1, 0x9F, 0x60, 0xAA, - 0x4F, 0x07, 0x4B, 0x5C, 0x2C, 0x6C, 0x7B, 0x44, 0xED, 0xA5, 0x33, 0x69, 0x21, 0x33, 0xE8, 0x1B, - 0x5C, 0x6A, 0x03, 0x14, 0xBE, 0x46, 0x97, 0x1E, 0x77, 0xED, 0x2F, 0x3F, 0x9F, 0xC6, 0x93, 0x5D, - 0x4E, 0x81, 0x9A, 0xC3, 0x0C, 0x25, 0x85, 0xC7, 0x07, 0xAF, 0xA5, 0xFE, 0xB2, 0xCD, 0xCF, 0xED, - 0x83, 0xF3, 0x73, 0x1F, 0x01, 0x99, 0x38, 0x66, 0x65, 0xCB, 0x42, 0xD8, 0xC8, 0xAE, 0x2E, 0x1D, - 0xB3, 0x51, 0xAB, 0x62, 0xBD, 0x57, 0xD6, 0x41, 0xBF, 0x7B, 0x74, 0xF2, 0xB8, 0xCC, 0x0A, 0x19, - 0xAA, 0x61, 0x54, 0xBD, 0xD1, 0xF0, 0xE8, 0xF1, 0xD8, 0x95, 0x3B, 0x9F, 0xB3, 0x15, 0xAE, 0x6A, - 0xA6, 0xC5, 0xC1, 0x6F, 0xE8, 0xA3, 0xB4, 0x3E, 0x69, 0x36, 0x5E, 0x85, 0x9D, 0xAB, 0xE9, 0x62, - 0x20, 0xD1, 0xC5, 0xF8, 0x71, 0x99, 0x16, 0xE7, 0x48, 0xD5, 0xBA, 0x24, 0x1C, 0xDD, 0x13, 0x43, - 0xF7, 0x61, 0x5A, 0x81, 0x1B, 0x18, 0x76, 0x65, 0xCB, 0x62, 0xD0, 0x60, 0x58, 0x3F, 0xE0, 0x81, - 0xF6, 0x01, 0xF8, 0x6C, 0xD4, 0xB8, 0x44, 0xFF, 0xD5, 0x03, 0xD7, 0xA0, 0xFB, 0xC8, 0xC6, 0x43, - 0xC6, 0x52, 0xAD, 0xD0, 0x35, 0x1E, 0x3E, 0x1E, 0xFB, 0x72, 0x37, 0x01, 0x5E, 0xAD, 0x1C, 0xBA, - 0x18, 0x38, 0x86, 0x2E, 0x7A, 0xD4, 0xBC, 0x89, 0x85, 0x14, 0xD4, 0x18, 0x1C, 0x87, 0x0F, 0xBF, - 0x7E, 0xFD, 0x8B, 0x84, 0xA7, 0x5A, 0x46, 0x36, 0x78, 0x2C, 0x41, 0x6C, 0x66, 0x28, 0xBF, 0x88, - 0x8D, 0x22, 0x8B, 0x67, 0xF3, 0x0C, 0x16, 0xE6, 0x70, 0xEC, 0xA0, 0xD1, 0x0A, 0x86, 0xE8, 0xFC, - 0xDE, 0x97, 0xEC, 0x42, 0xAE, 0x1E, 0x53, 0xBD, 0x62, 0x6A, 0x39, 0x4E, 0x55, 0x35, 0x71, 0x58, - 0x7D, 0xF2, 0x8A, 0x1D, 0x34, 0xBB, 0xB8, 0xCA, 0x3B, 0xBF, 0xFF, 0x95, 0x55, 0xC1, 0x55, 0xD3, - 0x6A, 0x4A, 0x15, 0x31, 0xBC, 0xF0, 0x4B, 0x11, 0x3A, 0xDF, 0xAD, 0x18, 0x7D, 0x39, 0xE2, 0xF1, - 0x94, 0x34, 0x16, 0xC6, 0x0A, 0x9F, 0x30, 0x2E, 0x5B, 0xD4, 0x78, 0x83, 0x60, 0xE5, 0x6A, 0x1A, - 0xC9, 0x9E, 0x1E, 0x77, 0x55, 0x63, 0x92, 0x7C, 0xB5, 0x24, 0x10, 0xDE, 0x9E, 0x5A, 0x86, 0x8F, - 0x4F, 0xE3, 0xC3, 0xB1, 0xF6, 0x0A, 0x8E, 0xB5, 0xF7, 0xF6, 0x26, 0x7C, 0x37, 0xAE, 0xCC, 0x21, - 0xE2, 0x3B, 0x9B, 0x22, 0x0C, 0x59, 0xDB, 0xD7, 0xE9, 0x86, 0x2E, 0xFE, 0x14, 0x16, 0x1C, 0xE3, - 0x3E, 0xA6, 0xD1, 0xF0, 0xB8, 0xAB, 0x6B, 0x2C, 0x2B, 0xE6, 0xCF, 0x90, 0xF8, 0x9F, 0xE9, 0x06, - 0xA7, 0x5E, 0x48, 0xA0, 0xCC, 0x01, 0xE2, 0xF4, 0x86, 0x04, 0x52, 0xFB, 0xAD, 0xB3, 0xEF, 0x68, - 0x5B, 0x22, 0x3D, 0x21, 0x8E, 0xAE, 0xD4, 0x10, 0x12, 0x2F, 0xC3, 0x64, 0xED, 0x55, 0x9E, 0x86, - 0x91, 0x0B, 0xA2, 0x27, 0x15, 0x04, 0xEE, 0xF3, 0xBA, 0x5F, 0x9E, 0xFA, 0x82, 0xA7, 0x9E, 0x1A, - 0x4F, 0xFD, 0x1A, 0x3C, 0xF5, 0x1B, 0xE2, 0x69, 0x20, 0x78, 0xEA, 0xAB, 0xF1, 0x34, 0xA8, 0xC1, - 0xD3, 0xA0, 0x21, 0x9E, 0x86, 0x82, 0xA7, 0x81, 0x1A, 0x4F, 0xC3, 0x1A, 0x3C, 0x0D, 0x1B, 0xE2, - 0x69, 0x24, 0x78, 0x1A, 0xAA, 0xF1, 0x34, 0xAA, 0xC1, 0xD3, 0xA8, 0x21, 0x9E, 0xC6, 0x82, 0xA7, - 0x91, 0x1A, 0x4F, 0xE3, 0x1A, 0x3C, 0x8D, 0x1B, 0xE2, 0xE9, 0x48, 0xF0, 0x34, 0x56, 0xE3, 0xE9, - 0xA8, 0x06, 0x4F, 0x47, 0x0D, 0xF1, 0x74, 0x2C, 0x78, 0x3A, 0x52, 0xE3, 0xE9, 0xB8, 0x06, 0x4F, - 0xC7, 0x0D, 0xF1, 0x74, 0x22, 0x78, 0x3A, 0x56, 0xE3, 0xE9, 0xA4, 0x06, 0x4F, 0x27, 0x0D, 0xF1, - 0x84, 0x8B, 0x72, 0x8C, 0xA9, 0x13, 0xC5, 0x41, 0xB7, 0x5B, 0x83, 0x2B, 0xA3, 0x29, 0xAE, 0xC2, - 0x54, 0xA2, 0xA7, 0x9A, 0x4B, 0xD4, 0x49, 0x26, 0xA6, 0x4D, 0xB1, 0x15, 0x65, 0x13, 0x8A, 0xE9, - 0x44, 0xAF, 0x4E, 0x3E, 0x31, 0x6B, 0x8A, 0xAD, 0x30, 0xA1, 0xE8, 0x29, 0x66, 0x14, 0xBD, 0x3A, - 0x29, 0x85, 0xD9, 0x14, 0x5B, 0x61, 0x4E, 0xD1, 0x53, 0x4C, 0x2A, 0x7A, 0x75, 0xB2, 0x0A, 0xD2, - 0x14, 0x5B, 0x61, 0x5A, 0xD1, 0x53, 0xCC, 0x2B, 0x7A, 0x75, 0x12, 0x8B, 0x79, 0x53, 0x6C, 0x85, - 0x99, 0x45, 0x4F, 0x31, 0xB5, 0xE8, 0xD5, 0xC8, 0x2D, 0x4E, 0xE4, 0x13, 0xB1, 0x7B, 0x65, 0x8B, - 0x04, 0x7C, 0x8A, 0x1C, 0x4D, 0xDA, 0x94, 0x1E, 0x3D, 0xE1, 0x40, 0xF8, 0x6C, 0x14, 0x13, 0xC8, - 0x85, 0xEB, 0xCC, 0xAD, 0x45, 0x58, 0x64, 0x78, 0x34, 0x4F, 0x49, 0xF8, 0xB1, 0xB7, 0xF2, 0x2A, - 0x17, 0x1A, 0x3E, 0xBC, 0xBE, 0x2C, 0x57, 0x66, 0x88, 0xF7, 0xF2, 0x27, 0x2A, 0x32, 0x00, 0xD9, - 0xFD, 0xF8, 0x27, 0x02, 0x94, 0xEA, 0x0A, 0x14, 0xA8, 0x4C, 0x45, 0x61, 0x14, 0xAF, 0x28, 0x8C, - 0x95, 0x2B, 0x0A, 0x8C, 0xB8, 0xDD, 0xD4, 0x12, 0x00, 0xF7, 0x80, 0x7D, 0xD7, 0x40, 0x9D, 0xE9, - 0x41, 0x75, 0xA6, 0x47, 0x65, 0x98, 0x1E, 0x54, 0x61, 0xBA, 0xC2, 0xD3, 0x8D, 0x8A, 0x72, 0x02, - 0x7A, 0xBF, 0xB6, 0x6E, 0x88, 0xA9, 0xFD, 0xA2, 0x2E, 0xAA, 0x5E, 0x75, 0x51, 0x1D, 0x95, 0x11, - 0x55, 0x6F, 0x87, 0xF6, 0x31, 0x12, 0x7C, 0xFF, 0xA8, 0xCE, 0xF7, 0xA8, 0x3A, 0xDF, 0x83, 0x32, - 0x7C, 0x8F, 0x76, 0xC8, 0xF7, 0x50, 0xF0, 0xFD, 0x51, 0x9D, 0xEF, 0x61, 0x75, 0xBE, 0x87, 0x65, - 0xF8, 0x1E, 0xEE, 0x90, 0xEF, 0x3E, 0x04, 0x9B, 0x1F, 0x3F, 0x6A, 0x3F, 0x2C, 0x3D, 0xE2, 0x2F, - 0x8B, 0x2B, 0x71, 0x0C, 0xA2, 0xEA, 0xD8, 0x3E, 0x6A, 0x60, 0xEE, 0x86, 0x14, 0x0E, 0xE2, 0x3C, - 0x15, 0xE6, 0xCD, 0x0C, 0x42, 0xE5, 0xC3, 0x41, 0x72, 0x9E, 0xE4, 0x33, 0xB7, 0x9E, 0x2A, 0x53, - 0xBB, 0x8B, 0x61, 0xC7, 0xFA, 0xE4, 0xED, 0xA6, 0xC4, 0xF8, 0x76, 0x5C, 0xDD, 0x9E, 0xD5, 0x2B, - 0xE6, 0x8C, 0xAE, 0x9D, 0xD9, 0xF3, 0x09, 0xE5, 0x19, 0xF2, 0x32, 0x5F, 0x41, 0xED, 0xD5, 0xAB, - 0x10, 0xA3, 0x06, 0xAA, 0xE4, 0x18, 0xE9, 0x8F, 0x18, 0x3B, 0x3F, 0x22, 0x43, 0x1A, 0x64, 0x2C, - 0x25, 0x06, 0xA3, 0xA3, 0x92, 0xDA, 0x3C, 0xAE, 0x18, 0x9D, 0x90, 0xC6, 0x9D, 0xA9, 0x13, 0xA7, - 0x1E, 0x28, 0x80, 0x8F, 0x15, 0x04, 0x30, 0xAE, 0x2E, 0x80, 0x52, 0x99, 0x0B, 0xD2, 0xB8, 0x3B, - 0x01, 0x74, 0x99, 0x00, 0x3E, 0x44, 0x6F, 0xA6, 0xCE, 0x31, 0xE8, 0x1A, 0x15, 0xA8, 0x51, 0x03, - 0x6B, 0x24, 0x18, 0x69, 0x7B, 0xC2, 0xA2, 0x81, 0xA3, 0x72, 0x0A, 0xED, 0x97, 0xCD, 0xAF, 0xE4, - 0xC5, 0x4F, 0x85, 0xFC, 0x7B, 0x97, 0x09, 0x56, 0xBF, 0x2B, 0x2C, 0xBA, 0xBC, 0x00, 0xBA, 0xD5, - 0x05, 0xD0, 0x2B, 0x25, 0x80, 0xEE, 0xE3, 0x4A, 0xC6, 0xC7, 0xDB, 0x1F, 0x13, 0x2E, 0x96, 0x56, - 0x59, 0xF7, 0x8F, 0x8D, 0x66, 0xFD, 0x32, 0xC2, 0xDA, 0xA9, 0xF7, 0x0F, 0x22, 0xCE, 0xB5, 0x5F, - 0xB4, 0xE4, 0xD6, 0xD7, 0xBC, 0x38, 0x50, 0xBD, 0x08, 0x38, 0x6A, 0x60, 0xBD, 0x0A, 0x29, 0x3C, - 0x91, 0x70, 0x56, 0x32, 0xC0, 0x9F, 0x54, 0x77, 0x87, 0x52, 0x1A, 0x46, 0x5A, 0x77, 0xA7, 0xE2, - 0x51, 0x42, 0x10, 0xEC, 0x43, 0xE6, 0x2A, 0x2A, 0xAE, 0x5E, 0x39, 0x1C, 0x35, 0xB0, 0xD4, 0x85, - 0x14, 0x1E, 0x4B, 0x38, 0x2B, 0xA9, 0xE2, 0xB2, 0x29, 0xE9, 0x71, 0xC5, 0xA9, 0x65, 0x6F, 0x97, - 0x39, 0x29, 0x56, 0xBB, 0x63, 0x82, 0x88, 0x7F, 0x65, 0x22, 0x4F, 0xC1, 0xD5, 0x2B, 0xDE, 0xA3, - 0x9A, 0xEB, 0xB3, 0xBB, 0x8B, 0xE4, 0x47, 0xB2, 0x4F, 0x90, 0x17, 0xDB, 0x41, 0xD9, 0x5C, 0xB6, - 0x5B, 0x71, 0xE0, 0xDB, 0x69, 0x2A, 0x0B, 0xBD, 0x43, 0xD6, 0xB3, 0xCD, 0x7D, 0x8E, 0x09, 0x54, - 0x5F, 0x79, 0x1B, 0x35, 0xB0, 0x3D, 0x04, 0x29, 0xEC, 0xEB, 0x93, 0x8F, 0x25, 0x99, 0xAA, 0x53, - 0x3F, 0xA8, 0xBC, 0x3F, 0xA4, 0xB9, 0xD2, 0xFB, 0x6C, 0x75, 0x53, 0xBE, 0xF4, 0x7E, 0xF1, 0xEE, - 0xE7, 0x72, 0xA5, 0xF7, 0x78, 0x2F, 0xCD, 0x95, 0xDE, 0xAB, 0xD9, 0x4C, 0xA9, 0x8D, 0xB2, 0xC0, - 0x18, 0xBE, 0x3F, 0x62, 0x66, 0xF9, 0xB4, 0x4B, 0x10, 0x8C, 0xF6, 0x5E, 0x9C, 0x86, 0x22, 0x8A, - 0x3D, 0xB1, 0x9F, 0x6C, 0x9F, 0x67, 0x3D, 0x83, 0x9C, 0xB0, 0xA0, 0xB6, 0x11, 0x76, 0xFB, 0x75, - 0x28, 0x9D, 0x31, 0xFF, 0x10, 0x57, 0x8D, 0x47, 0xEB, 0xB3, 0x5E, 0x1A, 0xD0, 0x39, 0x2A, 0x89, - 0x7B, 0xE7, 0x8F, 0xDC, 0x4F, 0x52, 0x8A, 0xEA, 0x51, 0xFD, 0xF4, 0xF0, 0x5C, 0xB9, 0x4E, 0x4E, - 0xC1, 0xCA, 0x44, 0xF3, 0x41, 0xBC, 0xD4, 0xA2, 0x1E, 0xCD, 0x19, 0x79, 0xBB, 0x89, 0xE6, 0x88, - 0x3B, 0xC1, 0x7B, 0x89, 0xAC, 0x86, 0xC1, 0x96, 0x13, 0x80, 0x7C, 0x13, 0x85, 0x82, 0x00, 0xB2, - 0x24, 0x70, 0x2F, 0x22, 0xE8, 0x53, 0x09, 0xF4, 0x53, 0xDA, 0xCF, 0x08, 0xFC, 0xB4, 0x7D, 0xD5, - 0xB8, 0x3F, 0x68, 0xA0, 0x36, 0x81, 0xE2, 0x4A, 0x70, 0x54, 0x52, 0xA7, 0xE5, 0x16, 0x07, 0x13, - 0x3A, 0x2D, 0x67, 0xD4, 0x3B, 0x5B, 0x1D, 0x04, 0xE4, 0x03, 0x2A, 0x80, 0x81, 0xB2, 0x4A, 0xAB, - 0x4F, 0x33, 0x07, 0x0D, 0xE4, 0x27, 0x28, 0xAD, 0x04, 0x47, 0x25, 0x55, 0x5A, 0x6E, 0xE9, 0x33, - 0xA1, 0x52, 0xF5, 0xF9, 0x25, 0x27, 0x72, 0x67, 0x2A, 0x1D, 0x52, 0x01, 0x0C, 0x95, 0x55, 0x5A, - 0x7D, 0xD6, 0x31, 0x68, 0x60, 0xF7, 0x2E, 0x4A, 0x2B, 0xC1, 0x51, 0x49, 0x95, 0x96, 0x5B, 0xB2, - 0x4B, 0xA8, 0x54, 0x7D, 0x3E, 0xC9, 0x89, 0xDC, 0x99, 0x4A, 0x47, 0x54, 0x00, 0x23, 0x65, 0x95, - 0x56, 0xAF, 0x14, 0x0C, 0x1A, 0x28, 0x06, 0xA1, 0xB4, 0x12, 0x1C, 0x95, 0x54, 0x69, 0xB9, 0xD5, - 0xE7, 0x84, 0x4A, 0xD5, 0xD7, 0x39, 0x38, 0x91, 0x3B, 0x53, 0xE9, 0x98, 0x0A, 0x60, 0xAC, 0xAC, - 0xD2, 0xEA, 0xFB, 0xAB, 0x06, 0x0D, 0xEC, 0xDD, 0x46, 0x69, 0x25, 0x38, 0x2A, 0xA9, 0xD2, 0x72, - 0xA5, 0xDB, 0x84, 0x4A, 0xD5, 0x57, 0x6E, 0x38, 0x91, 0x3B, 0x53, 0xE9, 0x11, 0x15, 0xC0, 0x91, - 0xB2, 0x4A, 0xAB, 0x6F, 0x5D, 0x1F, 0x34, 0x50, 0xCF, 0x43, 0x69, 0x25, 0x38, 0x2A, 0xA9, 0xD2, - 0x72, 0x15, 0x9C, 0x84, 0x4A, 0xD5, 0xF7, 0x4E, 0x71, 0x22, 0x77, 0xA6, 0xD2, 0x63, 0x2A, 0x80, - 0x63, 0x65, 0x95, 0x56, 0xDF, 0xB9, 0x3F, 0x68, 0x60, 0xE7, 0x3E, 0x4A, 0x2B, 0xC1, 0x51, 0x49, - 0x95, 0x96, 0xAB, 0xCD, 0x26, 0x54, 0xAA, 0xBE, 0xDD, 0x89, 0x13, 0xB9, 0x33, 0x95, 0x9E, 0x50, - 0x01, 0x9C, 0x28, 0xAB, 0xB4, 0xFA, 0x96, 0x81, 0x41, 0x03, 0x9B, 0x5F, 0x50, 0x5A, 0xDD, 0x38, - 0x47, 0x25, 0x55, 0x5A, 0x6E, 0x81, 0x71, 0x90, 0xB1, 0xF5, 0x45, 0x41, 0xA5, 0x59, 0x0B, 0x8C, - 0x8F, 0xA0, 0x7E, 0x67, 0x5C, 0x4F, 0x2B, 0x7C, 0xFA, 0xE5, 0xE5, 0x4F, 0xAF, 0xB2, 0x0B, 0xFB, - 0x99, 0x55, 0xBC, 0x44, 0x5F, 0x8F, 0xBD, 0x8C, 0x17, 0x97, 0x17, 0x12, 0x0E, 0x5A, 0x66, 0x2F, - 0x4D, 0xD4, 0xB6, 0x98, 0xCF, 0xB7, 0x34, 0x06, 0x5C, 0xC2, 0xD2, 0x06, 0xC3, 0xAE, 0x3C, 0x69, - 0x29, 0xB0, 0x34, 0x4E, 0xE5, 0x6E, 0x82, 0x07, 0x22, 0x87, 0xB9, 0x38, 0xF2, 0xFE, 0xBD, 0xD2, - 0x9A, 0x0E, 0x03, 0x48, 0x86, 0x8F, 0x61, 0xF7, 0x44, 0x31, 0x7E, 0x80, 0x0C, 0xB2, 0x36, 0xC6, - 0xDF, 0x63, 0x00, 0x41, 0x1A, 0x07, 0x8C, 0xA9, 0x37, 0xCA, 0x4C, 0xA5, 0xAB, 0x00, 0xA5, 0x98, - 0xCA, 0xAA, 0xEC, 0xDC, 0x33, 0x53, 0x43, 0xC6, 0x54, 0x8E, 0x93, 0xA6, 0x98, 0x4A, 0xCF, 0x83, - 0x4B, 0x31, 0x95, 0x35, 0x11, 0x8E, 0x98, 0x7A, 0x0C, 0x81, 0x8E, 0xCC, 0x8C, 0xC5, 0xAC, 0x42, - 0xA8, 0xBB, 0xBC, 0x38, 0x7C, 0xF9, 0xE6, 0x42, 0xA3, 0x4B, 0x9A, 0xAE, 0x5D, 0x32, 0xE2, 0x25, - 0x3B, 0xFD, 0x53, 0xC5, 0x3C, 0x4A, 0x7A, 0x2C, 0xEA, 0xBD, 0xB9, 0x50, 0x0D, 0x78, 0x1C, 0xB2, - 0x4C, 0xC8, 0x1B, 0x75, 0x07, 0x55, 0x2A, 0x84, 0x21, 0x91, 0x3B, 0x0A, 0x7A, 0x14, 0x7D, 0x3F, - 0x92, 0xC1, 0x65, 0x39, 0x19, 0x94, 0xAA, 0x92, 0x26, 0x65, 0x50, 0x22, 0xEC, 0x0B, 0x22, 0x77, - 0x29, 0x03, 0x8C, 0x92, 0x97, 0x17, 0xDA, 0xFB, 0xBF, 0x6B, 0x97, 0x37, 0x6B, 0xD7, 0xDF, 0x78, - 0xA4, 0x30, 0xAA, 0x70, 0xB8, 0x64, 0x5C, 0x19, 0x8F, 0x46, 0x03, 0xD5, 0xC0, 0x32, 0xCA, 0x1E, - 0x02, 0xE6, 0xDD, 0x7B, 0x8C, 0x97, 0x94, 0xD0, 0x61, 0xC8, 0xE0, 0xF7, 0x04, 0x34, 0xAD, 0x14, - 0x37, 0x39, 0x60, 0x92, 0xC3, 0x5E, 0x17, 0xB7, 0x57, 0x2B, 0x32, 0x28, 0xCF, 0x28, 0x07, 0xF7, - 0x3A, 0x1C, 0x50, 0x2A, 0x47, 0x21, 0x7B, 0x1F, 0x7F, 0xF8, 0xA0, 0xC6, 0x58, 0xBA, 0x8E, 0x56, - 0x4E, 0x75, 0x59, 0x8F, 0x8C, 0xDE, 0xD3, 0xA0, 0x20, 0xBD, 0x71, 0x76, 0x08, 0xA1, 0x77, 0x1B, - 0x26, 0x43, 0x92, 0x67, 0x73, 0x6B, 0x01, 0x76, 0x2C, 0xEF, 0x83, 0x8A, 0x96, 0xBD, 0xEC, 0x14, - 0xBF, 0x51, 0xD9, 0x9E, 0x41, 0xF4, 0x07, 0x93, 0x40, 0xA7, 0x13, 0x02, 0x5F, 0x19, 0x0B, 0x12, - 0x5D, 0xD7, 0x58, 0x6C, 0xCF, 0x8B, 0xD9, 0x06, 0x43, 0x68, 0x5C, 0x11, 0xFE, 0x41, 0x4D, 0x6D, - 0xE9, 0x91, 0xF9, 0xB9, 0xFE, 0x45, 0x88, 0x93, 0x3F, 0x95, 0x87, 0x4D, 0x74, 0xCD, 0x74, 0xAF, - 0x1D, 0xDB, 0x35, 0x70, 0x3C, 0x30, 0xD6, 0x01, 0x50, 0xDA, 0xF9, 0x6D, 0x8D, 0x2F, 0xBE, 0x32, - 0xF0, 0x21, 0x2E, 0x23, 0xA7, 0x9F, 0x98, 0x55, 0xCC, 0x6C, 0xD7, 0x17, 0xB3, 0x39, 0x3C, 0x0C, - 0x3F, 0xC0, 0xF9, 0x3F, 0xFF, 0x5D, 0xB4, 0x83, 0xC0, 0x5A, 0x2D, 0x62, 0x02, 0xD0, 0x35, 0xDF, - 0x9B, 0x9D, 0xEB, 0x40, 0xA9, 0xE7, 0xFA, 0xBE, 0xEB, 0x59, 0x0B, 0x2B, 0x43, 0x3B, 0x59, 0xD2, - 0x3E, 0x94, 0x89, 0x3B, 0xD5, 0x58, 0xA2, 0xF8, 0x33, 0x7F, 0xE6, 0x59, 0xEB, 0x60, 0xF2, 0xC4, - 0x74, 0x67, 0x9B, 0x15, 0x71, 0x82, 0x8E, 0x61, 0x9A, 0x97, 0x57, 0x70, 0xF0, 0x2D, 0x7E, 0xAC, - 0x0D, 0x24, 0xDF, 0xDA, 0x7B, 0xFD, 0x8F, 0x77, 0x38, 0x3A, 0xE3, 0x35, 0x90, 0x17, 0x31, 0xF7, - 0x0E, 0xB4, 0xF9, 0xC6, 0x61, 0x03, 0x64, 0x8B, 0x60, 0xDB, 0x7D, 0xED, 0x0F, 0xC0, 0x78, 0x65, - 0x78, 0xDA, 0xD4, 0xF0, 0xC9, 0x5B, 0xD7, 0x0F, 0xB4, 0x73, 0x2D, 0xC4, 0x68, 0xBB, 0x33, 0xBA, - 0x9D, 0xA3, 0xC3, 0xF8, 0xE2, 0x2D, 0x19, 0xE3, 0x3F, 0x7A, 0x36, 0x34, 0x0D, 0xA1, 0x9E, 0x6B, - 0x7B, 0xA7, 0xC7, 0xBD, 0x3D, 0xB4, 0xDD, 0xB0, 0x8B, 0x39, 0x81, 0xE8, 0x0F, 0xED, 0x5A, 0x1B, - 0xCF, 0x3E, 0xD0, 0x66, 0xD3, 0xFD, 0x3F, 0x28, 0xF5, 0xF4, 0x32, 0x5E, 0xDB, 0xE7, 0xCC, 0x74, - 0x82, 0x25, 0x71, 0x5A, 0x11, 0x65, 0x1E, 0xF1, 0xD7, 0xAE, 0xE3, 0x13, 0x46, 0x1C, 0xFB, 0x59, - 0xF3, 0xE8, 0x7A, 0xC7, 0x0F, 0x8C, 0x60, 0xE3, 0x6B, 0x4F, 0xCF, 0xCF, 0xB5, 0x7E, 0xB7, 0x1B, - 0x6F, 0xA6, 0x41, 0x37, 0xE9, 0x76, 0x07, 0x5A, 0xEA, 0xC2, 0x0F, 0xE4, 0x26, 0xD8, 0xFF, 0x2A, - 0x84, 0xB9, 0xD3, 0x88, 0xED, 0x93, 0x04, 0x92, 0x10, 0x00, 0x5F, 0x27, 0xD7, 0xDA, 0x4F, 0x12, - 0xD8, 0x32, 0x8D, 0xC0, 0xD8, 0xFF, 0x23, 0xA1, 0x2F, 0xE8, 0x15, 0x28, 0x39, 0xD0, 0xE8, 0xAD, - 0xAF, 0x62, 0xB7, 0xEE, 0xF6, 0x3B, 0x20, 0x43, 0xE0, 0x37, 0x84, 0x26, 0x9E, 0x97, 0xA4, 0x98, - 0x42, 0xB7, 0x7B, 0x07, 0x1A, 0xDE, 0x49, 0xC2, 0xC6, 0x88, 0x7C, 0x22, 0xAE, 0x09, 0xA1, 0xE5, - 0xA3, 0x95, 0xA0, 0x64, 0xE8, 0xEE, 0x12, 0x2A, 0x82, 0x38, 0xF4, 0x3D, 0x59, 0x80, 0xC4, 0x16, - 0x07, 0x3C, 0x2C, 0x1D, 0xD0, 0x98, 0x74, 0xC0, 0xC2, 0x59, 0x4C, 0x6B, 0xE0, 0xD0, 0xBE, 0x6B, - 0x13, 0xB0, 0x89, 0x45, 0x6B, 0x8F, 0x7F, 0x0A, 0x14, 0xEC, 0x69, 0xAF, 0x7B, 0xB3, 0xF7, 0x1C, - 0xC0, 0x3B, 0x81, 0xFB, 0x21, 0xF0, 0x2C, 0x67, 0xD1, 0xEA, 0x8D, 0xF7, 0x23, 0x5C, 0xF4, 0x36, - 0x22, 0x4C, 0xDD, 0xA7, 0xD7, 0x69, 0x17, 0xE9, 0x1B, 0x2D, 0x7E, 0xFD, 0xF9, 0xDE, 0xFE, 0x1E, - 0x27, 0x9D, 0x9E, 0x83, 0xB1, 0xB5, 0xD8, 0xC1, 0x33, 0x4A, 0xE1, 0xBE, 0x76, 0x76, 0xC6, 0xBB, - 0x61, 0xAD, 0xF0, 0x22, 0x34, 0xA2, 0x7F, 0x52, 0xB7, 0x42, 0x43, 0xFC, 0xF5, 0xCB, 0x3F, 0x84, - 0xC5, 0xDE, 0x1D, 0x02, 0xD5, 0x2F, 0x30, 0x2E, 0x7F, 0xF9, 0x07, 0xFC, 0x7F, 0xF7, 0x8C, 0x86, - 0xE2, 0x2F, 0xFF, 0xC0, 0x3F, 0x77, 0xCF, 0xA0, 0x27, 0x38, 0xA6, 0xFD, 0xDD, 0xFD, 0x4A, 0xA5, - 0xB0, 0x2D, 0xBB, 0x45, 0xA6, 0xEC, 0x42, 0xA1, 0x95, 0xA6, 0x69, 0x91, 0x43, 0xD4, 0xAF, 0x91, - 0xF7, 0xB6, 0x66, 0xAE, 0x09, 0xCA, 0x09, 0xC0, 0x8E, 0x85, 0xCA, 0x6D, 0x50, 0x89, 0x10, 0x54, - 0x57, 0xA8, 0xDC, 0x9A, 0xD3, 0x96, 0x1A, 0x77, 0x94, 0xC8, 0x3C, 0x44, 0xCB, 0xB5, 0xE1, 0xF9, - 0xE4, 0x1B, 0x27, 0x68, 0x05, 0x09, 0x97, 0xC8, 0x90, 0xF8, 0x64, 0x92, 0x60, 0x01, 0x7F, 0x00, - 0x07, 0xED, 0xF6, 0xB8, 0xD2, 0x42, 0x53, 0x7B, 0x12, 0x5A, 0x61, 0x44, 0x29, 0xBB, 0x99, 0x61, - 0x85, 0x3F, 0xCF, 0xEC, 0xCF, 0xAD, 0x1B, 0xF8, 0x2F, 0x1D, 0x28, 0xB6, 0x44, 0x84, 0x8D, 0x5E, - 0xE0, 0x7F, 0x20, 0x17, 0xFC, 0x93, 0xA9, 0x1F, 0xC0, 0xFA, 0xDE, 0xB6, 0x5B, 0xEC, 0xB3, 0x5F, - 0xA0, 0x9A, 0x0D, 0x04, 0x21, 0xFF, 0x16, 0xC3, 0x81, 0xEB, 0x06, 0x9F, 0x0E, 0xB4, 0xB5, 0x07, - 0x84, 0xD1, 0x2F, 0x7D, 0xC0, 0x31, 0x20, 0x22, 0x0E, 0xFB, 0x5B, 0x48, 0xC1, 0xDA, 0xB6, 0x5F, - 0x30, 0xAC, 0x40, 0x02, 0x3B, 0x00, 0x4D, 0x6D, 0xD0, 0x62, 0xE0, 0xFF, 0xBB, 0x67, 0xD0, 0x09, - 0x1C, 0xC2, 0xFF, 0x77, 0xCF, 0xB0, 0x2B, 0xD4, 0x25, 0xF6, 0x78, 0xF7, 0x0C, 0x7A, 0x84, 0x13, - 0xF8, 0x1F, 0xDA, 0x60, 0xBF, 0xD8, 0x0A, 0xFF, 0xC2, 0x1D, 0xDA, 0x3F, 0xDE, 0xA4, 0x07, 0xEC, - 0x02, 0x3F, 0xCD, 0x63, 0x90, 0xBD, 0xE9, 0xBE, 0x45, 0xDF, 0x3C, 0xFE, 0xE9, 0x06, 0xD8, 0xA1, - 0x07, 0xB7, 0xE0, 0xF8, 0x8E, 0x89, 0xE7, 0xF8, 0xE7, 0x56, 0x98, 0x27, 0x5E, 0xE0, 0x47, 0x70, - 0x8D, 0xBE, 0x9D, 0x15, 0x2F, 0xB1, 0x03, 0x6C, 0x45, 0xDF, 0xA5, 0x49, 0x5B, 0xB1, 0x23, 0xB8, - 0xC6, 0xDF, 0xC0, 0x78, 0xA0, 0xF1, 0x77, 0xFC, 0x15, 0x0A, 0x27, 0x7A, 0x07, 0xDF, 0x0B, 0xFF, - 0x06, 0x19, 0x64, 0xA4, 0xA1, 0x54, 0xC2, 0xB3, 0xDB, 0xBB, 0x67, 0x04, 0xEF, 0x51, 0x22, 0xE1, - 0xF8, 0x96, 0x1F, 0xC3, 0x75, 0xA0, 0x0F, 0xEF, 0x08, 0x82, 0xE9, 0x85, 0xDB, 0xE8, 0x02, 0xB4, - 0x08, 0xF0, 0x3E, 0x27, 0x1E, 0xCE, 0x6E, 0xC3, 0x33, 0x84, 0xA6, 0xB0, 0x9C, 0x0D, 0x38, 0xBD, - 0x8D, 0x4E, 0xE1, 0x2E, 0xF2, 0x82, 0x0A, 0xE0, 0x3C, 0xDD, 0x3D, 0xE3, 0x3C, 0xA1, 0x16, 0xD9, - 0x51, 0x5A, 0xD4, 0x18, 0xF4, 0x02, 0x1E, 0x24, 0x5F, 0xB1, 0x1C, 0x24, 0x36, 0x3C, 0x42, 0x00, - 0xB8, 0xB4, 0x09, 0x1E, 0xBE, 0xBA, 0xFD, 0xC6, 0x6C, 0xED, 0xF1, 0x4F, 0xB7, 0xEE, 0x61, 0x88, - 0x8E, 0xC3, 0x74, 0x5C, 0x67, 0x66, 0x5B, 0x33, 0x8C, 0x04, 0xAD, 0x7D, 0xED, 0x7C, 0xC2, 0xC3, - 0x34, 0x7A, 0x2C, 0x34, 0x8F, 0x7B, 0x61, 0x26, 0x6A, 0x8F, 0x7F, 0x7C, 0x74, 0x6F, 0xBF, 0x43, - 0x1D, 0x8D, 0x3B, 0x13, 0xA2, 0xE0, 0x31, 0x46, 0x0D, 0x07, 0x36, 0x96, 0xE0, 0xD8, 0x0A, 0x07, - 0xB9, 0x48, 0x68, 0xEB, 0x18, 0x16, 0x8A, 0x26, 0x3E, 0x92, 0x74, 0x53, 0x83, 0x48, 0x4E, 0xD8, - 0x12, 0x11, 0xEA, 0x69, 0x3A, 0x42, 0x81, 0xAA, 0xBC, 0xA0, 0xB5, 0x77, 0xE9, 0x79, 0xAE, 0xF7, - 0xAF, 0xBD, 0xE7, 0xD8, 0xE8, 0xF9, 0xDE, 0xBF, 0x4F, 0xB5, 0xBD, 0xE7, 0xF1, 0x50, 0x75, 0x97, - 0x8E, 0x29, 0x4C, 0x63, 0x0B, 0x45, 0x8D, 0x2D, 0x62, 0x1A, 0x5B, 0xDC, 0xAF, 0xC6, 0xE2, 0x9F, - 0x8C, 0xAD, 0xA3, 0xB5, 0xF8, 0x27, 0x5A, 0x73, 0x34, 0x57, 0x08, 0xCF, 0x95, 0xC6, 0xB5, 0xB5, - 0x90, 0x69, 0xAB, 0x8A, 0x9A, 0xD8, 0x18, 0x0E, 0xDE, 0x43, 0xBC, 0xB7, 0x3F, 0xBC, 0xFB, 0x16, - 0xC7, 0x02, 0xB9, 0xCA, 0x42, 0x8D, 0xA5, 0xB3, 0x2D, 0x09, 0x06, 0x4C, 0x0E, 0x12, 0x23, 0x53, - 0x22, 0x49, 0x78, 0xBE, 0xA7, 0xB5, 0x28, 0x4A, 0x4C, 0x11, 0x0A, 0x0C, 0x81, 0x8F, 0x2C, 0x6A, - 0xBE, 0x8B, 0xA3, 0x89, 0x70, 0xDE, 0x08, 0x2A, 0xC7, 0x16, 0x10, 0x40, 0x49, 0x89, 0x0C, 0xF3, - 0x96, 0xC3, 0xC4, 0x06, 0xBD, 0xC6, 0x5D, 0x84, 0xFA, 0xAB, 0xAF, 0x1A, 0xD4, 0x44, 0x4C, 0x8F, - 0x62, 0x9B, 0x5F, 0x28, 0x1D, 0x1E, 0xF9, 0x95, 0x04, 0xC4, 0x3F, 0x05, 0x22, 0x31, 0x70, 0x3E, - 0x62, 0x94, 0xC0, 0x72, 0x2B, 0xC1, 0x42, 0x47, 0x1A, 0x25, 0x1C, 0xF4, 0xF3, 0x11, 0x19, 0x18, - 0xD4, 0xA8, 0xA0, 0xDF, 0x6B, 0x90, 0x60, 0x10, 0x63, 0x9A, 0x12, 0x12, 0xF1, 0xAD, 0x81, 0x6C, - 0x3C, 0x6A, 0xC4, 0x88, 0x37, 0xFC, 0x4B, 0xF0, 0xF0, 0x31, 0x54, 0x09, 0x0D, 0x7F, 0x3B, 0x7D, - 0x26, 0x16, 0x35, 0x62, 0xF8, 0x0B, 0xE1, 0x65, 0x3C, 0xF1, 0x31, 0x5B, 0x8D, 0x27, 0xFE, 0x1E, - 0xF3, 0x6C, 0x3C, 0x8A, 0xB2, 0xE1, 0xEF, 0x0E, 0x97, 0x59, 0x1D, 0x4B, 0x11, 0x72, 0x1D, 0x83, - 0x35, 0x01, 0x60, 0x5E, 0x96, 0x7E, 0xD1, 0x3B, 0xED, 0x46, 0x18, 0x78, 0x46, 0x91, 0x87, 0x81, - 0x37, 0x49, 0x63, 0x10, 0xD1, 0xE1, 0x01, 0x72, 0xBB, 0x87, 0x88, 0x42, 0x90, 0xA3, 0xAB, 0x45, - 0x21, 0x48, 0xBB, 0x45, 0xF8, 0x09, 0x61, 0x32, 0xC2, 0x0F, 0x2D, 0x68, 0xB0, 0x2F, 0x18, 0xE7, - 0xC9, 0x3F, 0xFC, 0x20, 0xB0, 0x4C, 0x89, 0x88, 0x03, 0xD2, 0x79, 0x25, 0x4B, 0xE2, 0xDF, 0xBE, - 0x4D, 0x19, 0x12, 0x2D, 0x96, 0xDC, 0xFA, 0x6A, 0xA1, 0xEB, 0xD6, 0xCF, 0xC0, 0x40, 0xE7, 0x0E, - 0x6A, 0xB9, 0x19, 0xFF, 0x58, 0xAC, 0x04, 0x09, 0xCC, 0x39, 0x94, 0x50, 0xF0, 0x2F, 0x66, 0xCA, - 0x18, 0xA1, 0x1F, 0x54, 0x54, 0x62, 0x45, 0x7C, 0x3C, 0x51, 0x46, 0x07, 0x9D, 0xDE, 0xE4, 0x29, - 0x85, 0x7F, 0xA2, 0x2E, 0x4B, 0x23, 0x6B, 0xD5, 0x21, 0x57, 0x7C, 0x8E, 0x4D, 0x32, 0xEC, 0x56, - 0x9C, 0x15, 0x3E, 0xCC, 0x10, 0xBD, 0xF8, 0x28, 0xE6, 0xE2, 0xC4, 0x96, 0xA6, 0xA2, 0xC4, 0xEE, - 0x18, 0x01, 0x24, 0x47, 0xD3, 0x4D, 0x40, 0xFC, 0x0E, 0xD6, 0x0F, 0x42, 0xE1, 0x6C, 0xDD, 0xEA, - 0x38, 0x40, 0x00, 0x45, 0xB8, 0x1F, 0x8F, 0x55, 0x2C, 0x70, 0x6C, 0xE1, 0x62, 0x97, 0xB3, 0xD0, - 0xB1, 0xBB, 0x19, 0x18, 0x79, 0x7A, 0x9B, 0x84, 0xC0, 0x8B, 0x59, 0xD8, 0x68, 0x8D, 0x28, 0x86, - 0xAB, 0x3F, 0x1A, 0x6D, 0x27, 0xB9, 0xBC, 0x03, 0xB6, 0xAC, 0x84, 0x02, 0xE9, 0x60, 0x89, 0x3E, - 0x2A, 0x7B, 0xCD, 0x60, 0x16, 0xAA, 0xED, 0x89, 0x35, 0xA5, 0xBD, 0xD3, 0xAD, 0x7A, 0x06, 0x40, - 0x70, 0xAB, 0xD2, 0x5E, 0x30, 0x1A, 0x4F, 0xA3, 0x62, 0x89, 0xA6, 0x4D, 0x3D, 0x62, 0x7C, 0xFE, - 0x2A, 0x81, 0x8C, 0x56, 0xFF, 0x43, 0x4C, 0xEC, 0x1A, 0x16, 0x05, 0x53, 0x97, 0xD8, 0x13, 0x37, - 0x6D, 0xD7, 0x21, 0xF2, 0x5E, 0x13, 0xD5, 0x11, 0xDE, 0x11, 0x3F, 0x33, 0xC9, 0xDC, 0xD8, 0xD8, - 0x41, 0x04, 0xE6, 0x91, 0x60, 0xE3, 0x39, 0xBC, 0x5A, 0xB2, 0x3D, 0xB9, 0x92, 0x96, 0xE9, 0x1A, - 0xB4, 0xCD, 0xC3, 0x43, 0xED, 0x65, 0x10, 0x18, 0xA0, 0x00, 0x5C, 0x66, 0x5D, 0xA2, 0x7C, 0x34, - 0x83, 0x17, 0x7C, 0x5D, 0x0F, 0x8D, 0x12, 0xEB, 0xCF, 0x1E, 0x70, 0x4D, 0xBD, 0xD1, 0x07, 0x10, - 0xE1, 0xA4, 0x14, 0x55, 0xE7, 0x3F, 0x1B, 0xE2, 0xDD, 0x7E, 0xA0, 0x02, 0x73, 0xBD, 0x97, 0xE0, - 0x8B, 0x7B, 0x9D, 0x68, 0xA9, 0x64, 0x8F, 0xD5, 0x37, 0x3B, 0x80, 0xEA, 0x12, 0xFA, 0x00, 0x1D, - 0x47, 0x36, 0xCF, 0xB8, 0x09, 0xF5, 0xAE, 0x9D, 0x9F, 0x9F, 0x73, 0x65, 0xA4, 0x0B, 0xAA, 0xD0, - 0xC2, 0x75, 0x3E, 0x93, 0xDB, 0xCD, 0x1A, 0xC4, 0x1F, 0x95, 0x48, 0x53, 0x45, 0x5B, 0x2E, 0x1D, - 0xD2, 0x81, 0x96, 0x17, 0xBC, 0x4C, 0xD6, 0x1B, 0x48, 0x1A, 0x45, 0x2A, 0xA0, 0xD6, 0x89, 0x9E, - 0xF8, 0xD5, 0x56, 0xA3, 0xBB, 0x27, 0xF2, 0x33, 0x49, 0x79, 0x99, 0x13, 0xC8, 0x85, 0x27, 0x86, - 0xAE, 0x54, 0x0F, 0x4F, 0x92, 0xA8, 0xEE, 0xF6, 0x9F, 0x44, 0x91, 0x61, 0xB3, 0x36, 0x8D, 0x80, - 0x24, 0x83, 0x43, 0x68, 0x0B, 0xE2, 0xE6, 0xCA, 0x0D, 0x48, 0x2A, 0x62, 0x58, 0x8E, 0x15, 0x58, - 0x86, 0xFD, 0x31, 0xB2, 0xC6, 0x9D, 0xBA, 0xBF, 0xC4, 0xC7, 0x4B, 0xF8, 0xFF, 0x56, 0x85, 0x57, - 0xAD, 0x2A, 0xB9, 0x65, 0x21, 0x61, 0x3C, 0x88, 0xAC, 0x24, 0x2E, 0x87, 0x44, 0x58, 0xE0, 0xF7, - 0x45, 0x4F, 0x4F, 0x9F, 0xD2, 0xA3, 0x27, 0xA1, 0xD2, 0x44, 0xF4, 0x38, 0xD7, 0xA2, 0x1B, 0x29, - 0x05, 0x6F, 0xE3, 0x4E, 0xE1, 0x10, 0xC8, 0x63, 0x18, 0x98, 0x6F, 0x85, 0xEA, 0x5D, 0xC3, 0x54, - 0x17, 0x6D, 0xE1, 0xFF, 0xA3, 0xFE, 0x23, 0x8A, 0xFA, 0xBB, 0x0B, 0xF1, 0x39, 0xB6, 0x9D, 0xF2, - 0x00, 0x06, 0x27, 0x5F, 0x74, 0x79, 0xBE, 0x77, 0xA0, 0xC9, 0x57, 0x55, 0x52, 0x69, 0xC5, 0xD2, - 0x32, 0x19, 0xC9, 0x91, 0x5D, 0xA1, 0x84, 0x70, 0x61, 0x14, 0x97, 0x0E, 0x71, 0x1D, 0xB1, 0xB5, - 0xC7, 0x56, 0x6D, 0x69, 0x34, 0xBE, 0x8B, 0x12, 0x92, 0xA5, 0x7B, 0x9D, 0x07, 0xE9, 0x41, 0xCC, - 0xB9, 0x22, 0x29, 0xE0, 0x10, 0xDA, 0xB4, 0x7C, 0x63, 0x6A, 0x17, 0x77, 0xCD, 0xDB, 0x99, 0x7C, - 0x28, 0x80, 0x06, 0xE2, 0x0A, 0x80, 0x06, 0x1E, 0xF5, 0x99, 0x18, 0x5A, 0xE2, 0x14, 0x61, 0x15, - 0x64, 0xE5, 0x22, 0x9E, 0x1B, 0xE0, 0xC4, 0x49, 0xCC, 0x2C, 0x90, 0x96, 0x08, 0xB1, 0xF1, 0xCB, - 0x00, 0x91, 0x3C, 0x3D, 0xD7, 0x9C, 0x8D, 0x6D, 0x83, 0x05, 0x22, 0x0B, 0x60, 0x81, 0xF1, 0xBB, - 0xD2, 0x00, 0xFD, 0xE7, 0x8D, 0x66, 0x21, 0xE5, 0x09, 0x09, 0x3C, 0x7B, 0x96, 0xC4, 0x86, 0xCB, - 0xB7, 0x2C, 0x35, 0x0F, 0x7B, 0x63, 0xED, 0xD9, 0xDB, 0x74, 0xA3, 0x51, 0x96, 0x93, 0x04, 0x43, - 0xF5, 0xD3, 0x84, 0xE0, 0x63, 0x19, 0x0E, 0x10, 0x62, 0x99, 0x54, 0x40, 0xB8, 0x49, 0x43, 0xDF, - 0x5A, 0xE9, 0x7A, 0x41, 0xAD, 0xBE, 0x45, 0xF8, 0x1E, 0x9D, 0x7D, 0x90, 0x3F, 0x1A, 0x73, 0x74, - 0x41, 0x64, 0x3B, 0x61, 0x57, 0x71, 0x8C, 0x8B, 0x04, 0x46, 0x64, 0x2C, 0x45, 0x37, 0xFE, 0x68, - 0x07, 0xD0, 0x14, 0x77, 0xC8, 0xC4, 0x06, 0xEF, 0xED, 0xD1, 0x9F, 0x76, 0xBC, 0xDD, 0x30, 0x97, - 0x82, 0xEB, 0xE9, 0xA7, 0x05, 0x34, 0x97, 0x31, 0x46, 0xD1, 0x5D, 0x4F, 0x91, 0x25, 0x4A, 0x02, - 0x1C, 0xE6, 0xA1, 0x9A, 0x1B, 0x33, 0xF2, 0xC9, 0x23, 0x33, 0x77, 0xE1, 0x58, 0xBF, 0x13, 0x19, - 0x42, 0xE6, 0x50, 0x2D, 0xE2, 0x78, 0xAE, 0x98, 0x66, 0x23, 0x72, 0xEE, 0x2B, 0xC9, 0xEB, 0x99, - 0x3D, 0x69, 0x3A, 0xB8, 0xD5, 0x27, 0x0B, 0x37, 0x1F, 0xF8, 0x56, 0x70, 0xBB, 0xDD, 0xCF, 0x44, - 0x6B, 0xF7, 0x04, 0xF5, 0xD0, 0xF4, 0x0D, 0x6E, 0xD0, 0x09, 0x79, 0x08, 0x2F, 0x24, 0x93, 0x50, - 0xE1, 0x9E, 0xE1, 0x0A, 0x58, 0xDC, 0x5E, 0xD8, 0x50, 0x19, 0x8D, 0x93, 0x91, 0x41, 0xDE, 0xD3, - 0xC8, 0xD1, 0xC3, 0x61, 0x43, 0x1A, 0xDF, 0x6B, 0x0E, 0x1A, 0x39, 0x38, 0xD9, 0xC6, 0x97, 0x34, - 0xD2, 0xCD, 0x74, 0x65, 0x05, 0x12, 0x84, 0x7B, 0xBD, 0xBD, 0x32, 0xE3, 0x4F, 0xDC, 0x5B, 0x59, - 0xC4, 0xA3, 0xA9, 0x39, 0x20, 0x4A, 0xAC, 0xE8, 0xCD, 0xD8, 0x06, 0xCF, 0x17, 0x30, 0xFD, 0xC6, - 0x75, 0x3A, 0x54, 0x70, 0x6A, 0x81, 0x9C, 0xA1, 0x60, 0xFB, 0x3A, 0x28, 0x8A, 0xE4, 0xCE, 0x0E, - 0xB1, 0x9B, 0x22, 0x99, 0xC9, 0xC7, 0x37, 0x14, 0xFC, 0xEA, 0x11, 0x80, 0xF3, 0xB1, 0x9A, 0xA8, - 0x7D, 0xF9, 0x07, 0x45, 0x71, 0xA7, 0xCD, 0x21, 0x5A, 0xF8, 0x4B, 0x62, 0xD2, 0xCA, 0x57, 0xB0, - 0xF1, 0x4F, 0x35, 0x5C, 0x14, 0x4F, 0xEC, 0xE4, 0xB8, 0xFB, 0x35, 0xB4, 0x90, 0x70, 0xB0, 0x29, - 0x9C, 0x6C, 0xD0, 0x0D, 0x3F, 0xF9, 0xF3, 0x0C, 0x96, 0x9E, 0x4B, 0x0A, 0x4B, 0xF8, 0x63, 0x91, - 0xC4, 0xEE, 0x40, 0x4E, 0x03, 0xDD, 0x7C, 0x07, 0xD9, 0x4B, 0xCA, 0x4C, 0xF7, 0xF9, 0x34, 0x09, - 0x34, 0x60, 0x8A, 0x90, 0xC7, 0x74, 0x84, 0x93, 0x21, 0x26, 0xA6, 0x84, 0x84, 0x19, 0x33, 0x9C, - 0x97, 0xE2, 0xDD, 0x30, 0x3C, 0x0B, 0x08, 0x65, 0xF1, 0x9B, 0x0F, 0x93, 0x9B, 0xFD, 0x27, 0xA1, - 0x18, 0xB6, 0x71, 0x60, 0x07, 0x31, 0x04, 0x09, 0x11, 0x65, 0x89, 0x89, 0x1B, 0x4D, 0x72, 0x5E, - 0x96, 0x23, 0x33, 0xF6, 0x8B, 0x8D, 0x99, 0x74, 0xC0, 0xA4, 0x3D, 0xFF, 0x8B, 0x1A, 0xCD, 0xBF, - 0x0F, 0xD8, 0x20, 0x1B, 0x8B, 0x79, 0xFB, 0x65, 0x08, 0xDA, 0x9A, 0x24, 0x16, 0x12, 0x73, 0x6F, - 0xE9, 0xB2, 0xF8, 0x41, 0x80, 0xA3, 0xF8, 0x20, 0x29, 0xDD, 0x9A, 0x26, 0xC6, 0x73, 0xBA, 0x90, - 0x41, 0x89, 0x6C, 0x62, 0x73, 0x3C, 0x21, 0x1E, 0x69, 0x3E, 0x97, 0x29, 0x2E, 0x66, 0x5F, 0xCC, - 0x61, 0xAF, 0x2C, 0x72, 0x9D, 0x5B, 0x37, 0xA5, 0x7B, 0xB5, 0xA8, 0xBC, 0x22, 0x80, 0x8B, 0x70, - 0x6F, 0x5E, 0x21, 0x64, 0xB4, 0x8F, 0x2F, 0x86, 0x83, 0x6E, 0xD2, 0x53, 0x5B, 0x5C, 0xA5, 0x4D, - 0x13, 0xA0, 0x88, 0xB5, 0x18, 0x56, 0xEC, 0xDB, 0x4E, 0x93, 0x1F, 0x1F, 0x7C, 0xF2, 0xE0, 0xE9, - 0x28, 0xC7, 0x1A, 0xC7, 0xA0, 0xA9, 0xE7, 0x17, 0x03, 0xC7, 0x77, 0x04, 0xC6, 0x69, 0x37, 0xAE, - 0x14, 0x80, 0xA3, 0x6D, 0x8C, 0x31, 0x50, 0x31, 0x9E, 0xE5, 0x01, 0x42, 0x1B, 0xB6, 0x4D, 0x75, - 0x2F, 0xA6, 0x5F, 0x3F, 0x70, 0xD7, 0x1F, 0x28, 0x21, 0xA9, 0x40, 0x74, 0x4D, 0x17, 0x07, 0x3A, - 0x78, 0xBF, 0xC5, 0xD3, 0xA4, 0xB8, 0x6C, 0x93, 0xEB, 0xA9, 0x1F, 0x70, 0xE5, 0x40, 0x63, 0x78, - 0xF6, 0x92, 0x39, 0x2E, 0x5D, 0x54, 0x90, 0xF6, 0x80, 0x96, 0xD2, 0xF1, 0xBD, 0x19, 0x1B, 0x0E, - 0xC2, 0x4D, 0x7F, 0x18, 0xAD, 0xF0, 0xF0, 0x57, 0xD6, 0x27, 0x0E, 0xDF, 0x09, 0x9B, 0xDA, 0x2F, - 0xA4, 0xC5, 0x5D, 0xA7, 0x49, 0x89, 0x4A, 0x4A, 0xCC, 0xBF, 0x7D, 0x1C, 0x07, 0xD8, 0xD0, 0x87, - 0x11, 0x33, 0x66, 0x6F, 0x19, 0x61, 0x39, 0x12, 0x13, 0x8F, 0x83, 0x49, 0xE2, 0x63, 0x63, 0x19, - 0xDB, 0x31, 0xFA, 0xE2, 0xD3, 0x6C, 0x0A, 0xC3, 0xD7, 0x6B, 0x70, 0x3E, 0xF0, 0xF6, 0xEB, 0xD6, - 0xFE, 0x5D, 0x1E, 0x3B, 0x4C, 0x5C, 0x91, 0xED, 0xA8, 0x12, 0x41, 0x07, 0x0A, 0x39, 0xB6, 0x84, - 0x7C, 0xE4, 0xE8, 0xE2, 0x0E, 0x73, 0xE9, 0x88, 0x69, 0x4A, 0x96, 0x60, 0xCF, 0xB7, 0x45, 0xCB, - 0x32, 0xD5, 0x04, 0x82, 0x68, 0x08, 0xD8, 0x22, 0x36, 0x95, 0xA8, 0xC6, 0xEC, 0x42, 0x34, 0x10, - 0xB4, 0xC7, 0x7D, 0x30, 0x83, 0xF6, 0x64, 0x1E, 0x9F, 0x4A, 0x18, 0x99, 0x00, 0x42, 0x67, 0xCA, - 0x59, 0xC2, 0x99, 0x19, 0xCE, 0x95, 0x91, 0x58, 0xC2, 0x99, 0x01, 0x41, 0x01, 0xE1, 0x7E, 0xD3, - 0xD2, 0x59, 0x03, 0x9D, 0x3B, 0x00, 0x3B, 0xEB, 0xD0, 0x87, 0x61, 0x70, 0x46, 0x82, 0x36, 0x40, - 0x4F, 0x12, 0xB7, 0x97, 0x84, 0xBE, 0x80, 0x90, 0xDF, 0x67, 0x67, 0xAC, 0x41, 0xD8, 0xCB, 0xD4, - 0x35, 0x6F, 0x3B, 0xC6, 0x7A, 0x4D, 0x1C, 0xF3, 0x62, 0x69, 0xD9, 0x66, 0x8B, 0x81, 0xC6, 0xD6, - 0x31, 0x30, 0x2C, 0x12, 0xBA, 0xF5, 0x8D, 0x63, 0x05, 0x6F, 0xBE, 0x60, 0xD7, 0x5A, 0x7B, 0x7D, - 0x53, 0xEC, 0x5C, 0xE4, 0xCD, 0x3A, 0xA6, 0x67, 0x5C, 0x7F, 0x83, 0xFB, 0xA2, 0xA9, 0x39, 0x1C, - 0x74, 0x0F, 0xBA, 0xBC, 0x41, 0x00, 0xE9, 0x96, 0x10, 0x39, 0xE2, 0xC5, 0xFD, 0xA3, 0x3F, 0x7E, - 0xFF, 0x6D, 0x84, 0x37, 0x70, 0x5F, 0xB3, 0x4B, 0xAD, 0x3D, 0xBA, 0xB1, 0xFA, 0xF0, 0xB7, 0x35, - 0xEE, 0x57, 0x11, 0xC3, 0x4C, 0x4C, 0x8C, 0xB8, 0x67, 0x1A, 0x45, 0xC5, 0x9A, 0x7F, 0x15, 0x47, - 0x0A, 0x97, 0x1D, 0x18, 0x27, 0xD0, 0xDC, 0x5B, 0x32, 0x50, 0xB1, 0xA3, 0x1A, 0xC1, 0x91, 0x93, - 0xAF, 0x61, 0xA2, 0xFA, 0x0B, 0x31, 0x3C, 0xD0, 0xC7, 0x73, 0xAD, 0xA5, 0x77, 0xF5, 0xE7, 0x2D, - 0x7A, 0xFD, 0x1D, 0xB0, 0xB3, 0x6C, 0xED, 0x3F, 0xEF, 0xED, 0xEF, 0x77, 0x7C, 0xD0, 0x19, 0x69, - 0xB5, 0xFB, 0xA2, 0x09, 0xFC, 0xA1, 0x6D, 0x58, 0x27, 0xD9, 0xF7, 0xDF, 0xBA, 0x1B, 0xCF, 0xCF, - 0x6B, 0xF0, 0xCE, 0x72, 0x70, 0x24, 0xCE, 0x6B, 0xF2, 0x01, 0xA6, 0x2F, 0x8E, 0xB9, 0xD5, 0x44, - 0xA7, 0x1B, 0xC1, 0xC5, 0x9C, 0x91, 0xEE, 0x8F, 0x85, 0xA4, 0x3F, 0x96, 0xEE, 0xF3, 0x8C, 0x93, - 0x60, 0xC5, 0xBB, 0x25, 0x96, 0xA5, 0xEE, 0xE2, 0xC6, 0x11, 0xE5, 0x74, 0xBC, 0x6A, 0xB0, 0xA5, - 0xFF, 0x54, 0xC0, 0xE2, 0x59, 0xD2, 0x56, 0x2D, 0x5C, 0x25, 0x11, 0x95, 0x66, 0x58, 0xB9, 0x19, - 0x69, 0xB2, 0x60, 0x9C, 0x9E, 0x2D, 0x27, 0xB3, 0xCF, 0x8B, 0x0D, 0xF8, 0xF8, 0x4A, 0x44, 0x54, - 0x76, 0x0D, 0xA7, 0x9C, 0x61, 0xE8, 0x87, 0x29, 0x68, 0xDE, 0x78, 0x04, 0xB7, 0x63, 0x23, 0x18, - 0x9F, 0xAF, 0x16, 0x00, 0xD0, 0x49, 0x6A, 0x38, 0x8A, 0x69, 0x08, 0xB5, 0x4D, 0xB6, 0x24, 0x44, - 0x40, 0xBB, 0xFD, 0x30, 0x62, 0x21, 0x10, 0x9F, 0x75, 0x45, 0xBA, 0xDB, 0x9E, 0x5D, 0xA7, 0x03, - 0xD6, 0xD6, 0xAC, 0xFA, 0x2E, 0xA6, 0x2D, 0xF1, 0x70, 0x4E, 0xC4, 0x0F, 0xC9, 0x67, 0x9E, 0xC4, - 0x99, 0x17, 0x55, 0x82, 0x02, 0x88, 0x4F, 0x34, 0xC7, 0x8F, 0xB3, 0x4F, 0x14, 0xD9, 0x27, 0x9C, - 0x7D, 0x04, 0x88, 0x26, 0x9C, 0xC5, 0x25, 0x8B, 0xD0, 0x18, 0x7F, 0x7A, 0x15, 0x71, 0x76, 0x3D, - 0xCD, 0xA5, 0x93, 0x97, 0x12, 0x62, 0xEC, 0xE5, 0x03, 0x40, 0xFB, 0x15, 0xF8, 0x43, 0x9C, 0xAD, - 0xEB, 0xA9, 0x1A, 0x5B, 0xA2, 0x14, 0x81, 0x00, 0x11, 0x5B, 0xF2, 0x82, 0x85, 0x60, 0xE5, 0x35, - 0x09, 0xF8, 0x23, 0x7C, 0x86, 0x63, 0x6A, 0x73, 0xCF, 0x58, 0x11, 0xFC, 0x62, 0x7B, 0x48, 0xAC, - 0x49, 0xEF, 0x17, 0xE6, 0x7E, 0xAC, 0x59, 0x8C, 0xC9, 0xB0, 0xE4, 0x51, 0x08, 0x1A, 0xB6, 0x8C, - 0x41, 0x87, 0x74, 0xE4, 0x42, 0x8B, 0x46, 0x2C, 0x83, 0x0B, 0x4F, 0x95, 0x84, 0x15, 0xB6, 0x8E, - 0x1C, 0x21, 0x42, 0x20, 0x4A, 0x26, 0xA3, 0x74, 0xA9, 0x8C, 0xCD, 0x24, 0x18, 0xB3, 0xA9, 0xF9, - 0x42, 0xBC, 0x41, 0xC8, 0x52, 0xA2, 0x4D, 0xE8, 0x20, 0x0C, 0x3E, 0x8B, 0xCC, 0x42, 0x52, 0xD8, - 0x42, 0xA2, 0xFE, 0xDE, 0x26, 0x58, 0x9E, 0xE0, 0x2F, 0x65, 0xBC, 0xF8, 0xE6, 0x6B, 0xCD, 0xF5, - 0x34, 0xDB, 0xBD, 0x26, 0xB8, 0x28, 0x28, 0x36, 0x90, 0x69, 0x53, 0x02, 0x01, 0x8E, 0xB0, 0x22, - 0x13, 0xEE, 0x8F, 0x09, 0x96, 0x96, 0x0F, 0x73, 0x62, 0x7C, 0x75, 0x28, 0x79, 0xAA, 0x87, 0xA3, - 0x53, 0x21, 0x7B, 0xDB, 0x25, 0xF4, 0x84, 0x38, 0x19, 0x4C, 0x24, 0xCB, 0xA7, 0x9C, 0xC7, 0xAD, - 0xC0, 0x92, 0x57, 0xD6, 0x2A, 0x21, 0xC2, 0xF0, 0xF6, 0xA3, 0x95, 0xA2, 0x9C, 0x81, 0x42, 0x41, - 0x86, 0x60, 0x91, 0x2C, 0x23, 0x5E, 0xB7, 0xA4, 0x29, 0xAB, 0x1D, 0xE6, 0x68, 0x14, 0x4B, 0xE1, - 0xD2, 0x68, 0x9E, 0xAD, 0x15, 0x26, 0x71, 0x36, 0xCA, 0xB1, 0xDF, 0xD9, 0xA1, 0x78, 0x14, 0x8A, - 0x9D, 0x61, 0xF6, 0x36, 0x79, 0x72, 0x76, 0xB8, 0x0C, 0x56, 0xF6, 0xE4, 0xC9, 0xFF, 0x02, 0x49, - 0x60, 0xC8, 0xA8, 0x55, 0x0C, 0x01, 0x00 -}; - - -//File: index_ov5640.html.gz, Size: 9124 -#define index_ov5640_html_gz_len 9124 -const uint8_t index_ov5640_html_gz[] = { - 0x1F, 0x8B, 0x08, 0x08, 0xD9, 0x6C, 0x6A, 0x5E, 0x00, 0x03, 0x69, 0x6E, 0x64, 0x65, 0x78, 0x5F, - 0x6F, 0x76, 0x35, 0x36, 0x34, 0x30, 0x2E, 0x68, 0x74, 0x6D, 0x6C, 0x00, 0xED, 0x3D, 0x6B, 0x77, - 0xDB, 0xB6, 0x92, 0xDF, 0xF3, 0x2B, 0x18, 0xF5, 0x6E, 0x24, 0x9F, 0x58, 0xB6, 0xA8, 0x97, 0x1F, - 0xB1, 0x95, 0x4D, 0x1C, 0x27, 0xE9, 0xB9, 0x4D, 0x6F, 0x1A, 0xA7, 0x69, 0x7B, 0xBA, 0x3D, 0x29, - 0x25, 0x41, 0x12, 0x1B, 0x8A, 0xD4, 0x25, 0x29, 0xCB, 0x6E, 0x8E, 0x7F, 0xC7, 0xFE, 0xA0, 0xFD, - 0x63, 0x3B, 0x03, 0x80, 0x24, 0x48, 0x81, 0x24, 0x48, 0x4A, 0xB2, 0xDB, 0x5D, 0xE5, 0x9C, 0x98, - 0x0F, 0xCC, 0x60, 0xDE, 0x18, 0x0C, 0x40, 0xF2, 0xEC, 0xF1, 0xD8, 0x19, 0xF9, 0xB7, 0x0B, 0xA2, - 0xCD, 0xFC, 0xB9, 0x35, 0x78, 0x74, 0xC6, 0xFE, 0x68, 0xF0, 0x3B, 0x9B, 0x11, 0x63, 0xCC, 0x0E, - 0xE9, 0xE9, 0x9C, 0xF8, 0x86, 0x36, 0x9A, 0x19, 0xAE, 0x47, 0xFC, 0xF3, 0xDA, 0xD2, 0x9F, 0x34, - 0x8F, 0x6B, 0xC9, 0xDB, 0xB6, 0x31, 0x27, 0xE7, 0xB5, 0x6B, 0x93, 0xAC, 0x16, 0x8E, 0xEB, 0xD7, - 0xB4, 0x91, 0x63, 0xFB, 0xC4, 0x86, 0xE6, 0x2B, 0x73, 0xEC, 0xCF, 0xCE, 0xC7, 0xE4, 0xDA, 0x1C, - 0x91, 0x26, 0x3D, 0xD9, 0x37, 0x6D, 0xD3, 0x37, 0x0D, 0xAB, 0xE9, 0x8D, 0x0C, 0x8B, 0x9C, 0xEB, - 0x22, 0x2E, 0xDF, 0xF4, 0x2D, 0x32, 0xB8, 0xBC, 0x7A, 0xDF, 0x69, 0x6B, 0xFF, 0xFA, 0xD4, 0xEB, - 0x77, 0x5B, 0x67, 0x87, 0xEC, 0x5A, 0xD4, 0xC6, 0xF3, 0x6F, 0xC5, 0x73, 0xFC, 0x0D, 0x9D, 0xF1, - 0xAD, 0xF6, 0x35, 0x76, 0x09, 0x7F, 0x13, 0x20, 0xA2, 0x39, 0x31, 0xE6, 0xA6, 0x75, 0x7B, 0xAA, - 0xBD, 0x70, 0xA1, 0xCF, 0xFD, 0xB7, 0xC4, 0xBA, 0x26, 0xBE, 0x39, 0x32, 0xF6, 0x3D, 0xC3, 0xF6, - 0x9A, 0x1E, 0x71, 0xCD, 0xC9, 0xB3, 0x35, 0xC0, 0xA1, 0x31, 0xFA, 0x32, 0x75, 0x9D, 0xA5, 0x3D, - 0x3E, 0xD5, 0xBE, 0xD1, 0x8F, 0xF1, 0xDF, 0x7A, 0xA3, 0x91, 0x63, 0x39, 0x2E, 0xDC, 0xBF, 0x7C, - 0x8D, 0xFF, 0xD6, 0xEF, 0xD3, 0xDE, 0x3D, 0xF3, 0x4F, 0x72, 0xAA, 0xE9, 0xFD, 0xC5, 0x4D, 0xEC, - 0xFE, 0xDD, 0xA3, 0xD8, 0xE9, 0xAC, 0x9D, 0x46, 0x3D, 0x87, 0x3F, 0xCE, 0x86, 0xF7, 0xC8, 0xC8, - 0x37, 0x1D, 0xFB, 0x60, 0x6E, 0x98, 0xB6, 0x04, 0xD3, 0xD8, 0xF4, 0x16, 0x96, 0x01, 0x32, 0x98, - 0x58, 0x24, 0x13, 0xCF, 0x37, 0x73, 0x62, 0x2F, 0xF7, 0x73, 0xB0, 0x21, 0x92, 0xE6, 0xD8, 0x74, - 0x59, 0xAB, 0x53, 0x94, 0xC3, 0x72, 0x6E, 0xE7, 0xA2, 0xCD, 0xA2, 0xCB, 0x76, 0x6C, 0x22, 0x11, - 0x20, 0x76, 0xB4, 0x72, 0x8D, 0x05, 0x36, 0xC0, 0xBF, 0xEB, 0x4D, 0xE6, 0xA6, 0xCD, 0x8C, 0xEA, - 0x54, 0xEB, 0x74, 0x5B, 0x8B, 0x9B, 0x1C, 0x55, 0x76, 0xFA, 0xF8, 0x6F, 0xBD, 0xD1, 0xC2, 0x18, - 0x8F, 0x4D, 0x7B, 0x7A, 0xAA, 0x1D, 0x4B, 0x51, 0x38, 0xEE, 0x98, 0xB8, 0x4D, 0xD7, 0x18, 0x9B, - 0x4B, 0xEF, 0x54, 0xEB, 0xCA, 0xDA, 0xCC, 0x0D, 0x77, 0x0A, 0xB4, 0xF8, 0x0E, 0x10, 0xDB, 0xD4, - 0xA5, 0x94, 0xF0, 0x26, 0xAE, 0x39, 0x9D, 0xF9, 0xA0, 0xD2, 0xB5, 0x36, 0x49, 0xA1, 0x71, 0x17, - 0xCA, 0xD3, 0x67, 0xA6, 0xDC, 0xE4, 0x52, 0x33, 0x2C, 0x73, 0x6A, 0x37, 0x4D, 0x9F, 0xCC, 0x81, - 0x1D, 0xCF, 0x77, 0x89, 0x3F, 0x9A, 0x65, 0x91, 0x32, 0x31, 0xA7, 0x4B, 0x97, 0x48, 0x08, 0x09, - 0xE5, 0x96, 0xC1, 0x30, 0xDC, 0x5C, 0xBF, 0xD5, 0x5C, 0x91, 0xE1, 0x17, 0xD3, 0x6F, 0x72, 0x99, - 0x0C, 0xC9, 0xC4, 0x71, 0x89, 0xB4, 0x65, 0xD0, 0xC2, 0x72, 0x46, 0x5F, 0x9A, 0x9E, 0x6F, 0xB8, - 0xBE, 0x0A, 0x42, 0x63, 0xE2, 0x13, 0x37, 0x1F, 0x1F, 0x41, 0xAB, 0xC8, 0xC7, 0x96, 0xDE, 0x2D, - 0x6F, 0x60, 0xDA, 0x96, 0x69, 0x13, 0x75, 0xF2, 0xD2, 0xFA, 0x8D, 0xA3, 0x63, 0xAD, 0x14, 0x14, - 0x63, 0xCE, 0xA7, 0x59, 0x56, 0x42, 0x79, 0x5D, 0xEF, 0x8C, 0xFB, 0x8D, 0xDE, 0x6A, 0xFD, 0xC7, - 0xFA, 0xCD, 0x19, 0x61, 0x66, 0x6A, 0x2C, 0x7D, 0xA7, 0xBA, 0x47, 0xAC, 0xB9, 0x55, 0x82, 0x8F, - 0xFF, 0x9C, 0x93, 0xB1, 0x69, 0x68, 0x0D, 0xC1, 0x9D, 0x8F, 0x5B, 0x60, 0x53, 0x7B, 0x9A, 0x61, - 0x8F, 0xB5, 0x86, 0xE3, 0x9A, 0xE0, 0x08, 0x06, 0x0D, 0x37, 0x16, 0x5C, 0x81, 0x81, 0x63, 0x41, - 0xF6, 0x24, 0x2C, 0x67, 0xF8, 0x8C, 0x28, 0x11, 0xB9, 0xDB, 0xE0, 0x4F, 0x21, 0xE4, 0xE0, 0x2F, - 0xD7, 0x81, 0x24, 0x3C, 0x52, 0xF4, 0x59, 0xFA, 0x12, 0x29, 0x4C, 0xD3, 0x19, 0xFE, 0xE6, 0xC6, - 0x4D, 0x33, 0x53, 0x77, 0x41, 0xA3, 0x40, 0x87, 0x30, 0xCC, 0x8E, 0x1A, 0xD0, 0xF4, 0x7A, 0xA6, - 0x35, 0x35, 0x8C, 0x92, 0x7B, 0x72, 0x18, 0x8E, 0x54, 0xAE, 0x72, 0xFC, 0x89, 0x46, 0x51, 0x80, - 0x5D, 0x39, 0xAB, 0x51, 0xEC, 0x60, 0xFF, 0x64, 0x36, 0xC4, 0x38, 0x49, 0x8D, 0x22, 0xF8, 0x53, - 0x8F, 0x24, 0x11, 0xB2, 0xDC, 0x68, 0x22, 0x41, 0x9C, 0x1E, 0x51, 0xD6, 0xF0, 0xA6, 0x79, 0xB7, - 0x04, 0x6B, 0x36, 0x09, 0xAA, 0xD1, 0x45, 0x82, 0x38, 0x8B, 0x86, 0xDC, 0x28, 0x83, 0xBF, 0x3B, - 0x85, 0x7C, 0xE3, 0x9B, 0xE1, 0xD2, 0xF7, 0x1D, 0xDB, 0xAB, 0x34, 0x44, 0xA5, 0xF9, 0xD9, 0x1F, - 0x4B, 0xCF, 0x37, 0x27, 0xB7, 0x4D, 0xEE, 0xD2, 0xE0, 0x67, 0x0B, 0x03, 0x52, 0xC8, 0x21, 0xF1, - 0x57, 0x84, 0x64, 0xA7, 0x1B, 0xB6, 0x71, 0x0D, 0x71, 0x67, 0x3A, 0xB5, 0x64, 0xB6, 0x37, 0x5A, - 0xBA, 0x1E, 0xE6, 0x6D, 0x0B, 0xC7, 0x04, 0xC4, 0xEE, 0x7A, 0xC7, 0x71, 0x1F, 0x54, 0xEC, 0xA8, - 0x39, 0x1A, 0x4A, 0xFA, 0x72, 0x96, 0x3E, 0xCA, 0x58, 0xAA, 0x09, 0x07, 0xD8, 0x31, 0xFD, 0x5B, - 0xE9, 0x3D, 0xEE, 0x89, 0x92, 0x3B, 0x81, 0x0B, 0x66, 0x0E, 0x0B, 0x71, 0xBA, 0x4E, 0x47, 0x33, - 0x32, 0xFA, 0x42, 0xC6, 0x4F, 0x73, 0xD3, 0xB0, 0xBC, 0xF4, 0xF0, 0xC0, 0xB4, 0x17, 0x4B, 0xBF, - 0x89, 0xE9, 0xD4, 0x62, 0x2B, 0x3A, 0xA7, 0x06, 0x19, 0xB0, 0xD8, 0x6E, 0x67, 0x25, 0x15, 0xBD, - 0xC5, 0x4D, 0xB6, 0x10, 0x44, 0x62, 0x07, 0x96, 0x31, 0x24, 0x56, 0x16, 0xC9, 0xDC, 0x19, 0x52, - 0xC2, 0x2E, 0x8F, 0x55, 0xE9, 0xB9, 0x1B, 0xA5, 0x2C, 0x1A, 0xBC, 0xBA, 0x47, 0xFF, 0xA1, 0x2C, - 0x47, 0x7A, 0xBC, 0x1F, 0xBB, 0xE4, 0x11, 0x0B, 0x1C, 0x2C, 0x71, 0x6D, 0x61, 0xA4, 0x26, 0xE3, - 0xD0, 0x62, 0x05, 0x54, 0x65, 0x76, 0xE9, 0x1A, 0xF6, 0x94, 0x40, 0x74, 0xB8, 0xD9, 0x0F, 0x0E, - 0xB3, 0xA7, 0x0A, 0x4A, 0x02, 0xC1, 0xE0, 0xDD, 0xCB, 0x9E, 0x9A, 0xB0, 0x10, 0xB1, 0xAF, 0x1D, - 0xB0, 0x83, 0x12, 0x79, 0x8A, 0xA0, 0xF1, 0x4C, 0x42, 0x74, 0xA9, 0xBD, 0xB0, 0x54, 0x45, 0xEA, - 0x4B, 0x71, 0x6B, 0x93, 0xA6, 0xFE, 0xB9, 0xC1, 0x22, 0x98, 0x04, 0x4E, 0x26, 0x79, 0xD3, 0xC8, - 0xC9, 0xA4, 0xD3, 0xEA, 0x74, 0x73, 0x73, 0x29, 0x29, 0x97, 0x89, 0xA9, 0xA4, 0x24, 0x98, 0x84, - 0x81, 0x26, 0x5F, 0x17, 0xA7, 0x33, 0xE7, 0x9A, 0xB8, 0x12, 0x45, 0x24, 0xC8, 0xED, 0x9E, 0x74, - 0xC7, 0x0A, 0xD8, 0x0C, 0x18, 0x0A, 0xAE, 0x65, 0x81, 0x36, 0x8E, 0xAE, 0xAD, 0x8F, 0xDA, 0x99, - 0x16, 0xCA, 0xD0, 0x1D, 0x80, 0x35, 0x18, 0x43, 0x8B, 0x8C, 0x33, 0x22, 0xF7, 0x98, 0x4C, 0x8C, - 0xA5, 0xE5, 0xE7, 0xC8, 0xDB, 0x68, 0xE1, 0xBF, 0xAC, 0x1E, 0xA9, 0x7B, 0xFD, 0x8A, 0x35, 0x90, - 0x73, 0xEA, 0x12, 0xBF, 0x49, 0xFA, 0x0C, 0x86, 0x55, 0x63, 0xB1, 0x20, 0x06, 0xB4, 0x1A, 0x91, - 0xB4, 0xD9, 0xAA, 0x52, 0x3A, 0x2D, 0x8F, 0x69, 0x4A, 0x73, 0xD4, 0x5C, 0x53, 0x0C, 0x13, 0xA5, - 0x42, 0x3C, 0x9F, 0x4E, 0x9C, 0xD1, 0x52, 0x36, 0x82, 0xAB, 0x99, 0xD4, 0x3A, 0xBE, 0xD3, 0x40, - 0x64, 0x9E, 0x65, 0x52, 0xC3, 0x5E, 0xDA, 0x36, 0x6A, 0xB4, 0xE9, 0xBB, 0xC0, 0xA6, 0xA4, 0x23, - 0x35, 0xC1, 0x95, 0xF2, 0xCE, 0x98, 0x60, 0xD3, 0xEA, 0x34, 0x09, 0x07, 0x94, 0x04, 0x8A, 0x30, - 0x86, 0x68, 0x9E, 0x03, 0x4C, 0x05, 0xA8, 0xAA, 0xC9, 0xC5, 0x9F, 0x2D, 0xE7, 0xB2, 0x9C, 0x21, - 0xE8, 0x4C, 0x87, 0x01, 0x8E, 0x75, 0xE7, 0x4E, 0x87, 0x46, 0xA3, 0xB5, 0xDF, 0xDA, 0xEF, 0xC0, - 0x7F, 0x92, 0xDC, 0x3D, 0xDB, 0xB8, 0xB8, 0x78, 0x53, 0x2C, 0x2F, 0x11, 0x7C, 0xF2, 0x4B, 0x28, - 0x69, 0x61, 0x2C, 0x57, 0x17, 0xEA, 0x9E, 0x14, 0xAF, 0xA5, 0xE8, 0x07, 0x39, 0x23, 0x4C, 0x8A, - 0x49, 0x17, 0x37, 0x44, 0x89, 0xB5, 0x14, 0x55, 0xF1, 0xDC, 0xF9, 0xB3, 0xC9, 0x86, 0xD7, 0xFF, - 0xF3, 0xD6, 0x2E, 0x88, 0xE2, 0x6F, 0x6D, 0xE9, 0x85, 0xE5, 0xE2, 0xDD, 0xB7, 0x6D, 0xB4, 0xD2, - 0xB5, 0xDE, 0xE4, 0xF9, 0x0C, 0x50, 0x68, 0x43, 0xC6, 0xE9, 0xC2, 0xC4, 0x2B, 0x35, 0xE7, 0x11, - 0xDA, 0x94, 0x90, 0xC1, 0xC4, 0xB4, 0xAC, 0xA6, 0xE5, 0xAC, 0xF2, 0x33, 0x91, 0x6C, 0x4B, 0x5E, - 0xB3, 0xD3, 0x7C, 0x93, 0x2F, 0x4B, 0xED, 0x12, 0x22, 0xD7, 0x5F, 0x82, 0xDA, 0xBF, 0xB7, 0xC3, - 0x65, 0xBA, 0x46, 0xB9, 0x81, 0xA2, 0x84, 0x3D, 0x56, 0xEB, 0x48, 0xC9, 0x94, 0x58, 0x26, 0x98, - 0x39, 0xAB, 0xF3, 0x56, 0xA6, 0x3F, 0x9A, 0x95, 0x98, 0x54, 0x2D, 0x1C, 0xCF, 0x64, 0xCB, 0x37, - 0x2E, 0xB1, 0x0C, 0xCC, 0xE0, 0x4B, 0xCD, 0xC6, 0x73, 0x27, 0x26, 0x22, 0xB8, 0x0A, 0x27, 0x54, - 0x74, 0x0F, 0xA7, 0x92, 0x72, 0xC0, 0x72, 0x87, 0xF4, 0x58, 0x2D, 0x37, 0xEB, 0x9C, 0x74, 0x3F, - 0xEE, 0x19, 0xF2, 0x46, 0x05, 0x22, 0x7A, 0x10, 0xB4, 0xA7, 0x2E, 0xB9, 0x55, 0x60, 0x66, 0x9F, - 0xFF, 0x3D, 0x65, 0xB5, 0xD2, 0xF2, 0x45, 0x00, 0x3A, 0x00, 0x70, 0x2B, 0x3A, 0xE8, 0x7A, 0x0A, - 0x5D, 0xA7, 0x77, 0xA9, 0x62, 0x8F, 0x61, 0x25, 0xB0, 0x56, 0x53, 0x08, 0x37, 0x19, 0x43, 0xA8, - 0xDC, 0x54, 0x83, 0xD1, 0x57, 0x7A, 0xD3, 0x22, 0x13, 0x3F, 0x65, 0xA1, 0x83, 0xE6, 0xA9, 0x9D, - 0xEC, 0xE8, 0xD6, 0x14, 0xEA, 0x04, 0xB9, 0x91, 0x23, 0x2C, 0xD8, 0xA5, 0x5B, 0x9F, 0x14, 0x33, - 0x46, 0xCF, 0xC2, 0xC8, 0xD3, 0x55, 0x12, 0xA4, 0xCF, 0x54, 0xCD, 0xD0, 0x66, 0xCE, 0x87, 0x7C, - 0x50, 0x0F, 0xF9, 0xB9, 0xD1, 0xEE, 0x4B, 0xD7, 0x11, 0x32, 0x1A, 0x67, 0x91, 0xC6, 0x2A, 0x5E, - 0x4A, 0x43, 0x56, 0xEA, 0x04, 0x59, 0x8C, 0x45, 0x52, 0x45, 0x65, 0x7B, 0x65, 0x56, 0x84, 0x59, - 0xAF, 0xD1, 0x64, 0x1A, 0xBB, 0x39, 0x37, 0x20, 0xED, 0x45, 0x73, 0x35, 0x00, 0xA3, 0x4C, 0x7F, - 0x2A, 0xE6, 0x2E, 0xD4, 0x13, 0xF5, 0x7E, 0x2B, 0xA7, 0xCB, 0x91, 0xE5, 0x78, 0xD9, 0x7E, 0x65, - 0x0C, 0x41, 0x7E, 0x4B, 0x5F, 0xD2, 0x11, 0xAF, 0x6A, 0x4A, 0x2B, 0x4F, 0xD4, 0xB8, 0xA5, 0x77, - 0x94, 0x86, 0xEE, 0x4C, 0x9F, 0xCA, 0x76, 0xC7, 0x84, 0xCC, 0xF5, 0x96, 0x34, 0xD2, 0x66, 0xD6, - 0xDF, 0x7C, 0x72, 0x03, 0xF3, 0x4D, 0x5C, 0xAB, 0x3B, 0xD5, 0x46, 0x44, 0x1E, 0x46, 0x63, 0x83, - 0x9C, 0xAE, 0x52, 0x04, 0xCC, 0xD4, 0xC3, 0xCC, 0x1C, 0x8F, 0x49, 0x66, 0x95, 0x13, 0xE7, 0xBC, - 0xD9, 0xA1, 0xD2, 0x90, 0x96, 0xD3, 0x0A, 0x68, 0xB2, 0x9D, 0xAE, 0xCA, 0xCC, 0xE1, 0x2A, 0x25, - 0xF4, 0xC5, 0x24, 0x24, 0x6D, 0x22, 0x54, 0x61, 0xE5, 0x21, 0x12, 0x15, 0x31, 0x26, 0x23, 0xC7, - 0x65, 0x8B, 0xB8, 0x29, 0x13, 0xFF, 0x72, 0x33, 0x2B, 0x44, 0x2E, 0x2B, 0xDD, 0x6D, 0x25, 0x74, - 0x64, 0x6E, 0x74, 0xD0, 0xB7, 0x1D, 0x57, 0xF8, 0x70, 0x9C, 0x56, 0x49, 0x8F, 0x27, 0x6C, 0x99, - 0xA4, 0x4A, 0x43, 0x60, 0xA8, 0x46, 0x14, 0x19, 0xC8, 0x01, 0x5B, 0xAD, 0x2B, 0x34, 0x41, 0x15, - 0x5D, 0x5A, 0x39, 0xE0, 0xAB, 0x4D, 0x7C, 0x61, 0xB0, 0x99, 0xB6, 0xDE, 0xB2, 0xC1, 0xC5, 0x37, - 0x6A, 0x01, 0xC9, 0x7E, 0x53, 0x45, 0x73, 0x4F, 0xF9, 0x63, 0x06, 0x91, 0xE1, 0x40, 0x1C, 0x6C, - 0xB7, 0x8A, 0xB7, 0x2A, 0x1B, 0x42, 0xCE, 0x0E, 0x85, 0xFD, 0x71, 0x67, 0x87, 0xD1, 0x56, 0xBE, - 0x33, 0xDC, 0x24, 0x27, 0x6E, 0xA3, 0xE3, 0xFD, 0x8C, 0x2C, 0xC3, 0xF3, 0xCE, 0x6B, 0xB8, 0xD9, - 0xAB, 0x16, 0xDF, 0x55, 0x77, 0x36, 0x36, 0xAF, 0x35, 0x73, 0x7C, 0x5E, 0xB3, 0x9C, 0xA9, 0x93, - 0xB8, 0x47, 0xEF, 0x33, 0x2D, 0xC3, 0x68, 0x7F, 0x5E, 0x8B, 0xAD, 0x38, 0xD6, 0x28, 0x54, 0x74, - 0xA9, 0x36, 0x78, 0xF2, 0xCD, 0xC9, 0xD1, 0x51, 0xFF, 0xD9, 0x13, 0x7B, 0xE8, 0x2D, 0xF8, 0xFF, - 0x1F, 0xD9, 0x02, 0xAD, 0x47, 0x7C, 0x1F, 0x6C, 0xCE, 0x3B, 0x3B, 0xA4, 0xD8, 0x12, 0x14, 0x1C, - 0x02, 0x09, 0x29, 0x44, 0xF1, 0x6C, 0x50, 0x46, 0x57, 0xD0, 0xC4, 0x83, 0x04, 0x67, 0x68, 0xB8, - 0x92, 0x26, 0xB4, 0x19, 0x9B, 0x6B, 0xD0, 0x18, 0x52, 0xA3, 0xCA, 0x18, 0x3A, 0x37, 0x49, 0xD2, - 0x29, 0x37, 0x5C, 0x53, 0xBC, 0x15, 0x19, 0xA7, 0x21, 0x04, 0x30, 0x0A, 0x8E, 0xEB, 0xAC, 0xD0, - 0x46, 0xDA, 0x28, 0x26, 0x7B, 0x6C, 0x7C, 0x33, 0xB2, 0xBE, 0x04, 0x4A, 0xAF, 0x05, 0xDA, 0xB0, - 0x1D, 0x9F, 0x8D, 0x24, 0x29, 0x5D, 0xC5, 0x58, 0xE5, 0x30, 0xC2, 0x6A, 0x21, 0xE3, 0x02, 0x44, - 0xDB, 0xA4, 0xD8, 0xD9, 0xB5, 0x6C, 0x4C, 0x14, 0x9B, 0xA0, 0xD0, 0x00, 0xB8, 0x36, 0xF8, 0xF9, - 0xE2, 0xBB, 0x7F, 0x6A, 0xEF, 0xDE, 0xFE, 0x29, 0xD5, 0x50, 0x1E, 0x51, 0x18, 0x9C, 0x15, 0x7A, - 0xA6, 0x60, 0x4C, 0x1F, 0x81, 0x4C, 0x6A, 0x5C, 0x33, 0x14, 0x03, 0x26, 0x43, 0x16, 0xB1, 0xA7, - 0xFE, 0xEC, 0xBC, 0xA6, 0xD7, 0x70, 0x77, 0x4B, 0x70, 0xD6, 0xAE, 0x69, 0x18, 0xB8, 0xE9, 0xC1, - 0xB5, 0x61, 0x2D, 0xF1, 0xA8, 0xA5, 0xC2, 0xEB, 0xBA, 0x69, 0x49, 0x9B, 0xF1, 0x88, 0x12, 0xCA, - 0x58, 0x88, 0xC0, 0x71, 0x29, 0xD7, 0x06, 0x57, 0xC4, 0x3F, 0x3B, 0x64, 0xB7, 0x72, 0xB4, 0x96, - 0xDD, 0x37, 0xB8, 0x30, 0x33, 0x87, 0x2C, 0x13, 0xCA, 0x52, 0xFC, 0xC4, 0x35, 0xE6, 0x04, 0xA5, - 0xA2, 0xA4, 0x79, 0x51, 0xEB, 0x21, 0x64, 0x6D, 0xF0, 0x81, 0xD0, 0x2C, 0x03, 0xC8, 0x50, 0x52, - 0xFC, 0x19, 0x4F, 0xE1, 0x63, 0xFD, 0x87, 0xF6, 0xCC, 0x97, 0xEC, 0x9A, 0x06, 0x33, 0x73, 0x05, - 0xB9, 0x3F, 0x6E, 0x36, 0xB5, 0xDE, 0xBB, 0xF7, 0x5A, 0xB3, 0xA9, 0xD0, 0xD8, 0x59, 0x50, 0x77, - 0x0A, 0xF4, 0x0F, 0x16, 0xC2, 0xA8, 0x21, 0x54, 0x3F, 0xEC, 0xA8, 0x36, 0xF8, 0xE1, 0xEA, 0xE7, - 0x37, 0x2F, 0x1A, 0xED, 0x5E, 0xBF, 0x75, 0xA3, 0x9F, 0xB4, 0x5B, 0x7B, 0x67, 0x87, 0x0C, 0xAE, - 0x78, 0x07, 0x60, 0x60, 0xEF, 0xB5, 0xD7, 0x6F, 0x5F, 0x35, 0xF4, 0xD6, 0x71, 0x55, 0x64, 0xFA, - 0x49, 0x6D, 0xF0, 0xD3, 0x0F, 0x11, 0x65, 0xFD, 0x56, 0x15, 0x64, 0xC7, 0xC0, 0x26, 0xD0, 0xC5, - 0x50, 0x75, 0xBB, 0x85, 0x50, 0xA1, 0xC8, 0x3B, 0xE5, 0x44, 0xAE, 0x1F, 0x41, 0xBF, 0x94, 0x87, - 0x56, 0xF7, 0xF8, 0x46, 0xEF, 0xF5, 0xBB, 0x15, 0x78, 0xE8, 0xA3, 0x74, 0x81, 0x90, 0xC6, 0x71, - 0xBF, 0x5B, 0x15, 0x57, 0x0F, 0x71, 0x81, 0x40, 0x8E, 0xDA, 0x20, 0x8F, 0xF6, 0x71, 0x15, 0xD1, - 0x76, 0x6B, 0x03, 0xAA, 0xF2, 0x13, 0x44, 0xD5, 0x2A, 0x86, 0x0A, 0x45, 0xDB, 0x2E, 0x29, 0xDA, - 0x4E, 0x6D, 0xF0, 0x23, 0x8A, 0x16, 0x2D, 0x03, 0x78, 0xA8, 0x64, 0x1E, 0x6D, 0x88, 0x52, 0x14, - 0x57, 0x1B, 0xED, 0xB6, 0xD5, 0xAE, 0x22, 0x5A, 0xBD, 0x36, 0x40, 0x71, 0x20, 0xA6, 0xA3, 0x4A, - 0x0E, 0x00, 0xDE, 0x44, 0x69, 0x02, 0x72, 0x6E, 0x8E, 0xFA, 0xC7, 0xE5, 0x31, 0x81, 0x27, 0x5D, - 0x7D, 0x02, 0x4C, 0xC7, 0x20, 0xA8, 0x4A, 0x6E, 0x04, 0x5E, 0x84, 0x78, 0xFA, 0xDD, 0xD6, 0x4D, - 0xB7, 0x8A, 0xCD, 0x80, 0x57, 0xBC, 0x45, 0x44, 0x80, 0xE4, 0xA6, 0x53, 0x45, 0x46, 0xE0, 0x12, - 0x17, 0xDF, 0xBE, 0x6E, 0x74, 0x81, 0xB1, 0xF6, 0x49, 0xBF, 0x3C, 0x1E, 0x70, 0x87, 0x1F, 0x90, - 0x20, 0x20, 0xE6, 0xA6, 0x5D, 0x2C, 0x3A, 0xC4, 0x11, 0x81, 0x33, 0x00, 0x3C, 0xE2, 0x28, 0x8D, - 0x02, 0xEC, 0xFA, 0x2D, 0x25, 0x06, 0x11, 0xE9, 0x47, 0x15, 0xB8, 0x02, 0xAB, 0xFE, 0x01, 0xC5, - 0x03, 0x48, 0x30, 0xE8, 0x55, 0x30, 0x45, 0x40, 0x44, 0x49, 0xD2, 0xFB, 0xD4, 0xD5, 0xCA, 0x63, - 0x02, 0x9B, 0x3E, 0xE9, 0xDF, 0x9C, 0xF4, 0xD5, 0x10, 0xE0, 0x88, 0x8F, 0xA3, 0x54, 0x56, 0x4E, - 0x90, 0x9D, 0x32, 0x64, 0xA5, 0x03, 0xFF, 0x5E, 0x1A, 0x16, 0xCC, 0x6F, 0x0A, 0x27, 0x03, 0x1C, - 0x0E, 0x64, 0xC2, 0x0E, 0xD4, 0xF2, 0x00, 0x81, 0x92, 0x70, 0xA3, 0x59, 0x6D, 0xD0, 0x55, 0xC8, - 0xB7, 0x62, 0x09, 0x39, 0x85, 0x8D, 0xD1, 0x4F, 0x93, 0x40, 0xB4, 0x3C, 0x4C, 0xFF, 0xC0, 0x25, - 0x3A, 0x35, 0x21, 0x82, 0x94, 0x4A, 0x34, 0x24, 0xB4, 0x1A, 0x37, 0xB5, 0x41, 0xBF, 0x93, 0x9B, - 0xA0, 0x95, 0x57, 0xC6, 0x90, 0xD6, 0x68, 0x6C, 0xE2, 0x79, 0x85, 0xF5, 0x11, 0x81, 0xD6, 0x06, - 0x2F, 0xC3, 0xE3, 0x2A, 0x5A, 0x69, 0xE6, 0x71, 0x4A, 0x61, 0x53, 0xD4, 0x22, 0x90, 0xC3, 0x34, - 0xD3, 0xEC, 0x70, 0xD5, 0x44, 0x9A, 0xD9, 0xAC, 0x62, 0xB6, 0xA9, 0x17, 0x9C, 0x4E, 0xBA, 0x86, - 0xE7, 0x17, 0xD6, 0x4A, 0x00, 0x08, 0x11, 0x9A, 0x1F, 0xDD, 0x9B, 0x46, 0x42, 0x52, 0xFE, 0x06, - 0xFA, 0xF0, 0x0C, 0x7F, 0xC9, 0xAA, 0x85, 0x85, 0x35, 0x12, 0x81, 0x42, 0x3E, 0x10, 0x1E, 0x57, - 0xD2, 0x4A, 0x95, 0xF0, 0x25, 0x90, 0xC3, 0xF5, 0x12, 0x84, 0xB0, 0xEE, 0x96, 0xF4, 0x92, 0x47, - 0x6D, 0x25, 0xBD, 0xCC, 0x0C, 0x77, 0x51, 0x2A, 0x7C, 0x85, 0x90, 0xA0, 0x95, 0xE0, 0xF0, 0xDE, - 0x5C, 0x25, 0x22, 0xE6, 0x6F, 0xE0, 0x2B, 0x63, 0x62, 0x3B, 0xA6, 0x57, 0x7C, 0xB6, 0xCF, 0xE1, - 0x6A, 0x83, 0x57, 0xA4, 0xF9, 0x3D, 0x1E, 0x55, 0x51, 0xC7, 0x8B, 0xA5, 0xEF, 0x54, 0x50, 0x48, - 0x40, 0x0B, 0x53, 0x47, 0x8B, 0x6B, 0xE3, 0x78, 0x4B, 0xDA, 0x38, 0xDE, 0xA2, 0x36, 0x0C, 0xF2, - 0xD9, 0x22, 0xD7, 0xC4, 0x2A, 0xAC, 0x8E, 0x00, 0xB0, 0x36, 0xB8, 0xBC, 0x59, 0x38, 0x1E, 0x3E, - 0x3A, 0xF5, 0x1D, 0x9E, 0x57, 0x72, 0x92, 0x5E, 0x05, 0x9D, 0x84, 0x04, 0x71, 0x1F, 0xE9, 0x71, - 0xAD, 0xF4, 0xB6, 0xA4, 0x95, 0x3C, 0x5A, 0xAB, 0x68, 0x65, 0x6A, 0x98, 0xF6, 0x88, 0x98, 0x16, - 0x3E, 0xC6, 0x51, 0x54, 0x31, 0x02, 0x6C, 0x6D, 0xF0, 0x26, 0x3A, 0xA9, 0xA2, 0x98, 0x56, 0x05, - 0xBD, 0x88, 0xF4, 0xC4, 0xFD, 0xA5, 0x07, 0xB3, 0xF2, 0x2D, 0xE9, 0x46, 0xD7, 0xB7, 0x39, 0xAA, - 0x2C, 0xC8, 0xC8, 0x34, 0xAC, 0xCF, 0x64, 0x32, 0x81, 0x69, 0x50, 0xF1, 0xA1, 0x25, 0x06, 0x0E, - 0xE3, 0x0B, 0x3B, 0xD7, 0x2E, 0xE9, 0x79, 0xE1, 0xFA, 0x65, 0x02, 0x5D, 0xF9, 0x22, 0x66, 0x72, - 0x4E, 0x28, 0x2D, 0x4B, 0x7E, 0xEF, 0x84, 0x74, 0x96, 0x9F, 0xB6, 0x7E, 0x4F, 0xA6, 0x74, 0x1B, - 0x41, 0x95, 0x39, 0xF4, 0x1B, 0xD7, 0xB8, 0xA5, 0xEF, 0x64, 0xA8, 0x32, 0xA5, 0xFF, 0x40, 0xC6, - 0xDA, 0x47, 0xD3, 0x2E, 0xCF, 0x4C, 0x17, 0x09, 0x21, 0xC4, 0xAE, 0x86, 0xA5, 0x07, 0x53, 0x24, - 0x38, 0xA8, 0x86, 0xA4, 0x8F, 0x35, 0xFD, 0x85, 0x69, 0x3C, 0x84, 0x49, 0xBC, 0xB1, 0x1A, 0x16, - 0x1F, 0x50, 0x56, 0x43, 0x18, 0x97, 0x7F, 0x7A, 0xA9, 0x5D, 0xD2, 0x8D, 0xEF, 0x85, 0xC3, 0x15, - 0xDB, 0x93, 0xA7, 0x62, 0xE8, 0xD1, 0xD2, 0x0D, 0xF6, 0xB9, 0xB6, 0xA6, 0x26, 0x77, 0x20, 0xD5, - 0x75, 0x35, 0x09, 0x7B, 0x01, 0x81, 0x74, 0x0B, 0x53, 0x4D, 0xE0, 0x56, 0x8D, 0xC7, 0x2D, 0xA6, - 0x62, 0xA3, 0x55, 0xF1, 0x34, 0x6C, 0xB4, 0x02, 0x35, 0x8D, 0xAF, 0xF1, 0x99, 0x88, 0xB1, 0x06, - 0xFA, 0xDA, 0x89, 0xA2, 0xB0, 0xD7, 0xFB, 0x51, 0x14, 0xE5, 0xF7, 0xBE, 0x15, 0x05, 0xD6, 0xF2, - 0x19, 0xC7, 0xD1, 0x32, 0x4E, 0x45, 0x01, 0x6B, 0x83, 0x77, 0x86, 0xBD, 0x84, 0x41, 0x66, 0x57, - 0x0A, 0x0B, 0x3B, 0xBE, 0x37, 0xF7, 0xE2, 0x7C, 0xDF, 0xB7, 0xEA, 0x80, 0x90, 0xB9, 0x33, 0x2E, - 0x3E, 0xDD, 0xE1, 0x70, 0x2C, 0x24, 0xBE, 0x83, 0xA3, 0xC2, 0x89, 0x41, 0x80, 0x61, 0xCB, 0x19, - 0x01, 0x9B, 0x4A, 0x95, 0x4F, 0x06, 0xAE, 0x96, 0xB6, 0x7D, 0x5B, 0x25, 0x13, 0xB8, 0xB0, 0x9C, - 0xE5, 0xB8, 0x3C, 0x06, 0x48, 0x03, 0xFE, 0x35, 0x99, 0x98, 0xA3, 0xF2, 0x89, 0x04, 0x24, 0x01, - 0x6F, 0x9D, 0xB9, 0x22, 0xFC, 0x96, 0x07, 0x5E, 0x32, 0x2A, 0x31, 0x93, 0x1B, 0x81, 0x16, 0x2F, - 0x2F, 0x76, 0x3A, 0xF0, 0x42, 0x9F, 0xF7, 0x14, 0x19, 0x90, 0xDB, 0xFB, 0x0E, 0x0A, 0x40, 0xC4, - 0x67, 0x6A, 0x3C, 0x65, 0x94, 0xC5, 0x20, 0xC3, 0x88, 0x1E, 0x4C, 0xBF, 0xEF, 0x6B, 0x7E, 0x17, - 0x51, 0x14, 0x9F, 0xDD, 0xE1, 0xD2, 0x73, 0x38, 0xBD, 0xEB, 0xB4, 0x37, 0x3B, 0xC1, 0x43, 0xE4, - 0xDB, 0xD5, 0x4F, 0xBB, 0x8C, 0x6A, 0x20, 0x1A, 0x7D, 0x8F, 0xEB, 0x0C, 0x05, 0x02, 0x76, 0x75, - 0x47, 0x6A, 0xDF, 0x9F, 0x27, 0xB5, 0x1F, 0x80, 0x2B, 0x4D, 0x4B, 0x44, 0xBC, 0x29, 0x46, 0xBC, - 0x37, 0x17, 0xBB, 0xD1, 0xD0, 0xF4, 0xDE, 0x42, 0xDD, 0xF4, 0x5E, 0x43, 0x9D, 0xC6, 0x37, 0x05, - 0x06, 0x52, 0x28, 0x99, 0xC1, 0x72, 0x40, 0x56, 0xCB, 0xAA, 0x12, 0xE4, 0xF4, 0x9B, 0x2A, 0x51, - 0x2E, 0x20, 0x23, 0x1E, 0xE4, 0xFA, 0xD1, 0xAA, 0x48, 0x6F, 0xB3, 0xCB, 0xBA, 0xDD, 0x3C, 0x6A, - 0xAB, 0x38, 0x8D, 0x6B, 0xAC, 0x3E, 0x4F, 0xE7, 0x46, 0x61, 0x65, 0x70, 0x38, 0xD0, 0xC5, 0xBB, - 0x17, 0xBB, 0x4C, 0x17, 0x82, 0x7E, 0xEF, 0xC7, 0x8F, 0x42, 0xAE, 0xEF, 0x3B, 0xD6, 0x59, 0xC4, - 0x2E, 0x1E, 0xEC, 0x10, 0xA8, 0x36, 0xF8, 0x8E, 0xD8, 0x9E, 0x76, 0xE1, 0xB8, 0xFC, 0x45, 0x98, - 0x3B, 0xD1, 0x1A, 0xED, 0xF9, 0x7E, 0x54, 0xC6, 0x98, 0xBE, 0x6F, 0x7D, 0xCD, 0xE6, 0xA6, 0xEB, - 0x3A, 0x6E, 0x61, 0x95, 0x71, 0x38, 0x98, 0x56, 0x34, 0xDF, 0xD1, 0xA3, 0x9D, 0xA8, 0x2B, 0xE8, - 0xF5, 0x7E, 0x34, 0x16, 0xF2, 0x7C, 0xDF, 0x4A, 0xBB, 0x9E, 0x58, 0xE6, 0xA2, 0xB0, 0xCA, 0x28, - 0x54, 0x6D, 0xF0, 0xA9, 0xF9, 0x1A, 0xFE, 0xEE, 0x44, 0x5D, 0xAC, 0xC7, 0xFB, 0x51, 0x16, 0xE7, - 0xF6, 0xBE, 0x55, 0x35, 0x5C, 0x14, 0x0F, 0x87, 0x00, 0x53, 0x1B, 0xBC, 0x7C, 0xBF, 0x9B, 0xDC, - 0x0F, 0x3B, 0x53, 0xD4, 0x50, 0x25, 0x7D, 0x50, 0xA6, 0xEE, 0x5B, 0x1B, 0xAB, 0x12, 0xDA, 0x58, - 0x21, 0xE1, 0x3F, 0xED, 0x48, 0x1B, 0x2B, 0x75, 0x6D, 0x6C, 0xD8, 0x5F, 0x56, 0x0F, 0x41, 0x3F, - 0xF4, 0xE9, 0xD3, 0xA1, 0x51, 0x7C, 0x38, 0x0A, 0x00, 0x71, 0xD3, 0x18, 0x1C, 0x69, 0x2F, 0x8D, - 0xDD, 0x0C, 0x48, 0x61, 0xBF, 0xBB, 0x70, 0xA1, 0x88, 0xC9, 0xFB, 0xD6, 0xD3, 0xC4, 0x18, 0x91, - 0xCF, 0x63, 0xE2, 0x97, 0x59, 0x5B, 0x16, 0x60, 0x6B, 0x83, 0xD7, 0x70, 0xA2, 0xBD, 0xA2, 0x27, - 0xBB, 0x4A, 0xF9, 0xC4, 0xFE, 0x77, 0xA1, 0xB5, 0x18, 0xBF, 0x0F, 0x42, 0x71, 0x90, 0x60, 0x3B, - 0x53, 0xBB, 0xD4, 0xE3, 0x4C, 0x31, 0x70, 0xAE, 0xBE, 0x0F, 0xEC, 0x7C, 0xB7, 0x0A, 0x8C, 0x88, - 0xD8, 0x99, 0x0E, 0x05, 0xBE, 0x37, 0xA8, 0x46, 0xC5, 0xA7, 0x1A, 0xF9, 0x9B, 0x81, 0xF3, 0x74, - 0xC5, 0x9F, 0xAE, 0xA3, 0x9B, 0x5A, 0x88, 0xDF, 0xF4, 0x7C, 0xD3, 0xB2, 0x60, 0x2A, 0x4C, 0x7C, - 0xED, 0x0A, 0x0F, 0x15, 0x1F, 0xA7, 0x13, 0xB0, 0x04, 0x0F, 0xD1, 0xFA, 0x2E, 0x31, 0xE6, 0xB5, - 0xC1, 0x15, 0xBE, 0x33, 0x19, 0x70, 0xE1, 0x59, 0x71, 0x64, 0x54, 0x8C, 0xC4, 0x76, 0x1D, 0x20, - 0x2A, 0x54, 0x13, 0x7F, 0x3F, 0x65, 0x4D, 0x0B, 0x8E, 0x84, 0x6B, 0x83, 0x4B, 0xDA, 0x58, 0x43, - 0x3B, 0xCB, 0xEF, 0x4E, 0xF9, 0x39, 0x3F, 0xFA, 0x44, 0x2F, 0x3E, 0xA2, 0x1B, 0x7F, 0xA3, 0x3A, - 0xE8, 0x95, 0xBD, 0xD5, 0x60, 0x70, 0x46, 0xDF, 0x0E, 0xCB, 0x9B, 0xD1, 0x87, 0xD9, 0x57, 0xFC, - 0xE9, 0xE4, 0xA1, 0x63, 0x8D, 0x9F, 0x09, 0xAB, 0xCB, 0x57, 0xE1, 0xE3, 0xB6, 0x08, 0x02, 0x86, - 0x11, 0x60, 0xC8, 0x51, 0xFE, 0xCC, 0x0D, 0xD0, 0xB3, 0x27, 0xA2, 0xF1, 0x1D, 0x65, 0x19, 0xCA, - 0x4D, 0x79, 0x34, 0xD8, 0x25, 0xD3, 0x50, 0x90, 0xB2, 0x27, 0xC6, 0xA5, 0x0F, 0x0A, 0x7F, 0x20, - 0x53, 0xD3, 0x03, 0x1A, 0x35, 0x30, 0x8B, 0x43, 0xFA, 0x8C, 0x25, 0x33, 0x66, 0xB5, 0xE7, 0x77, - 0xC5, 0x2E, 0xF9, 0xCB, 0x19, 0xA4, 0x8F, 0x63, 0x17, 0xCA, 0x4F, 0x92, 0x0F, 0x4F, 0xC7, 0x31, - 0xE6, 0x19, 0xFD, 0xE3, 0x66, 0x73, 0xD6, 0xC5, 0xA7, 0x45, 0xB5, 0x80, 0xB5, 0xB3, 0xC3, 0x59, - 0x37, 0xEF, 0xD1, 0xB0, 0xDC, 0x47, 0x7D, 0x81, 0xD3, 0xD2, 0x4F, 0xFA, 0xA2, 0x94, 0x06, 0x40, - 0xCD, 0xBE, 0xF6, 0xCE, 0xF0, 0xBE, 0xEC, 0x6B, 0x9F, 0xB0, 0x00, 0xB7, 0xC3, 0x07, 0x7E, 0x91, - 0x76, 0x63, 0x3C, 0x76, 0x53, 0x1F, 0xFA, 0xED, 0xC6, 0x1E, 0xFA, 0xED, 0x07, 0x0F, 0xFD, 0xF6, - 0xA3, 0xDD, 0x6E, 0x37, 0x9D, 0x56, 0xEB, 0x58, 0x85, 0x75, 0xC5, 0x07, 0x7F, 0x37, 0xC2, 0xD3, - 0x1C, 0xA4, 0xA9, 0xC8, 0x53, 0x37, 0xE0, 0x49, 0xD8, 0x15, 0x7E, 0x33, 0x99, 0x3C, 0x34, 0x8E, - 0xF8, 0xBA, 0x54, 0x79, 0x96, 0x5A, 0xED, 0x5D, 0x3F, 0x9D, 0x4D, 0x8D, 0x7B, 0x53, 0x0F, 0x67, - 0xD3, 0x26, 0xC9, 0x68, 0xD8, 0xCB, 0x0C, 0x86, 0x14, 0x84, 0x39, 0xFD, 0x9B, 0x4D, 0x3A, 0xFD, - 0xB4, 0x82, 0xD3, 0x4F, 0xD7, 0x9C, 0x7E, 0x87, 0xDE, 0x1E, 0x10, 0xFE, 0x77, 0xF3, 0xF8, 0x80, - 0xAF, 0x02, 0x5E, 0x2F, 0xE5, 0xAB, 0xD5, 0xDA, 0xA8, 0xDF, 0xE7, 0x3A, 0x49, 0x68, 0x0C, 0x6F, - 0x36, 0xE9, 0x24, 0x29, 0xA6, 0x5B, 0xCA, 0x4E, 0x79, 0xD8, 0x19, 0xEC, 0x66, 0x5C, 0xA2, 0xD9, - 0x94, 0xA8, 0x50, 0xDE, 0x3B, 0x3E, 0x13, 0xDA, 0xE9, 0xF2, 0xD4, 0x69, 0x13, 0xEA, 0x51, 0x7F, - 0x11, 0x44, 0x6A, 0x93, 0xCD, 0x24, 0x66, 0x0B, 0x21, 0xC3, 0x55, 0x4E, 0xCC, 0xDE, 0x7F, 0xF7, - 0x5D, 0xB1, 0x5C, 0x4C, 0xEC, 0xE5, 0x81, 0xE4, 0x62, 0x99, 0xB5, 0xD0, 0xDB, 0x05, 0xDC, 0x40, - 0xAA, 0x4B, 0x99, 0x6E, 0x04, 0x5E, 0x1B, 0xBC, 0xA4, 0xC7, 0x9A, 0x20, 0xB1, 0x42, 0xC6, 0xAB, - 0x3C, 0xED, 0xA4, 0x80, 0x42, 0xB1, 0x34, 0x22, 0x21, 0xA9, 0x1B, 0x45, 0x5C, 0x19, 0x05, 0x52, - 0x81, 0x3D, 0x75, 0xA6, 0x2A, 0xFB, 0x04, 0x6D, 0x92, 0x97, 0x0A, 0x2F, 0x5C, 0x52, 0x5A, 0x6D, - 0x1C, 0xB6, 0x36, 0x78, 0xEF, 0x12, 0xED, 0x95, 0x79, 0xAD, 0xCE, 0x9B, 0xB0, 0x51, 0x30, 0x44, - 0xA2, 0x26, 0xE5, 0xE4, 0x0E, 0x3E, 0xE9, 0xAE, 0x40, 0x5C, 0x6C, 0x57, 0xDD, 0x4E, 0x27, 0xC1, - 0x0A, 0x69, 0x57, 0xBB, 0x1A, 0x86, 0x4E, 0x6D, 0xD0, 0xA9, 0x86, 0xA1, 0x5B, 0x1B, 0x74, 0xAB, - 0x61, 0xE8, 0x81, 0x1C, 0x0E, 0x7A, 0xD5, 0x70, 0xF4, 0x6B, 0x83, 0x7E, 0x35, 0x0C, 0x47, 0x20, - 0xCB, 0xAA, 0x54, 0x40, 0xE6, 0x72, 0x5C, 0x00, 0x43, 0xFE, 0x26, 0x47, 0xD6, 0xAA, 0xBA, 0xF3, - 0xCC, 0x97, 0x56, 0x69, 0xE7, 0xE1, 0xB0, 0xB5, 0xC1, 0xBB, 0xA5, 0xE5, 0x9B, 0x0B, 0xCB, 0x84, - 0x69, 0x7B, 0xA3, 0xAB, 0x35, 0xB5, 0x76, 0xAF, 0xBD, 0xB7, 0xC3, 0x0C, 0x33, 0xA0, 0x43, 0xED, - 0x1D, 0x52, 0x9D, 0x20, 0x09, 0xD3, 0x8F, 0xC5, 0x77, 0x0A, 0x3C, 0x88, 0x70, 0xE6, 0x3A, 0x8E, - 0x5F, 0x5A, 0x1D, 0x01, 0x30, 0xA4, 0xF9, 0x70, 0x54, 0x3A, 0x9A, 0x45, 0x68, 0xCA, 0x18, 0x7A, - 0xCA, 0x26, 0xE7, 0x8A, 0xE1, 0x4C, 0x2F, 0x16, 0xCE, 0x76, 0xE7, 0x3E, 0xDE, 0x6D, 0xF9, 0x94, - 0x81, 0xC3, 0xC2, 0x6C, 0xF5, 0x16, 0x66, 0x88, 0x73, 0x54, 0x98, 0xD6, 0x68, 0x81, 0xFB, 0xE8, - 0xBD, 0x5D, 0x7A, 0x4F, 0x40, 0x46, 0xC1, 0x37, 0xB0, 0x89, 0xDE, 0xF3, 0x30, 0x9C, 0x87, 0xEA, - 0x83, 0x58, 0xE3, 0x5E, 0x79, 0x8D, 0x04, 0xD0, 0x90, 0x0F, 0xE0, 0x7B, 0xF0, 0x2A, 0xF9, 0x91, - 0x80, 0xAC, 0x9C, 0x23, 0x55, 0x77, 0x1A, 0xA9, 0x2B, 0x56, 0xCC, 0x0B, 0xDA, 0x95, 0x47, 0xF5, - 0xCE, 0x43, 0x1C, 0x0B, 0x17, 0xF8, 0xEA, 0x44, 0xA2, 0xB6, 0xBD, 0x92, 0x22, 0x13, 0x93, 0x48, - 0x06, 0xCB, 0x8D, 0x86, 0x6D, 0x2B, 0xDF, 0x69, 0xE6, 0x1F, 0x10, 0xB0, 0xBE, 0xDA, 0x54, 0x7C, - 0x15, 0x5E, 0x60, 0x4E, 0x36, 0x11, 0x08, 0x79, 0x7D, 0x70, 0xB3, 0x00, 0x24, 0xAC, 0xF4, 0x34, - 0x80, 0x03, 0x73, 0x15, 0x86, 0x91, 0xB8, 0xA3, 0x17, 0x88, 0xC4, 0xE2, 0x8C, 0x20, 0xC4, 0x57, - 0x72, 0xB4, 0xBB, 0xF7, 0xF4, 0xBF, 0x2B, 0x0F, 0x1E, 0x15, 0x5D, 0xBF, 0x60, 0x1A, 0x2C, 0xC1, - 0x80, 0xEF, 0x0B, 0xD4, 0x8B, 0x24, 0xF4, 0x9B, 0x0B, 0x1F, 0xC2, 0x5A, 0x21, 0x35, 0x38, 0x3A, - 0x74, 0x13, 0x9F, 0xCD, 0xF3, 0x0B, 0x2C, 0xFF, 0xA5, 0x36, 0xD9, 0x4C, 0x75, 0x67, 0x65, 0xDA, - 0xC5, 0xAB, 0x3B, 0x3F, 0x99, 0xF6, 0xD8, 0x59, 0x15, 0x2B, 0xF0, 0x88, 0x1D, 0xFD, 0x05, 0x0A, - 0x3C, 0x34, 0x3D, 0xC0, 0x15, 0xE2, 0xA6, 0x4B, 0xD4, 0xDE, 0x67, 0x93, 0x14, 0x32, 0x83, 0xBE, - 0xC1, 0x05, 0x56, 0x40, 0xE1, 0x69, 0x74, 0xBD, 0x79, 0xDB, 0x99, 0xDA, 0xCF, 0xA7, 0x62, 0xAE, - 0xC6, 0x29, 0x50, 0xCB, 0xD5, 0xBA, 0x92, 0x72, 0xF3, 0xBD, 0x57, 0xD0, 0x7F, 0x59, 0xE7, 0xE7, - 0xF6, 0xDE, 0xF9, 0xD9, 0xC4, 0x00, 0x44, 0xEC, 0x71, 0x69, 0xCB, 0x42, 0xD8, 0xC8, 0xAE, 0x2E, - 0xED, 0xF1, 0x4E, 0xAD, 0x8A, 0xF5, 0x5E, 0x5A, 0x07, 0xED, 0x7E, 0xBB, 0xF3, 0xB0, 0xCC, 0x0A, - 0x19, 0xAA, 0x60, 0x54, 0xFA, 0x49, 0xEF, 0x01, 0x4D, 0x69, 0x9C, 0xC9, 0x84, 0xAD, 0x6B, 0x96, - 0x33, 0x2D, 0x0E, 0x7E, 0x43, 0x9F, 0xD2, 0xF5, 0xC8, 0x6E, 0xE3, 0x55, 0xD8, 0x79, 0xC1, 0xD2, - 0x8C, 0xA0, 0x8B, 0xFE, 0xC3, 0x32, 0x2D, 0xCE, 0x91, 0xAA, 0x75, 0x49, 0x38, 0xEA, 0x3E, 0x1C, - 0xD3, 0xF2, 0x1D, 0xDF, 0xB0, 0x4A, 0x5B, 0x16, 0x83, 0x06, 0xC3, 0xFA, 0x88, 0x07, 0xDA, 0x15, - 0xF0, 0xB9, 0x53, 0xE3, 0x0A, 0xFA, 0x2F, 0x1F, 0xB8, 0x8E, 0xBB, 0x1B, 0x52, 0x46, 0x05, 0x96, - 0x7E, 0x59, 0x67, 0xA9, 0x52, 0xE8, 0xEA, 0x6F, 0x68, 0x91, 0x7C, 0x23, 0xA1, 0x6B, 0xE9, 0xE3, - 0xD5, 0xD2, 0xA1, 0x8B, 0x81, 0x63, 0xE8, 0xA2, 0x47, 0xBB, 0x37, 0xB1, 0x90, 0x82, 0xF2, 0x36, - 0xD6, 0x3B, 0xD9, 0xE4, 0x16, 0x98, 0x4D, 0x44, 0x30, 0xC6, 0x53, 0x25, 0x23, 0xDB, 0x94, 0xDF, - 0x54, 0x36, 0xB2, 0x91, 0xA1, 0xFC, 0x8E, 0x37, 0x8A, 0x4C, 0xCC, 0xE6, 0x19, 0x2C, 0xCC, 0xE1, - 0xD8, 0xC1, 0x4E, 0x2B, 0x36, 0x41, 0xE7, 0x1B, 0x5F, 0xA8, 0x0D, 0xB9, 0x7A, 0x48, 0xF5, 0x99, - 0xA1, 0x69, 0xDB, 0x65, 0xD5, 0xC4, 0x61, 0x6B, 0x83, 0x97, 0xEC, 0x60, 0xB7, 0x4B, 0xEA, 0xBC, - 0xF3, 0xCD, 0xAF, 0xA7, 0x07, 0x5C, 0xED, 0x5A, 0x4D, 0x89, 0x22, 0x86, 0x1B, 0x7E, 0xF7, 0xA3, - 0xC6, 0xF7, 0xA8, 0x46, 0xDF, 0x01, 0x79, 0x38, 0x25, 0x8D, 0xA9, 0x31, 0xC7, 0x87, 0x97, 0x8B, - 0x16, 0x35, 0xDE, 0x20, 0x58, 0xB1, 0x9A, 0x46, 0xBC, 0xA7, 0x87, 0x5D, 0xD5, 0x18, 0xC4, 0xDF, - 0x5A, 0x09, 0x84, 0x37, 0x87, 0xA6, 0xE1, 0xE1, 0x83, 0xFE, 0x70, 0xAC, 0xBD, 0x84, 0x63, 0xED, - 0xBD, 0xB5, 0x0C, 0x5F, 0xBB, 0x2B, 0x73, 0x08, 0x71, 0x3F, 0x5B, 0x84, 0x21, 0xED, 0xA9, 0x05, - 0xBA, 0x8D, 0x8F, 0x3F, 0xE0, 0x05, 0xC7, 0xB8, 0x7B, 0xAD, 0xD7, 0x3D, 0x6E, 0xD5, 0x34, 0x96, - 0x15, 0xF3, 0xC7, 0xFA, 0xBD, 0x2F, 0x74, 0x5B, 0x9B, 0x1E, 0x12, 0x28, 0x73, 0x00, 0x91, 0xDE, - 0x90, 0x40, 0x6A, 0xBF, 0x55, 0x76, 0x9B, 0xAD, 0x4B, 0x44, 0x0F, 0xC4, 0xD1, 0x92, 0x1A, 0x42, - 0xEC, 0x3D, 0x9B, 0xAC, 0x7D, 0xFC, 0x05, 0x05, 0xED, 0x9E, 0xEC, 0xFD, 0xA7, 0x72, 0x41, 0xE8, - 0x52, 0x41, 0xE0, 0xEE, 0xBE, 0xCD, 0xF2, 0xD4, 0x0E, 0x78, 0xD2, 0xD5, 0x78, 0x6A, 0x57, 0xE0, - 0xA9, 0xBD, 0x23, 0x9E, 0x3A, 0x01, 0x4F, 0x6D, 0x35, 0x9E, 0x3A, 0x15, 0x78, 0xEA, 0xEC, 0x88, - 0xA7, 0x6E, 0xC0, 0x53, 0x47, 0x8D, 0xA7, 0x6E, 0x05, 0x9E, 0xBA, 0x3B, 0xE2, 0xA9, 0x17, 0xF0, - 0xD4, 0x55, 0xE3, 0xA9, 0x57, 0x81, 0xA7, 0xDE, 0x8E, 0x78, 0xEA, 0x07, 0x3C, 0xF5, 0xD4, 0x78, - 0xEA, 0x57, 0xE0, 0xA9, 0xBF, 0x23, 0x9E, 0x8E, 0x02, 0x9E, 0xFA, 0x6A, 0x3C, 0x1D, 0x55, 0xE0, - 0xE9, 0x68, 0x47, 0x3C, 0x1D, 0x07, 0x3C, 0x1D, 0xA9, 0xF1, 0x74, 0x5C, 0x81, 0xA7, 0xE3, 0x1D, - 0xF1, 0x74, 0x12, 0xF0, 0x74, 0xAC, 0xC6, 0xD3, 0x49, 0x05, 0x9E, 0x4E, 0x76, 0xC4, 0x13, 0xEE, - 0xA6, 0x62, 0x4C, 0x9D, 0x28, 0x0E, 0xBA, 0xAD, 0x0A, 0x5C, 0x19, 0xBB, 0xE2, 0x2A, 0x4C, 0x25, - 0x74, 0xD5, 0x5C, 0xA2, 0x4A, 0x32, 0x31, 0xDC, 0x15, 0x5B, 0x51, 0x36, 0xA1, 0x98, 0x4E, 0xE8, - 0x55, 0xF2, 0x89, 0xD1, 0xAE, 0xD8, 0x0A, 0x13, 0x0A, 0x5D, 0x31, 0xA3, 0xD0, 0xAB, 0xA4, 0x14, - 0xE3, 0x5D, 0xB1, 0x15, 0xE6, 0x14, 0xBA, 0x62, 0x52, 0xA1, 0x57, 0xC9, 0x2A, 0xC8, 0xAE, 0xD8, - 0x0A, 0xD3, 0x0A, 0x5D, 0x31, 0xAF, 0xD0, 0xAB, 0x24, 0x16, 0x93, 0x5D, 0xB1, 0x15, 0x66, 0x16, - 0xBA, 0x62, 0x6A, 0xA1, 0x57, 0xC8, 0x2D, 0x4E, 0xE4, 0x13, 0xB1, 0x8D, 0xB2, 0x45, 0x7C, 0x3E, - 0x45, 0x8E, 0x26, 0x6D, 0x4A, 0x0F, 0x1C, 0x71, 0x20, 0x7C, 0x22, 0x8E, 0x09, 0xE4, 0xC2, 0xB1, - 0x27, 0xE6, 0x34, 0x2C, 0x32, 0x3C, 0x98, 0x67, 0x63, 0x3C, 0xE1, 0x85, 0xBF, 0xCA, 0x85, 0x86, - 0xAB, 0x57, 0x97, 0xC5, 0xCA, 0x0C, 0x62, 0x2F, 0x7F, 0xA1, 0x22, 0x03, 0x90, 0xDD, 0x16, 0xBF, - 0x3E, 0xA0, 0x54, 0x57, 0xA0, 0x40, 0x45, 0x2A, 0x0A, 0x3D, 0xB1, 0xA2, 0xD0, 0x57, 0xAE, 0x28, - 0x30, 0xE2, 0xB6, 0x53, 0x4B, 0x00, 0xDC, 0x1D, 0xF6, 0xC9, 0x04, 0x75, 0xA6, 0x3B, 0xE5, 0x99, - 0xEE, 0x15, 0x61, 0xBA, 0x53, 0x86, 0xE9, 0x12, 0xCF, 0xB4, 0x2A, 0xCA, 0x09, 0xE8, 0x7D, 0x6D, - 0xDE, 0x90, 0xB1, 0xF6, 0x8B, 0xBA, 0xA8, 0xF4, 0xF2, 0xA2, 0x3A, 0x2A, 0x22, 0x2A, 0x7D, 0x8B, - 0xF6, 0xD1, 0x0B, 0xF8, 0xFE, 0x51, 0x9D, 0xEF, 0x5E, 0x79, 0xBE, 0x3B, 0x45, 0xF8, 0xEE, 0x6D, - 0x91, 0xEF, 0x6E, 0xC0, 0xF7, 0x27, 0x75, 0xBE, 0xBB, 0xE5, 0xF9, 0xEE, 0x16, 0xE1, 0xBB, 0xBB, - 0x45, 0xBE, 0xDB, 0x10, 0x6C, 0x7E, 0xFC, 0xA4, 0x7D, 0x9C, 0xB9, 0xC4, 0x9B, 0xE5, 0x57, 0xE2, - 0x18, 0x44, 0xD9, 0xB1, 0xBD, 0xB7, 0x83, 0xB9, 0x1B, 0x52, 0xD8, 0x11, 0x79, 0xCA, 0xCD, 0x9B, - 0x19, 0x84, 0xCA, 0x37, 0x89, 0xE4, 0x3C, 0xC9, 0x67, 0x6E, 0xBA, 0x2A, 0x53, 0xDB, 0x8B, 0x61, - 0xC7, 0xB5, 0xC1, 0xDB, 0x65, 0x81, 0xF1, 0xED, 0xB8, 0xBC, 0x3D, 0xAB, 0x57, 0xCC, 0x19, 0x5D, - 0x5B, 0xB3, 0xE7, 0x13, 0xCA, 0x33, 0xE4, 0x65, 0x9E, 0x82, 0xDA, 0xCB, 0x57, 0x21, 0x7A, 0x3B, - 0xA8, 0x92, 0x63, 0xA4, 0x3F, 0x62, 0xEC, 0xFC, 0x88, 0x0C, 0x69, 0x90, 0xB1, 0x14, 0x18, 0x8C, - 0x8E, 0x0A, 0x6A, 0xF3, 0xB8, 0x64, 0x74, 0x42, 0x1A, 0xB7, 0xA6, 0x4E, 0x9C, 0x7A, 0xA0, 0x00, - 0x3E, 0x95, 0x10, 0x40, 0xBF, 0xBC, 0x00, 0x0A, 0x65, 0x2E, 0x48, 0xE3, 0xF6, 0x04, 0xD0, 0x62, - 0x02, 0xB8, 0x8A, 0x5E, 0x7A, 0x9D, 0x61, 0xD0, 0x15, 0x2A, 0x50, 0xBD, 0x1D, 0xAC, 0x91, 0x60, - 0xA4, 0xD5, 0x03, 0x8B, 0x06, 0x8E, 0x8A, 0x29, 0xB4, 0x5D, 0x34, 0xBF, 0x92, 0x17, 0x3F, 0x15, - 0xF2, 0xEF, 0x6D, 0x26, 0x58, 0xED, 0x56, 0x60, 0xD1, 0xC5, 0x05, 0xD0, 0x2A, 0x2F, 0x00, 0xBD, - 0x90, 0x00, 0x5A, 0x0F, 0x2B, 0x19, 0xEF, 0xAF, 0x7F, 0xA7, 0x38, 0x5F, 0x5A, 0x45, 0xDD, 0x5F, - 0x18, 0xCD, 0xDA, 0x45, 0x84, 0xB5, 0x55, 0xEF, 0xEF, 0x44, 0x9C, 0x6B, 0xBF, 0x68, 0xF1, 0xAD, - 0xAF, 0x59, 0x71, 0xA0, 0x7C, 0x11, 0xB0, 0xB7, 0x83, 0xF5, 0x2A, 0xA4, 0xF0, 0x44, 0xC2, 0x59, - 0xC1, 0x00, 0x7F, 0x52, 0xDE, 0x1D, 0x0A, 0x69, 0x18, 0x69, 0xDD, 0x9E, 0x8A, 0x7B, 0x31, 0x41, - 0xB0, 0x6F, 0xA4, 0xAB, 0xA8, 0xB8, 0x7C, 0xE5, 0xB0, 0xB7, 0x83, 0xA5, 0x2E, 0xA4, 0xF0, 0x58, - 0xC2, 0x59, 0x41, 0x15, 0x17, 0x4D, 0x49, 0x8F, 0x4B, 0x4E, 0x2D, 0xF5, 0x6D, 0xE6, 0xA4, 0x58, - 0xED, 0x16, 0x04, 0x21, 0x7E, 0xC0, 0x22, 0x4B, 0xC1, 0xE5, 0x2B, 0xDE, 0xBD, 0x8A, 0xEB, 0xB3, - 0xDB, 0x8B, 0xE4, 0x47, 0xB2, 0xAF, 0x9B, 0xE7, 0xDB, 0x41, 0xD1, 0x5C, 0xB6, 0x55, 0x72, 0xE0, - 0xDB, 0x6A, 0x2A, 0x0B, 0xBD, 0x43, 0xD6, 0xB3, 0xCE, 0x7D, 0x86, 0x09, 0x94, 0x5F, 0x79, 0xEB, - 0xED, 0x60, 0x7B, 0x08, 0x52, 0xD8, 0xAE, 0x0D, 0x3E, 0x15, 0x64, 0xAA, 0x4A, 0xFD, 0xA0, 0xF4, - 0xFE, 0x90, 0xDD, 0x95, 0xDE, 0x47, 0xF3, 0x9B, 0xE2, 0xA5, 0xF7, 0x8B, 0x77, 0x3F, 0x17, 0x2B, - 0xBD, 0x8B, 0xBD, 0xEC, 0xAE, 0xF4, 0x5E, 0xCE, 0x66, 0x0A, 0x6D, 0x94, 0x05, 0xC6, 0xF0, 0x55, - 0x48, 0x23, 0xD3, 0xA3, 0x5D, 0x82, 0x60, 0xB4, 0xF7, 0xC1, 0x69, 0x28, 0x22, 0xE1, 0x19, 0xE5, - 0x78, 0xFB, 0x2C, 0xEB, 0xE9, 0x64, 0x84, 0x85, 0x52, 0xCF, 0xF0, 0xE2, 0x0B, 0x75, 0xFA, 0xFC, - 0x1B, 0x5F, 0x15, 0x9E, 0x05, 0x4E, 0x7B, 0xD7, 0xC8, 0xC1, 0x51, 0x41, 0xDC, 0x5B, 0x7F, 0xC5, - 0xC0, 0x20, 0xA1, 0x28, 0x9D, 0xEA, 0x47, 0xC7, 0x73, 0xE5, 0x3A, 0x39, 0x05, 0x2B, 0x12, 0xCD, - 0x3B, 0x62, 0xA9, 0x45, 0x3D, 0x9A, 0x33, 0xF2, 0xB6, 0x13, 0xCD, 0x11, 0x77, 0x8C, 0xF7, 0x02, - 0x59, 0x0D, 0x83, 0x2D, 0x26, 0x00, 0xF9, 0x26, 0x0A, 0x05, 0x01, 0xA4, 0x49, 0x60, 0x23, 0x22, - 0x68, 0x53, 0x09, 0xB4, 0x13, 0xDA, 0x4F, 0x09, 0xFC, 0xB4, 0x7D, 0xD9, 0xB8, 0xDF, 0xD9, 0x41, - 0x6D, 0x02, 0xC5, 0x15, 0xE3, 0xA8, 0xA0, 0x4E, 0x8B, 0x2D, 0x0E, 0xC6, 0x74, 0x5A, 0xCC, 0xA8, - 0xB7, 0xB6, 0x3A, 0x08, 0xC8, 0x3B, 0x54, 0x00, 0x1D, 0x65, 0x95, 0x96, 0x9F, 0x66, 0x76, 0x76, - 0x90, 0x9F, 0xA0, 0xB4, 0x62, 0x1C, 0x15, 0x54, 0x69, 0xB1, 0xA5, 0xCF, 0x98, 0x4A, 0xD5, 0xE7, - 0x97, 0x9C, 0xC8, 0xAD, 0xA9, 0xB4, 0x4B, 0x05, 0xD0, 0x55, 0x56, 0x69, 0xF9, 0x59, 0x47, 0x67, - 0x07, 0xBB, 0x77, 0x51, 0x5A, 0x31, 0x8E, 0x0A, 0xAA, 0xB4, 0xD8, 0x92, 0x5D, 0x4C, 0xA5, 0xEA, - 0xF3, 0x49, 0x4E, 0xE4, 0xD6, 0x54, 0xDA, 0xA3, 0x02, 0xE8, 0x29, 0xAB, 0xB4, 0x7C, 0xA5, 0xA0, - 0xB3, 0x83, 0x62, 0x10, 0x4A, 0x2B, 0xC6, 0x51, 0x41, 0x95, 0x16, 0x5B, 0x7D, 0x8E, 0xA9, 0x54, - 0x7D, 0x9D, 0x83, 0x13, 0xB9, 0x35, 0x95, 0xF6, 0xA9, 0x00, 0xFA, 0xCA, 0x2A, 0x2D, 0xBF, 0xBF, - 0xAA, 0xB3, 0x83, 0xBD, 0xDB, 0x28, 0xAD, 0x18, 0x47, 0x05, 0x55, 0x5A, 0xAC, 0x74, 0x1B, 0x53, - 0xA9, 0xFA, 0xCA, 0x0D, 0x27, 0x72, 0x6B, 0x2A, 0x3D, 0xA2, 0x02, 0x38, 0x52, 0x56, 0x69, 0xF9, - 0xAD, 0xEB, 0x9D, 0x1D, 0xD4, 0xF3, 0x50, 0x5A, 0x31, 0x8E, 0x0A, 0xAA, 0xB4, 0x58, 0x05, 0x27, - 0xA6, 0x52, 0xF5, 0xBD, 0x53, 0x9C, 0xC8, 0xAD, 0xA9, 0xF4, 0x98, 0x0A, 0xE0, 0x58, 0x59, 0xA5, - 0xE5, 0x77, 0xEE, 0x77, 0x76, 0xB0, 0x73, 0x1F, 0xA5, 0x15, 0xE3, 0xA8, 0xA0, 0x4A, 0x8B, 0xD5, - 0x66, 0x63, 0x2A, 0x55, 0xDF, 0xEE, 0xC4, 0x89, 0xDC, 0x9A, 0x4A, 0x4F, 0xA8, 0x00, 0x4E, 0x94, - 0x55, 0x5A, 0x7E, 0xCB, 0x40, 0x67, 0x07, 0x9B, 0x5F, 0x50, 0x5A, 0x2D, 0x91, 0xA3, 0x82, 0x2A, - 0x2D, 0xB6, 0xC0, 0xD8, 0x49, 0xD9, 0xFA, 0xA2, 0xA0, 0xD2, 0xB4, 0x05, 0xC6, 0x07, 0x50, 0xBF, - 0x33, 0x56, 0xC3, 0x12, 0x1F, 0xFC, 0x79, 0xF1, 0xD3, 0xCB, 0xF4, 0xC2, 0x7E, 0x6A, 0x15, 0x2F, - 0xD6, 0xD7, 0x43, 0x2F, 0xE3, 0x89, 0xF2, 0x42, 0xC2, 0x41, 0xCB, 0xEC, 0x25, 0x91, 0xDA, 0x1A, - 0xF3, 0xD9, 0x96, 0xC6, 0x80, 0x0B, 0x58, 0x5A, 0xA7, 0xDB, 0x92, 0x27, 0x2D, 0x39, 0x96, 0xC6, - 0xA9, 0xDC, 0x4E, 0xF0, 0x40, 0xE4, 0x30, 0x17, 0x47, 0xDE, 0x3F, 0x28, 0xAD, 0xE9, 0x30, 0x80, - 0x78, 0xF8, 0xE8, 0xB6, 0x4E, 0x14, 0xE3, 0x07, 0xC8, 0x20, 0x6D, 0x63, 0xFC, 0x06, 0x03, 0x08, - 0xD2, 0xD8, 0x61, 0x4C, 0xBD, 0x51, 0x66, 0x2A, 0x59, 0x05, 0x28, 0xC4, 0x54, 0x5A, 0x65, 0x67, - 0xC3, 0x4C, 0x75, 0x19, 0x53, 0x19, 0x4E, 0x9A, 0x60, 0x2A, 0x39, 0x0F, 0x2E, 0xC4, 0x54, 0xDA, - 0x44, 0x38, 0x62, 0xEA, 0x21, 0x04, 0x3A, 0x32, 0x32, 0xA6, 0xA3, 0x12, 0xA1, 0xEE, 0xF2, 0xE2, - 0xF0, 0xC5, 0x9B, 0x0B, 0x8D, 0x2E, 0x69, 0x3A, 0x56, 0xC1, 0x88, 0x17, 0xEF, 0xF4, 0x2F, 0x15, - 0xF3, 0x28, 0xE9, 0x42, 0xD4, 0x7B, 0x73, 0xA1, 0x1A, 0xF0, 0x38, 0x64, 0x91, 0x90, 0xD7, 0x6B, - 0x75, 0xCA, 0x54, 0x08, 0x43, 0x22, 0xB7, 0x14, 0xF4, 0x28, 0xFA, 0x76, 0x24, 0x83, 0xCB, 0x62, - 0x32, 0x28, 0x54, 0x25, 0x8D, 0xCB, 0xA0, 0x40, 0xD8, 0x0F, 0x88, 0xDC, 0xA6, 0x0C, 0x30, 0x4A, - 0x5E, 0x5E, 0x68, 0xEF, 0xFF, 0xA9, 0x5D, 0xDE, 0x2C, 0x1C, 0x6F, 0xE9, 0x92, 0xDC, 0xA8, 0xC2, - 0xE1, 0xE2, 0x71, 0xA5, 0xDF, 0xEB, 0x75, 0x54, 0x03, 0x4B, 0x2F, 0x7D, 0x08, 0x98, 0xB4, 0x36, - 0x18, 0x2F, 0x29, 0xA1, 0xDD, 0x90, 0xC1, 0x0F, 0x04, 0x34, 0xAD, 0x14, 0x37, 0x39, 0x60, 0x9C, - 0x43, 0xBD, 0x85, 0xDB, 0xAB, 0x15, 0x19, 0x94, 0x67, 0x94, 0x9D, 0x8D, 0x0E, 0x07, 0x94, 0xCA, - 0x5E, 0xC8, 0xDE, 0xA7, 0x8F, 0x57, 0x6A, 0x8C, 0x25, 0xEB, 0x68, 0xC5, 0x54, 0x97, 0xF6, 0xC8, - 0x68, 0xC1, 0x41, 0x41, 0xDE, 0xE8, 0xEC, 0x10, 0x62, 0xEC, 0xBA, 0x6C, 0x52, 0x44, 0x76, 0x36, - 0x31, 0xA7, 0x60, 0xB0, 0x72, 0x59, 0x52, 0x19, 0xB2, 0xB7, 0x9A, 0xE2, 0x17, 0x48, 0x9B, 0x23, - 0x08, 0xF3, 0xA0, 0x7B, 0xF4, 0xAE, 0x40, 0xB2, 0x73, 0x63, 0x4A, 0xA2, 0xEB, 0x1A, 0x0B, 0xE2, - 0x59, 0xC1, 0xD9, 0x60, 0x08, 0x8D, 0x6B, 0xC2, 0x3F, 0x97, 0xAA, 0xCD, 0x5C, 0x32, 0x39, 0xAF, - 0x7D, 0x13, 0xE2, 0xE4, 0x8F, 0xDF, 0x61, 0x93, 0x9A, 0x36, 0x76, 0x56, 0xB6, 0xE5, 0x18, 0x18, - 0xF8, 0x8D, 0x85, 0x0F, 0x94, 0x1E, 0xFC, 0xB1, 0xC0, 0x37, 0x5C, 0x19, 0xF8, 0xB4, 0x96, 0x91, - 0xD1, 0x8F, 0xA0, 0xFE, 0x91, 0xE5, 0x78, 0xC1, 0xB4, 0x0D, 0x0F, 0xC3, 0xCF, 0xAB, 0xFE, 0xCF, - 0x7F, 0xE7, 0x6D, 0x15, 0x30, 0xE7, 0x53, 0x41, 0x00, 0x35, 0xCD, 0x73, 0x47, 0xE7, 0x35, 0xA0, - 0xD4, 0x75, 0x3C, 0xCF, 0x71, 0xCD, 0xA9, 0x99, 0x32, 0x36, 0xA7, 0x49, 0xFB, 0x50, 0x26, 0xEE, - 0x44, 0x63, 0xC9, 0xB0, 0x7F, 0xE6, 0x8D, 0x5C, 0x73, 0xE1, 0x0F, 0x1E, 0x8D, 0x9D, 0xD1, 0x72, - 0x4E, 0x6C, 0xFF, 0xC0, 0x18, 0x8F, 0x2F, 0xAF, 0xE1, 0xE0, 0x3B, 0xFC, 0x16, 0x1F, 0x48, 0xBE, - 0x51, 0x7F, 0xF5, 0xAF, 0x77, 0x38, 0x0C, 0xE3, 0x35, 0x90, 0x17, 0x19, 0xD7, 0xF7, 0xB5, 0xC9, - 0xD2, 0x66, 0x23, 0x61, 0x83, 0x60, 0xDB, 0x3D, 0xED, 0x2B, 0x60, 0xBC, 0x36, 0x5C, 0x6D, 0x68, - 0x78, 0xE4, 0xAD, 0xE3, 0xF9, 0xDA, 0xB9, 0x16, 0x62, 0xB4, 0x9C, 0x11, 0xDD, 0xB7, 0x71, 0xC0, - 0xF8, 0xE2, 0x2D, 0x19, 0xE3, 0x3F, 0xBA, 0x16, 0x34, 0x0D, 0xA1, 0x9E, 0x6A, 0xF5, 0xD3, 0x63, - 0xBD, 0x8E, 0xF6, 0x17, 0x76, 0x31, 0x21, 0x10, 0xE6, 0xA1, 0x5D, 0x63, 0xE9, 0x5A, 0xFB, 0xDA, - 0x68, 0xB8, 0xF7, 0x95, 0x52, 0x4F, 0x2F, 0xE3, 0xB5, 0x3D, 0xCE, 0xCC, 0x81, 0x3F, 0x23, 0x76, - 0x23, 0xA2, 0xCC, 0x25, 0xDE, 0xC2, 0xB1, 0x3D, 0xC2, 0x88, 0x63, 0x3F, 0x73, 0x12, 0x5D, 0x3F, - 0xF0, 0x7C, 0xC3, 0x5F, 0x7A, 0xDA, 0xE3, 0xF3, 0x73, 0xAD, 0xDD, 0x6A, 0x89, 0xCD, 0x34, 0xE8, - 0x26, 0xD9, 0x6E, 0x5F, 0x4B, 0x5C, 0xF8, 0x48, 0x6E, 0xFC, 0xBD, 0x67, 0x21, 0xCC, 0x9D, 0x46, - 0x2C, 0x8F, 0xC4, 0x90, 0x84, 0x00, 0xF8, 0xDE, 0xB8, 0xC6, 0x5E, 0x9C, 0xC0, 0xC6, 0xD8, 0xF0, - 0x8D, 0xBD, 0xAF, 0x31, 0x7D, 0x41, 0xAF, 0x40, 0xC9, 0xBE, 0x46, 0x6F, 0x3D, 0x13, 0x6E, 0xDD, - 0xED, 0x1D, 0x80, 0x0C, 0x81, 0xDF, 0x10, 0x9A, 0xB8, 0x6E, 0x9C, 0x62, 0x0A, 0xDD, 0xD4, 0xF7, - 0x35, 0xBC, 0x13, 0x87, 0x15, 0x88, 0x7C, 0x14, 0x5C, 0x0B, 0x84, 0x96, 0x8D, 0x56, 0x82, 0x92, - 0xA1, 0xBB, 0x8B, 0xA9, 0x08, 0x02, 0xCE, 0x07, 0x32, 0x05, 0x89, 0x4D, 0xF7, 0x79, 0xFC, 0xD9, - 0xA7, 0xC1, 0x67, 0x9F, 0xC5, 0x2D, 0x41, 0x6B, 0x87, 0x87, 0xE0, 0xD2, 0x9E, 0x63, 0x11, 0xB0, - 0x8A, 0x69, 0xA3, 0xCE, 0xBF, 0xF5, 0x0A, 0x16, 0x55, 0x6F, 0xDD, 0xD4, 0x9F, 0x02, 0x82, 0x03, - 0xDF, 0xB9, 0xF2, 0x5D, 0xD3, 0x9E, 0x36, 0xF4, 0xFE, 0x5E, 0x84, 0x8D, 0xDE, 0x46, 0x94, 0x89, - 0xFB, 0xF4, 0x3A, 0xED, 0x24, 0x79, 0xA3, 0xC1, 0xAF, 0x3F, 0xAD, 0xEF, 0xD5, 0x39, 0xF1, 0xF4, - 0x1C, 0xCC, 0xAD, 0xC1, 0x0E, 0x9E, 0x50, 0x1A, 0xF7, 0xB4, 0xB3, 0x33, 0xDE, 0x0D, 0x6B, 0x85, - 0x17, 0xA1, 0x11, 0xFD, 0x93, 0xB8, 0x15, 0x9A, 0xE2, 0xEF, 0xFF, 0xF8, 0x1A, 0xD8, 0xEC, 0xDD, - 0x21, 0x50, 0xFD, 0x1C, 0x43, 0xF0, 0x3F, 0xBE, 0xC2, 0xFF, 0x77, 0x4F, 0x68, 0xD4, 0xFD, 0xC7, - 0x57, 0xFC, 0x73, 0xF7, 0x04, 0x7A, 0x82, 0x63, 0xDA, 0xDF, 0xDD, 0xEF, 0x54, 0x0E, 0xEB, 0xD2, - 0x9B, 0xA6, 0x4A, 0x2F, 0x14, 0x5B, 0x61, 0x9A, 0xA6, 0x19, 0x44, 0xFD, 0x1E, 0xF9, 0x6F, 0x63, - 0xE4, 0x8C, 0x41, 0x3D, 0x3E, 0x58, 0x72, 0xA0, 0x74, 0x0B, 0x54, 0x12, 0x08, 0xAA, 0x15, 0x28, - 0xDD, 0x9C, 0xD0, 0x96, 0x1A, 0x77, 0x95, 0xC8, 0x40, 0x82, 0x96, 0x0B, 0xC3, 0xF5, 0xC8, 0xB7, - 0xB6, 0xDF, 0xF0, 0x63, 0x4E, 0x91, 0x22, 0xF1, 0xC1, 0x20, 0xC6, 0x02, 0xFE, 0x00, 0x0E, 0xDA, - 0xD5, 0xB9, 0xD2, 0x42, 0x63, 0xE3, 0x7F, 0x13, 0x66, 0xF3, 0xA6, 0x90, 0xD9, 0x34, 0xA8, 0xD8, - 0xC2, 0x3E, 0xF7, 0x8A, 0x98, 0x10, 0x90, 0x25, 0x18, 0x10, 0x75, 0x88, 0x48, 0x64, 0xEC, 0x62, - 0x8A, 0x43, 0xFC, 0x3C, 0xB2, 0xBE, 0x34, 0x6E, 0xE0, 0xBF, 0x64, 0xCC, 0x5A, 0xD3, 0x15, 0x36, - 0x7A, 0x8E, 0xFF, 0x81, 0x82, 0xF0, 0x4F, 0xAA, 0xA1, 0x00, 0xD6, 0xF7, 0x96, 0xD5, 0x60, 0x1F, - 0x98, 0x03, 0x1B, 0x59, 0x42, 0x3C, 0xF4, 0x6E, 0x31, 0x32, 0x39, 0x8E, 0xFF, 0x79, 0x5F, 0x5B, - 0xB8, 0x40, 0x18, 0xFD, 0x96, 0x0A, 0x1C, 0x03, 0x22, 0x62, 0xB3, 0xBF, 0xB9, 0x14, 0x2C, 0x2C, - 0xEB, 0x39, 0xC3, 0x0A, 0x24, 0xB0, 0x03, 0x30, 0x99, 0x25, 0x9A, 0x2E, 0xFC, 0x7F, 0xF7, 0x04, - 0x3A, 0x81, 0x43, 0xF8, 0xFF, 0xEE, 0x09, 0x76, 0x85, 0x46, 0x85, 0x3D, 0xDE, 0x3D, 0x81, 0x1E, - 0xE1, 0x04, 0xFE, 0x87, 0x36, 0xD8, 0x2F, 0xB6, 0xC2, 0xBF, 0x70, 0x87, 0xF6, 0x8F, 0x37, 0xE9, - 0x01, 0xBB, 0xC0, 0x4F, 0xB3, 0x18, 0x64, 0x6F, 0xD7, 0x6F, 0xD0, 0xB7, 0x9D, 0x7F, 0xBE, 0x01, - 0x76, 0xE8, 0xC1, 0x2D, 0xC4, 0x20, 0x7B, 0x8C, 0xE7, 0xF8, 0xE7, 0x36, 0x50, 0x30, 0x5E, 0xE0, - 0x47, 0x70, 0x8D, 0xBE, 0x11, 0x16, 0x2F, 0xB1, 0x03, 0x6C, 0x45, 0xDF, 0xDF, 0x49, 0x5B, 0xB1, - 0x23, 0xB8, 0xC6, 0xDF, 0xFA, 0xB8, 0xAF, 0xF1, 0xF7, 0x0A, 0xE6, 0x0A, 0x27, 0x7A, 0xEF, 0xDF, - 0x73, 0xEF, 0x06, 0x19, 0x64, 0xA4, 0xA1, 0x54, 0xC2, 0xB3, 0xDB, 0xBB, 0x27, 0x04, 0xEF, 0x51, - 0x22, 0xE1, 0xF8, 0x96, 0x1F, 0xC3, 0x75, 0xA0, 0x0F, 0xEF, 0x04, 0x04, 0xD3, 0x0B, 0xB7, 0xD1, - 0x05, 0x68, 0xE1, 0xE3, 0x7D, 0x4E, 0x3C, 0x9C, 0xDD, 0x86, 0x67, 0x08, 0x4D, 0x61, 0x39, 0x1B, - 0x70, 0x7A, 0x1B, 0x9D, 0xC2, 0x5D, 0xE4, 0x05, 0x15, 0xC0, 0x79, 0xBA, 0x7B, 0xC2, 0x79, 0x42, - 0x2D, 0xB2, 0xA3, 0xB8, 0xA8, 0xE1, 0x7F, 0xF4, 0x23, 0x9F, 0x07, 0xEC, 0x4F, 0x81, 0x77, 0x12, - 0x6B, 0x4F, 0x3B, 0x1F, 0xF0, 0xB8, 0x8F, 0x01, 0x00, 0x3C, 0x0A, 0xAE, 0x13, 0xEB, 0xC0, 0xF0, - 0xC1, 0x21, 0x20, 0x6F, 0x22, 0xDE, 0x01, 0x46, 0x94, 0xD0, 0xCD, 0xD7, 0x6E, 0x1D, 0xD8, 0xE0, - 0x16, 0x14, 0xE1, 0xDE, 0x29, 0x0F, 0x1B, 0x88, 0x88, 0x71, 0xB9, 0x86, 0x8B, 0x5D, 0x4E, 0x43, - 0xC7, 0xEE, 0xA6, 0x60, 0xE4, 0xA1, 0x30, 0x0E, 0x81, 0x17, 0xD3, 0xB0, 0xD1, 0x51, 0x43, 0xC0, - 0xD5, 0xEE, 0xF5, 0x22, 0x6C, 0x89, 0x48, 0xC7, 0xE6, 0x94, 0x28, 0x90, 0x03, 0xCC, 0xCF, 0xA3, - 0xA1, 0x70, 0x04, 0xE6, 0xA0, 0xD5, 0x83, 0x09, 0x65, 0xFD, 0x74, 0x2D, 0xC2, 0x01, 0x04, 0x2F, - 0x20, 0x68, 0xCF, 0x19, 0x8D, 0xA7, 0x51, 0xF8, 0xD4, 0xB4, 0x21, 0x24, 0x3B, 0x5F, 0x9E, 0xC5, - 0x90, 0xD1, 0xD4, 0x3F, 0xC4, 0xC4, 0xAE, 0x61, 0xA2, 0x90, 0xB8, 0xC4, 0xB6, 0xDB, 0x35, 0x1D, - 0x9B, 0xC8, 0x7B, 0x8D, 0xC5, 0x4B, 0xDE, 0x11, 0x3F, 0x1B, 0x93, 0x89, 0xB1, 0xB4, 0xFC, 0x08, - 0xCC, 0x25, 0x90, 0xE8, 0xDA, 0x3C, 0x6C, 0xB1, 0x24, 0x3F, 0x77, 0xE8, 0xCE, 0x18, 0x2A, 0x82, - 0x51, 0xE1, 0x71, 0x72, 0x54, 0x00, 0xAB, 0x74, 0xFD, 0x46, 0xFD, 0xD2, 0x75, 0x1D, 0xF7, 0xD7, - 0xFA, 0x53, 0x6C, 0xF4, 0xB4, 0xFE, 0xDB, 0xA9, 0x46, 0xE3, 0xE9, 0x5E, 0x3C, 0xB8, 0x0B, 0xE1, - 0xF3, 0xF0, 0x50, 0x7B, 0xE1, 0xFB, 0x06, 0x28, 0x00, 0x6B, 0x2C, 0x33, 0x94, 0x8F, 0x66, 0xF0, - 0x24, 0xD0, 0x71, 0xD1, 0x28, 0xD9, 0xF7, 0xEE, 0x41, 0x22, 0x98, 0x58, 0x7A, 0x00, 0x12, 0x24, - 0x99, 0x14, 0xD5, 0xC1, 0xBF, 0x97, 0xC4, 0xBD, 0xBD, 0xA2, 0x02, 0x73, 0xDC, 0x17, 0x10, 0x2A, - 0xEB, 0x07, 0xD1, 0x3C, 0xA9, 0xCE, 0x72, 0x9E, 0x03, 0x40, 0x75, 0x09, 0x7D, 0x80, 0x8E, 0x23, - 0x9B, 0x67, 0xDC, 0x84, 0x7A, 0x87, 0x71, 0xEE, 0x9C, 0x2B, 0x23, 0x99, 0x64, 0x41, 0x0B, 0xC7, - 0xFE, 0x42, 0x6E, 0x97, 0x0B, 0x10, 0x7F, 0x94, 0x36, 0x25, 0x12, 0x39, 0x2E, 0x1D, 0x72, 0x00, - 0x2D, 0x2F, 0xF8, 0xC0, 0xA9, 0x77, 0x24, 0x8D, 0x22, 0x15, 0x50, 0xEB, 0x44, 0x4F, 0x7C, 0xB6, - 0xD6, 0xE8, 0xEE, 0x91, 0xFC, 0x4C, 0x92, 0x72, 0x72, 0x02, 0xB9, 0xF0, 0xC0, 0xB5, 0xA9, 0x63, - 0x27, 0x7A, 0x48, 0xA4, 0x83, 0x90, 0x0C, 0x46, 0x91, 0x61, 0xB9, 0x80, 0xE4, 0x93, 0xC4, 0x83, - 0x43, 0x68, 0x0B, 0xC1, 0xCD, 0xB9, 0xE3, 0x93, 0x44, 0xC4, 0x30, 0x6D, 0xD3, 0x37, 0x0D, 0xEB, - 0x53, 0x64, 0x8D, 0x5B, 0x75, 0x7F, 0x89, 0x8F, 0x17, 0xF0, 0xFF, 0xB5, 0x9C, 0x4F, 0x2D, 0x4F, - 0x59, 0xB3, 0x90, 0x30, 0x1E, 0x44, 0x56, 0x22, 0xCA, 0x21, 0x16, 0x16, 0xF8, 0xFD, 0xA0, 0xA7, - 0xC7, 0x8F, 0xE9, 0xD1, 0xA3, 0x50, 0x69, 0x41, 0xF4, 0x38, 0xD7, 0xA2, 0x1B, 0x09, 0x05, 0xAF, - 0xE3, 0x4E, 0xE0, 0x08, 0x90, 0x0B, 0x18, 0x12, 0x81, 0x7F, 0x01, 0xE9, 0x0D, 0xDA, 0xC2, 0xFF, - 0x47, 0xFD, 0x07, 0x14, 0xF5, 0xB7, 0x17, 0xE2, 0x33, 0x6C, 0x3B, 0xE1, 0x01, 0x0C, 0x4E, 0x9E, - 0x4F, 0x3F, 0x85, 0x44, 0x5B, 0x9E, 0x24, 0x87, 0xA1, 0x3B, 0x9C, 0xEC, 0xC3, 0x64, 0xE6, 0x92, - 0x85, 0xE7, 0x97, 0xB7, 0xDF, 0x8E, 0x1B, 0xF5, 0xF0, 0x8D, 0x46, 0xF5, 0x3D, 0x8C, 0x4B, 0x96, - 0x39, 0xFA, 0x12, 0x86, 0xA5, 0xC8, 0xF2, 0x20, 0xA5, 0xC1, 0xEC, 0x1F, 0x27, 0xD6, 0xE6, 0x88, - 0x9B, 0xEA, 0xAB, 0x0F, 0x2F, 0xDE, 0x7D, 0x7E, 0xF1, 0xF1, 0xE3, 0x07, 0x6D, 0x09, 0x36, 0xAB, - 0xF7, 0x3F, 0x63, 0xDA, 0x02, 0x93, 0x00, 0xF7, 0x33, 0xD0, 0xE7, 0x7D, 0xA6, 0x48, 0x5B, 0xBF, - 0xFE, 0xF6, 0x6B, 0xFB, 0x37, 0x00, 0xFD, 0xFA, 0x5F, 0x76, 0x9D, 0x31, 0x82, 0xA8, 0x9E, 0x02, - 0x2E, 0x3C, 0xFE, 0x5A, 0x7F, 0x1A, 0x18, 0x7C, 0x23, 0x9D, 0xC2, 0xF0, 0xF5, 0xBA, 0xF5, 0x3D, - 0x60, 0xF5, 0x6E, 0x1F, 0x50, 0xB1, 0x74, 0x10, 0xC6, 0x9C, 0x06, 0x96, 0x2A, 0x4C, 0xE8, 0x40, - 0x7F, 0x06, 0x7F, 0xCE, 0x34, 0xFD, 0x08, 0xFE, 0x3E, 0x7D, 0x1A, 0x99, 0x48, 0xC9, 0xEE, 0xEA, - 0x4F, 0x4D, 0xDA, 0x19, 0xCC, 0x4E, 0x1A, 0xE6, 0x19, 0x48, 0xF2, 0x79, 0x7D, 0xBF, 0x7E, 0x5A, - 0xAF, 0xC3, 0xB5, 0xA0, 0xFB, 0xBB, 0x18, 0x3B, 0x77, 0xCF, 0x42, 0x0E, 0xD9, 0xE8, 0x0A, 0x37, - 0x22, 0xF1, 0x8B, 0x59, 0xDD, 0x4B, 0x56, 0xE5, 0x3A, 0x4F, 0xD7, 0x09, 0x7B, 0x9B, 0xF5, 0x94, - 0x0E, 0x88, 0x22, 0x4C, 0x86, 0x82, 0x58, 0x68, 0x08, 0x7D, 0x2D, 0x15, 0x35, 0x1D, 0x6E, 0xC7, - 0x63, 0x17, 0xB4, 0x4D, 0xAD, 0x65, 0x6F, 0xCD, 0x85, 0xD5, 0x70, 0x60, 0x63, 0x09, 0x8E, 0xB5, - 0xE9, 0x66, 0x26, 0x12, 0xDA, 0x5A, 0xC0, 0xB2, 0x96, 0xF0, 0xB4, 0xEE, 0x2F, 0xD7, 0x61, 0x1A, - 0x9B, 0x2A, 0x6A, 0x6C, 0x2A, 0x68, 0x6C, 0xBA, 0x59, 0x8D, 0x71, 0xD4, 0x95, 0xB5, 0x16, 0xE0, - 0xC9, 0xD1, 0x5C, 0x2E, 0x3C, 0x57, 0x1A, 0xD7, 0xD6, 0x54, 0xA6, 0xAD, 0x32, 0x6A, 0x62, 0xB1, - 0x0B, 0x26, 0x45, 0xC4, 0x7D, 0xFB, 0xF1, 0xDD, 0x77, 0x18, 0x6D, 0xE4, 0x2A, 0x0B, 0x35, 0x96, - 0x4C, 0xAE, 0x24, 0x18, 0x30, 0x28, 0xC6, 0x2A, 0x1F, 0x89, 0xB0, 0xA9, 0x45, 0x15, 0x84, 0x1C, - 0x43, 0xE0, 0x05, 0x03, 0x35, 0xDF, 0xC5, 0x22, 0x41, 0xE0, 0xBC, 0x11, 0x54, 0x86, 0x2D, 0x20, - 0x80, 0x92, 0x12, 0x19, 0xE6, 0x35, 0x87, 0x11, 0x6A, 0x19, 0x3B, 0x77, 0x11, 0xEA, 0xAF, 0x9E, - 0x6A, 0x50, 0x0B, 0xA6, 0xEA, 0x51, 0x6C, 0xF3, 0x72, 0xA5, 0xC3, 0x27, 0xF4, 0x4A, 0x02, 0xE2, - 0x5F, 0x95, 0x93, 0x18, 0x38, 0x2F, 0x04, 0x14, 0xC0, 0x72, 0x2B, 0xC1, 0x42, 0x0B, 0x08, 0x4A, - 0x38, 0xE8, 0x97, 0xC8, 0x52, 0x30, 0xA8, 0x51, 0x41, 0x3F, 0xFD, 0x25, 0xC1, 0x10, 0x94, 0x2A, - 0x94, 0x90, 0x04, 0x9F, 0xAD, 0x4A, 0xC7, 0xA3, 0x46, 0x4C, 0xF0, 0xB1, 0x28, 0x09, 0x1E, 0x5E, - 0x1A, 0x51, 0x42, 0xC3, 0x3F, 0x74, 0x94, 0x8A, 0x45, 0x8D, 0x18, 0xFE, 0x6D, 0x21, 0x19, 0x4F, - 0xBC, 0x14, 0xA3, 0xC6, 0x13, 0xFF, 0x24, 0x4E, 0x3A, 0x1E, 0x45, 0xD9, 0xF0, 0xCF, 0xD0, 0xC8, - 0xAC, 0x8E, 0x55, 0x7E, 0x32, 0x1D, 0x83, 0x35, 0x01, 0x60, 0x9E, 0xAA, 0x3E, 0xD7, 0xC5, 0xCC, - 0x9A, 0x17, 0x8A, 0xB2, 0x30, 0xF0, 0x26, 0x49, 0x0C, 0x41, 0x74, 0xB8, 0x87, 0x92, 0xDD, 0x7D, - 0x44, 0xA1, 0xF7, 0x96, 0xA5, 0x16, 0x85, 0x16, 0x96, 0x15, 0x84, 0x9F, 0x10, 0x26, 0x25, 0xFC, - 0xD0, 0x25, 0x33, 0x5A, 0x6F, 0xCD, 0x94, 0x3F, 0x6D, 0xC1, 0xF0, 0xAE, 0x2B, 0x11, 0x71, 0xCC, - 0x97, 0x96, 0x92, 0x25, 0x41, 0x3B, 0x8E, 0x46, 0x34, 0x24, 0xBA, 0x1C, 0x77, 0xEB, 0xA9, 0x85, - 0xAE, 0x5B, 0x2F, 0x05, 0x03, 0x2D, 0x09, 0xAB, 0xE5, 0x66, 0xD0, 0x32, 0x05, 0xC9, 0xC2, 0x55, - 0x4B, 0xEF, 0xA0, 0x5D, 0x1A, 0x23, 0x58, 0x7F, 0x56, 0x63, 0x25, 0xF8, 0xEA, 0xB8, 0x8C, 0x0E, - 0x5A, 0xB5, 0xCE, 0x52, 0x0A, 0xFF, 0xBA, 0x73, 0x9A, 0x46, 0x16, 0xAA, 0x43, 0x6E, 0xF0, 0xFD, - 0x63, 0xC9, 0xB0, 0x5B, 0xB2, 0xD8, 0xBF, 0x7B, 0xE7, 0x30, 0xAE, 0x89, 0x82, 0x6B, 0x84, 0x2B, - 0xF3, 0x3C, 0xBB, 0x8B, 0xC0, 0x32, 0xBC, 0x63, 0x64, 0xD8, 0xD7, 0x46, 0xCC, 0x3B, 0x46, 0x30, - 0xFD, 0xF5, 0x09, 0x47, 0xDD, 0xA8, 0xB1, 0x06, 0x35, 0x4E, 0x23, 0x3B, 0x3B, 0xA0, 0x5B, 0xD6, - 0xB0, 0x10, 0x62, 0x92, 0x15, 0x3B, 0x89, 0xDD, 0x9E, 0x11, 0xFA, 0x9A, 0x10, 0x7E, 0x9F, 0x9D, - 0xB1, 0x06, 0x61, 0x2F, 0x43, 0x67, 0x7C, 0x7B, 0x60, 0x2C, 0x16, 0x10, 0xBC, 0x2E, 0x66, 0xA6, - 0x35, 0x6E, 0x30, 0x50, 0xC1, 0x44, 0x70, 0x6F, 0x02, 0xA1, 0xAB, 0x56, 0x1C, 0x2B, 0x30, 0x7C, - 0xC1, 0xAE, 0x35, 0xEA, 0xED, 0x71, 0xB0, 0x66, 0xC4, 0x9B, 0x1D, 0x8C, 0x5D, 0x63, 0xF5, 0x2D, - 0x6E, 0x6A, 0x68, 0x60, 0xA7, 0xFB, 0xAD, 0xFD, 0x16, 0x6F, 0xE0, 0xBB, 0xB7, 0x61, 0x96, 0x89, - 0x78, 0x71, 0xF1, 0xF7, 0xC7, 0x0F, 0xDF, 0x45, 0x78, 0x7D, 0xE7, 0x15, 0xBB, 0xD4, 0xA8, 0xD3, - 0x5D, 0x11, 0x87, 0x7F, 0x2C, 0x70, 0x2A, 0x10, 0x28, 0x45, 0x10, 0x23, 0x6E, 0x78, 0x40, 0x51, - 0xB1, 0xE6, 0xCF, 0x44, 0xA4, 0x70, 0xD9, 0x26, 0x2B, 0x0D, 0x30, 0x91, 0x86, 0x0C, 0x34, 0xD8, - 0x0E, 0x81, 0xE0, 0xC8, 0xC9, 0xEB, 0xA5, 0x65, 0xFD, 0x42, 0x0C, 0x17, 0xF4, 0xF1, 0x54, 0x6B, - 0xD4, 0x5A, 0xB5, 0xA7, 0x0D, 0x7A, 0xFD, 0x1D, 0xB0, 0x33, 0x6B, 0xEC, 0x3D, 0xD5, 0xF7, 0xF6, - 0x0E, 0x3C, 0xD0, 0x19, 0x69, 0x34, 0xDB, 0x41, 0x13, 0xF8, 0x43, 0xDB, 0xB0, 0x4E, 0xD2, 0xEF, - 0xBF, 0x75, 0x96, 0xAE, 0x97, 0xD5, 0xE0, 0x9D, 0x69, 0x63, 0x11, 0x27, 0xAB, 0xC9, 0x15, 0x01, - 0xC1, 0x8E, 0xD7, 0x9A, 0xD4, 0xE8, 0x2E, 0x0E, 0x5E, 0xFE, 0xD0, 0xE8, 0xE2, 0xB6, 0xD6, 0x10, - 0x2B, 0x3A, 0x7C, 0x19, 0x91, 0xA0, 0xA1, 0x37, 0x02, 0x8F, 0xBF, 0x13, 0x8D, 0x03, 0x5C, 0x16, - 0x0C, 0xE0, 0x7B, 0xF0, 0x80, 0x03, 0x97, 0xCC, 0x9D, 0x6B, 0xB2, 0xA6, 0x7F, 0x6C, 0x1E, 0x1A, - 0xFF, 0xCC, 0x1C, 0xB3, 0x32, 0x4D, 0x64, 0xB7, 0x58, 0x15, 0xC2, 0x0D, 0x22, 0xB8, 0x85, 0x02, - 0xF7, 0x53, 0x34, 0xEA, 0x6C, 0xF7, 0x0A, 0x1D, 0x15, 0xEE, 0x22, 0xB7, 0x99, 0x39, 0xAB, 0x2C, - 0x48, 0xD6, 0x7B, 0x02, 0x38, 0x84, 0x1E, 0x9B, 0x9E, 0x31, 0xB4, 0xF2, 0xBB, 0xE6, 0xED, 0xC6, - 0xBC, 0xFC, 0x0D, 0x0D, 0x82, 0x2B, 0x00, 0xEA, 0xBB, 0xB4, 0x4E, 0x28, 0xA0, 0x25, 0x76, 0x1E, - 0xD6, 0x80, 0xAC, 0x4C, 0xC4, 0x13, 0x03, 0x26, 0x4F, 0x71, 0xCC, 0xAC, 0x78, 0x5C, 0xA0, 0xAC, - 0x2C, 0x5E, 0x06, 0x88, 0xF8, 0x29, 0x98, 0x33, 0x58, 0xA8, 0xF6, 0x9C, 0xB2, 0xA0, 0x9D, 0xC6, - 0xEE, 0x86, 0xB9, 0x8D, 0x58, 0x30, 0x7D, 0xC4, 0xE2, 0xDF, 0x5F, 0xB0, 0x82, 0x1B, 0x52, 0x1E, - 0x93, 0xC0, 0x93, 0x27, 0x71, 0x6C, 0xB8, 0x8D, 0x85, 0x0D, 0x20, 0x61, 0x6F, 0xAC, 0x3D, 0x7B, - 0x7D, 0x78, 0xB4, 0xB2, 0xC0, 0x49, 0x82, 0xA1, 0xE0, 0x71, 0x4C, 0xF0, 0xC2, 0x18, 0x01, 0x84, - 0x98, 0x63, 0x2A, 0x20, 0xDC, 0x95, 0x56, 0x5B, 0x5B, 0xEF, 0x7F, 0x4E, 0xAD, 0xBE, 0x41, 0xF8, - 0xA6, 0xC4, 0x3D, 0x90, 0x3F, 0x1A, 0x73, 0x74, 0x21, 0x3E, 0x87, 0x4E, 0x60, 0x9C, 0xC6, 0x30, - 0x22, 0x63, 0x09, 0xBA, 0xF1, 0x77, 0x78, 0x48, 0x31, 0x4E, 0x0D, 0xD3, 0xBE, 0x20, 0x26, 0xA6, - 0x7F, 0x7B, 0xC2, 0x5D, 0xDA, 0x3D, 0x20, 0xC2, 0x0D, 0x83, 0xC2, 0x72, 0xC6, 0xFA, 0x7A, 0xC8, - 0xE1, 0x21, 0x6D, 0x9A, 0x82, 0x86, 0x76, 0xB1, 0x8E, 0x26, 0x93, 0xFA, 0xD5, 0xF0, 0x33, 0x62, - 0x93, 0x09, 0x85, 0xA2, 0x5B, 0x0D, 0x51, 0x1C, 0xB4, 0x57, 0x38, 0xCC, 0x42, 0x35, 0x31, 0x46, - 0xE4, 0xB3, 0x0B, 0x71, 0x6C, 0x6A, 0x9B, 0x7F, 0x12, 0x19, 0x42, 0xE6, 0x8C, 0x0D, 0x62, 0xBB, - 0x4E, 0x90, 0x48, 0x22, 0x72, 0xEE, 0x67, 0xF1, 0xEB, 0xF1, 0x21, 0x3A, 0x70, 0xBD, 0x70, 0x69, - 0x5D, 0xB4, 0x05, 0x56, 0xFA, 0x8F, 0x26, 0xC0, 0x91, 0xB1, 0x6D, 0xA8, 0x12, 0xAE, 0x63, 0x19, - 0x3C, 0x6C, 0x22, 0xD6, 0xAB, 0x2B, 0x16, 0xC1, 0x33, 0x70, 0xB2, 0xCD, 0x7D, 0x49, 0xA4, 0xCB, - 0xE1, 0xDC, 0xF4, 0x25, 0x08, 0xEB, 0x7A, 0x5D, 0x8A, 0x2B, 0xA5, 0x9E, 0x2E, 0x7A, 0x22, 0x8B, - 0x66, 0x74, 0xA9, 0x11, 0x10, 0xC5, 0xB6, 0x0A, 0x8C, 0xD8, 0x6E, 0xF5, 0xE7, 0x30, 0xE2, 0xE2, - 0x06, 0x00, 0x54, 0x75, 0x62, 0x0B, 0x10, 0x43, 0xC1, 0xF6, 0xAE, 0x51, 0x14, 0xF1, 0xDD, 0x6B, - 0xC1, 0x8E, 0xB1, 0xF8, 0xCA, 0xA4, 0xB8, 0xF7, 0xE5, 0x77, 0x97, 0x00, 0x9C, 0x87, 0xF3, 0x59, - 0xED, 0x1F, 0x5F, 0x29, 0x8A, 0x3B, 0x6D, 0x02, 0x91, 0xC0, 0x9B, 0x91, 0x31, 0x9D, 0x7B, 0xF9, - 0x4B, 0xEF, 0x54, 0xC3, 0x6D, 0x3F, 0xB1, 0xDD, 0x6A, 0x77, 0xBF, 0x87, 0x16, 0x12, 0x0E, 0x24, - 0xD1, 0x7A, 0x2B, 0x67, 0x7B, 0x6D, 0xDD, 0xF5, 0x91, 0xC2, 0x0A, 0x2B, 0x87, 0x55, 0x5A, 0x65, - 0x95, 0x2D, 0x4E, 0x26, 0xA3, 0x14, 0xCF, 0x31, 0x1F, 0xA9, 0xF4, 0x4D, 0x77, 0x5D, 0xAA, 0x74, - 0x29, 0xC9, 0x2E, 0xF1, 0xC7, 0xC2, 0x98, 0x25, 0x8C, 0xF9, 0x09, 0x3F, 0xDA, 0xE3, 0x72, 0x02, - 0x13, 0x19, 0x07, 0xF1, 0x96, 0x19, 0x11, 0xAE, 0x3E, 0x33, 0x3D, 0xC6, 0x4C, 0x80, 0x49, 0x9B, - 0x0B, 0x3B, 0x7F, 0x4B, 0x22, 0x5F, 0x76, 0x09, 0x95, 0xF5, 0x87, 0x07, 0x79, 0x7B, 0x28, 0x02, - 0x19, 0x0E, 0xEC, 0x40, 0x40, 0x10, 0x13, 0x51, 0x21, 0x15, 0x65, 0xC8, 0x8C, 0xFD, 0x84, 0x01, - 0x9B, 0x8E, 0xD6, 0xB4, 0xE7, 0x5F, 0xA9, 0x55, 0xFF, 0xB6, 0xCF, 0x46, 0x78, 0x21, 0x68, 0xEE, - 0x15, 0x21, 0x68, 0x6D, 0x55, 0x3E, 0x97, 0x98, 0x8D, 0xAD, 0x4F, 0x06, 0x3F, 0x88, 0xC5, 0x14, - 0xDF, 0xB9, 0xD6, 0x5A, 0x5B, 0x97, 0x17, 0x17, 0xD1, 0x42, 0x06, 0x25, 0xB2, 0x11, 0x16, 0xD5, - 0x03, 0xF1, 0x48, 0x17, 0xD0, 0x52, 0xC5, 0xC5, 0xEC, 0x8B, 0x45, 0x14, 0x9C, 0x16, 0x64, 0xCE, - 0x9F, 0xE8, 0x86, 0x59, 0x2A, 0xAF, 0x08, 0xE0, 0x22, 0xDC, 0x20, 0x9D, 0x0B, 0x19, 0x6D, 0xA6, - 0x16, 0x70, 0xD0, 0xF9, 0x98, 0xDA, 0xFA, 0x03, 0x9F, 0xBA, 0x09, 0xA0, 0x88, 0x35, 0x1F, 0x36, - 0x78, 0x4A, 0x26, 0x49, 0xBE, 0x38, 0x7A, 0x65, 0xC1, 0xD3, 0x61, 0x92, 0x35, 0x16, 0xA0, 0xA9, - 0xE7, 0xE7, 0x03, 0x8B, 0xDB, 0xB2, 0xEB, 0x82, 0xB0, 0x3D, 0xDF, 0x59, 0x5C, 0xD1, 0xAB, 0x89, - 0xA8, 0xB0, 0xA2, 0xC5, 0xAC, 0x03, 0xBC, 0x1F, 0xCC, 0x93, 0x44, 0x46, 0xE3, 0xF5, 0xFF, 0x2B, - 0xAC, 0x74, 0x69, 0x0C, 0x4F, 0x3D, 0x9E, 0xED, 0xD2, 0x22, 0x98, 0xB4, 0x07, 0x3A, 0xE7, 0xF4, - 0xDC, 0x11, 0x1B, 0x3C, 0xC2, 0x6D, 0xD0, 0x18, 0x3A, 0xF0, 0xF0, 0x77, 0xD6, 0x27, 0xA6, 0x12, - 0x31, 0x05, 0xEF, 0xE5, 0xD2, 0xE2, 0x2C, 0x92, 0xA4, 0x44, 0x01, 0x9E, 0x39, 0x9B, 0x87, 0xA3, - 0x06, 0x1B, 0x28, 0x31, 0x7C, 0x09, 0xCA, 0x4F, 0x89, 0x91, 0x91, 0x98, 0x78, 0x50, 0x8A, 0x13, - 0x2F, 0x8C, 0x7C, 0x6C, 0x0F, 0xFD, 0xF3, 0xCF, 0xA3, 0x21, 0x0C, 0x76, 0x38, 0x01, 0x04, 0xD7, - 0x5B, 0x35, 0xF6, 0xEE, 0xB2, 0xD8, 0x61, 0xE2, 0x8A, 0x14, 0xA9, 0x4A, 0x04, 0x8D, 0xDA, 0x72, - 0x6C, 0x31, 0xF9, 0xC8, 0xD1, 0x89, 0xD6, 0x7B, 0x69, 0x07, 0x13, 0x96, 0x34, 0xC1, 0x9E, 0xAF, - 0x8B, 0x96, 0xE5, 0xAC, 0x31, 0x04, 0x51, 0x3C, 0x5E, 0x23, 0x36, 0x91, 0x94, 0x0A, 0x76, 0x11, - 0x34, 0x08, 0x68, 0x17, 0x1D, 0x22, 0x85, 0xF6, 0xF8, 0x58, 0x99, 0x48, 0xFF, 0x02, 0x95, 0x5F, - 0x2C, 0x81, 0x88, 0x79, 0xA0, 0x72, 0x76, 0x0D, 0x33, 0xDC, 0xD0, 0x36, 0x21, 0xE3, 0xCD, 0xF2, - 0x19, 0xB8, 0x2D, 0x38, 0x1A, 0x4F, 0x8F, 0x73, 0x00, 0x68, 0x4E, 0xCC, 0x1E, 0x84, 0xA1, 0xB0, - 0x6C, 0xC3, 0xAE, 0xAF, 0x09, 0x89, 0x77, 0x66, 0x7C, 0x81, 0x66, 0x23, 0xD6, 0x4C, 0x40, 0x02, - 0x78, 0xD7, 0xD3, 0x05, 0x89, 0x20, 0xA0, 0xDD, 0x5E, 0xA8, 0x17, 0x04, 0xE2, 0x99, 0x68, 0xA4, - 0x95, 0xF4, 0xD9, 0xC4, 0xFA, 0x4C, 0x22, 0xA1, 0xB0, 0xF4, 0x19, 0xC4, 0xFA, 0xEC, 0xE1, 0x4E, - 0xD0, 0x42, 0xF0, 0xC4, 0x56, 0x24, 0x48, 0x92, 0x2D, 0x75, 0x22, 0x4A, 0x3D, 0x98, 0x49, 0xE5, - 0x40, 0x7C, 0xA6, 0xA9, 0x88, 0x28, 0x32, 0xA2, 0x28, 0x32, 0xC2, 0x45, 0x86, 0x00, 0x51, 0xE2, - 0x9E, 0x3F, 0xAD, 0x0B, 0xE3, 0xCA, 0x4F, 0x2F, 0x23, 0xCE, 0x56, 0xC3, 0x4C, 0x3A, 0xF9, 0x94, - 0x49, 0x60, 0x2F, 0x1B, 0x00, 0xDA, 0xCF, 0x61, 0xDC, 0x16, 0xD9, 0x5A, 0x0D, 0xD5, 0xD8, 0x0A, - 0xA6, 0x5C, 0x08, 0x10, 0xB1, 0x25, 0x9F, 0x98, 0x05, 0xAC, 0xBC, 0x22, 0x3E, 0x7F, 0xAE, 0xD3, - 0xB0, 0xC7, 0xDA, 0xC4, 0x35, 0xE6, 0xC4, 0x83, 0x09, 0x59, 0x48, 0xEC, 0x98, 0xDE, 0xCF, 0x1D, - 0xA2, 0x58, 0x33, 0x81, 0xC9, 0x70, 0x6A, 0x97, 0x0B, 0x1A, 0xB6, 0x14, 0xA0, 0x43, 0x3A, 0x32, - 0xA1, 0x83, 0x46, 0x6C, 0x6C, 0x0B, 0x4F, 0x95, 0x84, 0x15, 0xB6, 0x8E, 0x9C, 0x27, 0x42, 0xC0, - 0x26, 0x4A, 0x03, 0xAD, 0x97, 0x2C, 0x27, 0xB0, 0x84, 0x87, 0x31, 0x9B, 0x48, 0x6B, 0xC4, 0x06, - 0x21, 0x4B, 0xB1, 0x36, 0xA1, 0x83, 0x30, 0xF8, 0x34, 0x32, 0x73, 0x49, 0x61, 0xE5, 0xEA, 0xDA, - 0x7B, 0x8B, 0xE0, 0x34, 0x8F, 0xBF, 0xA9, 0xF3, 0xE2, 0xDB, 0xD7, 0x9A, 0xE3, 0x6A, 0x96, 0xB3, - 0x22, 0xB8, 0x59, 0x34, 0x58, 0x0A, 0xD6, 0x86, 0x04, 0x12, 0x4B, 0xC2, 0x26, 0xD3, 0x18, 0x87, - 0xFC, 0x99, 0xE9, 0x41, 0xEA, 0x8E, 0xEF, 0x93, 0x25, 0x8F, 0x6B, 0x61, 0x31, 0x34, 0x97, 0xBD, - 0xF5, 0xAD, 0x55, 0x31, 0x71, 0x32, 0x98, 0x48, 0x96, 0x8F, 0x39, 0x8F, 0x6B, 0xC1, 0x28, 0x6B, - 0xFA, 0x5E, 0x40, 0x84, 0xE1, 0xED, 0x07, 0x2B, 0x45, 0x39, 0x03, 0xB9, 0x82, 0x0C, 0xC1, 0x22, - 0x59, 0x46, 0xBC, 0xAE, 0x49, 0x53, 0x56, 0x23, 0xC9, 0xD0, 0x28, 0x96, 0x0B, 0xA5, 0x71, 0x3E, - 0x5D, 0x2B, 0x4C, 0xE2, 0x2C, 0x55, 0x67, 0xBF, 0xB3, 0xC3, 0xE0, 0xB1, 0x39, 0x76, 0x86, 0x8B, - 0x05, 0x83, 0x47, 0x67, 0x87, 0x33, 0x7F, 0x6E, 0x0D, 0x1E, 0xFD, 0x2F, 0x5E, 0x72, 0x0B, 0x89, - 0x42, 0x10, 0x01, 0x00 -}; - diff --git a/C/Sketches/Sketch_06.1_CameraWebServer/camera_pins.h b/C/Sketches/Sketch_06.1_CameraWebServer/camera_pins.h deleted file mode 100644 index e1be287..0000000 --- a/C/Sketches/Sketch_06.1_CameraWebServer/camera_pins.h +++ /dev/null @@ -1,273 +0,0 @@ - -#if defined(CAMERA_MODEL_WROVER_KIT) -#define PWDN_GPIO_NUM -1 -#define RESET_GPIO_NUM -1 -#define XCLK_GPIO_NUM 21 -#define SIOD_GPIO_NUM 26 -#define SIOC_GPIO_NUM 27 - -#define Y9_GPIO_NUM 35 -#define Y8_GPIO_NUM 34 -#define Y7_GPIO_NUM 39 -#define Y6_GPIO_NUM 36 -#define Y5_GPIO_NUM 19 -#define Y4_GPIO_NUM 18 -#define Y3_GPIO_NUM 5 -#define Y2_GPIO_NUM 4 -#define VSYNC_GPIO_NUM 25 -#define HREF_GPIO_NUM 23 -#define PCLK_GPIO_NUM 22 - -#elif defined(CAMERA_MODEL_ESP_EYE) -#define PWDN_GPIO_NUM -1 -#define RESET_GPIO_NUM -1 -#define XCLK_GPIO_NUM 4 -#define SIOD_GPIO_NUM 18 -#define SIOC_GPIO_NUM 23 - -#define Y9_GPIO_NUM 36 -#define Y8_GPIO_NUM 37 -#define Y7_GPIO_NUM 38 -#define Y6_GPIO_NUM 39 -#define Y5_GPIO_NUM 35 -#define Y4_GPIO_NUM 14 -#define Y3_GPIO_NUM 13 -#define Y2_GPIO_NUM 34 -#define VSYNC_GPIO_NUM 5 -#define HREF_GPIO_NUM 27 -#define PCLK_GPIO_NUM 25 - -#elif defined(CAMERA_MODEL_M5STACK_PSRAM) -#define PWDN_GPIO_NUM -1 -#define RESET_GPIO_NUM 15 -#define XCLK_GPIO_NUM 27 -#define SIOD_GPIO_NUM 25 -#define SIOC_GPIO_NUM 23 - -#define Y9_GPIO_NUM 19 -#define Y8_GPIO_NUM 36 -#define Y7_GPIO_NUM 18 -#define Y6_GPIO_NUM 39 -#define Y5_GPIO_NUM 5 -#define Y4_GPIO_NUM 34 -#define Y3_GPIO_NUM 35 -#define Y2_GPIO_NUM 32 -#define VSYNC_GPIO_NUM 22 -#define HREF_GPIO_NUM 26 -#define PCLK_GPIO_NUM 21 - -#elif defined(CAMERA_MODEL_M5STACK_V2_PSRAM) -#define PWDN_GPIO_NUM -1 -#define RESET_GPIO_NUM 15 -#define XCLK_GPIO_NUM 27 -#define SIOD_GPIO_NUM 22 -#define SIOC_GPIO_NUM 23 - -#define Y9_GPIO_NUM 19 -#define Y8_GPIO_NUM 36 -#define Y7_GPIO_NUM 18 -#define Y6_GPIO_NUM 39 -#define Y5_GPIO_NUM 5 -#define Y4_GPIO_NUM 34 -#define Y3_GPIO_NUM 35 -#define Y2_GPIO_NUM 32 -#define VSYNC_GPIO_NUM 25 -#define HREF_GPIO_NUM 26 -#define PCLK_GPIO_NUM 21 - -#elif defined(CAMERA_MODEL_M5STACK_WIDE) -#define PWDN_GPIO_NUM -1 -#define RESET_GPIO_NUM 15 -#define XCLK_GPIO_NUM 27 -#define SIOD_GPIO_NUM 22 -#define SIOC_GPIO_NUM 23 - -#define Y9_GPIO_NUM 19 -#define Y8_GPIO_NUM 36 -#define Y7_GPIO_NUM 18 -#define Y6_GPIO_NUM 39 -#define Y5_GPIO_NUM 5 -#define Y4_GPIO_NUM 34 -#define Y3_GPIO_NUM 35 -#define Y2_GPIO_NUM 32 -#define VSYNC_GPIO_NUM 25 -#define HREF_GPIO_NUM 26 -#define PCLK_GPIO_NUM 21 - -#elif defined(CAMERA_MODEL_M5STACK_ESP32CAM) -#define PWDN_GPIO_NUM -1 -#define RESET_GPIO_NUM 15 -#define XCLK_GPIO_NUM 27 -#define SIOD_GPIO_NUM 25 -#define SIOC_GPIO_NUM 23 - -#define Y9_GPIO_NUM 19 -#define Y8_GPIO_NUM 36 -#define Y7_GPIO_NUM 18 -#define Y6_GPIO_NUM 39 -#define Y5_GPIO_NUM 5 -#define Y4_GPIO_NUM 34 -#define Y3_GPIO_NUM 35 -#define Y2_GPIO_NUM 17 -#define VSYNC_GPIO_NUM 22 -#define HREF_GPIO_NUM 26 -#define PCLK_GPIO_NUM 21 - -#elif defined(CAMERA_MODEL_M5STACK_UNITCAM) -#define PWDN_GPIO_NUM -1 -#define RESET_GPIO_NUM 15 -#define XCLK_GPIO_NUM 27 -#define SIOD_GPIO_NUM 25 -#define SIOC_GPIO_NUM 23 - -#define Y9_GPIO_NUM 19 -#define Y8_GPIO_NUM 36 -#define Y7_GPIO_NUM 18 -#define Y6_GPIO_NUM 39 -#define Y5_GPIO_NUM 5 -#define Y4_GPIO_NUM 34 -#define Y3_GPIO_NUM 35 -#define Y2_GPIO_NUM 32 -#define VSYNC_GPIO_NUM 22 -#define HREF_GPIO_NUM 26 -#define PCLK_GPIO_NUM 21 - -#elif defined(CAMERA_MODEL_AI_THINKER) -#define PWDN_GPIO_NUM 32 -#define RESET_GPIO_NUM -1 -#define XCLK_GPIO_NUM 0 -#define SIOD_GPIO_NUM 26 -#define SIOC_GPIO_NUM 27 - -#define Y9_GPIO_NUM 35 -#define Y8_GPIO_NUM 34 -#define Y7_GPIO_NUM 39 -#define Y6_GPIO_NUM 36 -#define Y5_GPIO_NUM 21 -#define Y4_GPIO_NUM 19 -#define Y3_GPIO_NUM 18 -#define Y2_GPIO_NUM 5 -#define VSYNC_GPIO_NUM 25 -#define HREF_GPIO_NUM 23 -#define PCLK_GPIO_NUM 22 - -#elif defined(CAMERA_MODEL_TTGO_T_JOURNAL) -#define PWDN_GPIO_NUM 0 -#define RESET_GPIO_NUM 15 -#define XCLK_GPIO_NUM 27 -#define SIOD_GPIO_NUM 25 -#define SIOC_GPIO_NUM 23 - -#define Y9_GPIO_NUM 19 -#define Y8_GPIO_NUM 36 -#define Y7_GPIO_NUM 18 -#define Y6_GPIO_NUM 39 -#define Y5_GPIO_NUM 5 -#define Y4_GPIO_NUM 34 -#define Y3_GPIO_NUM 35 -#define Y2_GPIO_NUM 17 -#define VSYNC_GPIO_NUM 22 -#define HREF_GPIO_NUM 26 -#define PCLK_GPIO_NUM 21 - - -#elif defined(CAMERA_MODEL_ESP32_CAM_BOARD) -// The 18 pin header on the board has Y5 and Y3 swapped -#define USE_BOARD_HEADER 0 -#define PWDN_GPIO_NUM 32 -#define RESET_GPIO_NUM 33 -#define XCLK_GPIO_NUM 4 -#define SIOD_GPIO_NUM 18 -#define SIOC_GPIO_NUM 23 - -#define Y9_GPIO_NUM 36 -#define Y8_GPIO_NUM 19 -#define Y7_GPIO_NUM 21 -#define Y6_GPIO_NUM 39 -#if USE_BOARD_HEADER -#define Y5_GPIO_NUM 13 -#else -#define Y5_GPIO_NUM 35 -#endif -#define Y4_GPIO_NUM 14 -#if USE_BOARD_HEADER -#define Y3_GPIO_NUM 35 -#else -#define Y3_GPIO_NUM 13 -#endif -#define Y2_GPIO_NUM 34 -#define VSYNC_GPIO_NUM 5 -#define HREF_GPIO_NUM 27 -#define PCLK_GPIO_NUM 25 - -#elif defined(CAMERA_MODEL_ESP32S3_CAM_LCD) -#define PWDN_GPIO_NUM -1 -#define RESET_GPIO_NUM -1 -#define XCLK_GPIO_NUM 40 -#define SIOD_GPIO_NUM 17 -#define SIOC_GPIO_NUM 18 - -#define Y9_GPIO_NUM 39 -#define Y8_GPIO_NUM 41 -#define Y7_GPIO_NUM 42 -#define Y6_GPIO_NUM 12 -#define Y5_GPIO_NUM 3 -#define Y4_GPIO_NUM 14 -#define Y3_GPIO_NUM 47 -#define Y2_GPIO_NUM 13 -#define VSYNC_GPIO_NUM 21 -#define HREF_GPIO_NUM 38 -#define PCLK_GPIO_NUM 11 - -#elif defined(CAMERA_MODEL_ESP32S2_CAM_BOARD) -// The 18 pin header on the board has Y5 and Y3 swapped -#define USE_BOARD_HEADER 0 -#define PWDN_GPIO_NUM 1 -#define RESET_GPIO_NUM 2 -#define XCLK_GPIO_NUM 42 -#define SIOD_GPIO_NUM 41 -#define SIOC_GPIO_NUM 18 - -#define Y9_GPIO_NUM 16 -#define Y8_GPIO_NUM 39 -#define Y7_GPIO_NUM 40 -#define Y6_GPIO_NUM 15 -#if USE_BOARD_HEADER -#define Y5_GPIO_NUM 12 -#else -#define Y5_GPIO_NUM 13 -#endif -#define Y4_GPIO_NUM 5 -#if USE_BOARD_HEADER -#define Y3_GPIO_NUM 13 -#else -#define Y3_GPIO_NUM 12 -#endif -#define Y2_GPIO_NUM 14 -#define VSYNC_GPIO_NUM 38 -#define HREF_GPIO_NUM 4 -#define PCLK_GPIO_NUM 3 - -#elif defined(CAMERA_MODEL_ESP32S3_EYE) -#define PWDN_GPIO_NUM -1 -#define RESET_GPIO_NUM -1 -#define XCLK_GPIO_NUM 15 -#define SIOD_GPIO_NUM 4 -#define SIOC_GPIO_NUM 5 - -#define Y2_GPIO_NUM 11 -#define Y3_GPIO_NUM 9 -#define Y4_GPIO_NUM 8 -#define Y5_GPIO_NUM 10 -#define Y6_GPIO_NUM 12 -#define Y7_GPIO_NUM 18 -#define Y8_GPIO_NUM 17 -#define Y9_GPIO_NUM 16 - -#define VSYNC_GPIO_NUM 6 -#define HREF_GPIO_NUM 7 -#define PCLK_GPIO_NUM 13 - -#else -#error "Camera model not selected" -#endif diff --git a/C/Sketches/Sketch_06.2_As_VideoWebServer/Sketch_06.2_As_VideoWebServer.ino b/C/Sketches/Sketch_06.2_As_VideoWebServer/Sketch_06.2_As_VideoWebServer.ino deleted file mode 100644 index 239ea72..0000000 --- a/C/Sketches/Sketch_06.2_As_VideoWebServer/Sketch_06.2_As_VideoWebServer.ino +++ /dev/null @@ -1,88 +0,0 @@ -#include "esp_camera.h" -#include -// -// WARNING!!! PSRAM IC required for UXGA resolution and high JPEG quality -// Ensure ESP32 Wrover Module or other board with PSRAM is selected -// Partial images will be transmitted if image exceeds buffer size -// - -// Select camera model -#define CAMERA_MODEL_WROVER_KIT // Has PSRAM - -#include "camera_pins.h" - -const char* ssid = "********"; //input your wifi name -const char* password = "********"; //input your wifi passwords - -void startCameraServer(); - -void setup() { - Serial.begin(115200); - Serial.setDebugOutput(true); - Serial.println(); - - camera_config_t config; - config.ledc_channel = LEDC_CHANNEL_0; - config.ledc_timer = LEDC_TIMER_0; - config.pin_d0 = Y2_GPIO_NUM; - config.pin_d1 = Y3_GPIO_NUM; - config.pin_d2 = Y4_GPIO_NUM; - config.pin_d3 = Y5_GPIO_NUM; - config.pin_d4 = Y6_GPIO_NUM; - config.pin_d5 = Y7_GPIO_NUM; - config.pin_d6 = Y8_GPIO_NUM; - config.pin_d7 = Y9_GPIO_NUM; - config.pin_xclk = XCLK_GPIO_NUM; - config.pin_pclk = PCLK_GPIO_NUM; - config.pin_vsync = VSYNC_GPIO_NUM; - config.pin_href = HREF_GPIO_NUM; - config.pin_sccb_sda = SIOD_GPIO_NUM; - config.pin_sccb_scl = SIOC_GPIO_NUM; - config.pin_pwdn = PWDN_GPIO_NUM; - config.pin_reset = RESET_GPIO_NUM; - config.xclk_freq_hz = 20000000; - config.pixel_format = PIXFORMAT_JPEG; - - // if PSRAM IC present, init with UXGA resolution and higher JPEG quality - // for larger pre-allocated frame buffer. - if(psramFound()){ - config.frame_size = FRAMESIZE_UXGA; - config.jpeg_quality = 10; - config.fb_count = 2; - } else { - config.frame_size = FRAMESIZE_SVGA; - config.jpeg_quality = 12; - config.fb_count = 1; - } - - // camera init - esp_err_t err = esp_camera_init(&config); - if (err != ESP_OK) { - Serial.printf("Camera init failed with error 0x%x", err); - return; - } - - sensor_t * s = esp_camera_sensor_get(); - // drop down frame size for higher initial frame rate - s->set_framesize(s, FRAMESIZE_VGA); - - WiFi.begin(ssid, password); - - while (WiFi.status() != WL_CONNECTED) { - delay(500); - Serial.print("."); - } - Serial.println(""); - Serial.println("WiFi connected"); - - startCameraServer(); - - Serial.print("Camera Ready! Use 'http://"); - Serial.print(WiFi.localIP()); - Serial.println("' to connect"); -} - -void loop() { - // put your main code here, to run repeatedly: - delay(10000); -} diff --git a/C/Sketches/Sketch_06.2_As_VideoWebServer/app_httpd.cpp b/C/Sketches/Sketch_06.2_As_VideoWebServer/app_httpd.cpp deleted file mode 100644 index df6378e..0000000 --- a/C/Sketches/Sketch_06.2_As_VideoWebServer/app_httpd.cpp +++ /dev/null @@ -1,267 +0,0 @@ -// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -#include "esp_http_server.h" -#include "esp_timer.h" -#include "esp_camera.h" -#include "img_converters.h" -#include "fb_gfx.h" -#include "driver/ledc.h" - -#include "sdkconfig.h" - -#if defined(ARDUINO_ARCH_ESP32) && defined(CONFIG_ARDUHAL_ESP_LOG) -#include "esp32-hal-log.h" -#define TAG "" -#else -#include "esp_log.h" -static const char *TAG = "camera_httpd"; -#endif - -typedef struct -{ - httpd_req_t *req; - size_t len; -} jpg_chunking_t; - -#define PART_BOUNDARY "123456789000000000000987654321" -static const char *_STREAM_CONTENT_TYPE = "multipart/x-mixed-replace;boundary=" PART_BOUNDARY; -static const char *_STREAM_BOUNDARY = "\r\n--" PART_BOUNDARY "\r\n"; -static const char *_STREAM_PART = "Content-Type: image/jpeg\r\nContent-Length: %u\r\nX-Timestamp: %d.%06d\r\n\r\n"; - -httpd_handle_t stream_httpd = NULL; -httpd_handle_t camera_httpd = NULL; - -typedef struct -{ - size_t size; // number of values used for filtering - size_t index; // current value index - size_t count; // value count - int sum; - int *values; // array to be filled with values -} ra_filter_t; - -static ra_filter_t ra_filter; - -static ra_filter_t *ra_filter_init(ra_filter_t *filter, size_t sample_size) -{ - memset(filter, 0, sizeof(ra_filter_t)); - - filter->values = (int *)malloc(sample_size * sizeof(int)); - if (!filter->values) - { - return NULL; - } - memset(filter->values, 0, sample_size * sizeof(int)); - - filter->size = sample_size; - return filter; -} - -static int ra_filter_run(ra_filter_t *filter, int value) -{ - if (!filter->values) - { - return value; - } - filter->sum -= filter->values[filter->index]; - filter->values[filter->index] = value; - filter->sum += filter->values[filter->index]; - filter->index++; - filter->index = filter->index % filter->size; - if (filter->count < filter->size) - { - filter->count++; - } - return filter->sum / filter->count; -} - -static esp_err_t stream_handler(httpd_req_t *req) -{ - camera_fb_t *fb = NULL; - struct timeval _timestamp; - esp_err_t res = ESP_OK; - size_t _jpg_buf_len = 0; - uint8_t *_jpg_buf = NULL; - char *part_buf[128]; - - static int64_t last_frame = 0; - if (!last_frame) - { - last_frame = esp_timer_get_time(); - } - - res = httpd_resp_set_type(req, _STREAM_CONTENT_TYPE); - if (res != ESP_OK) - { - return res; - } - - httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*"); - httpd_resp_set_hdr(req, "X-Framerate", "60"); - - while (true) - { - fb = esp_camera_fb_get(); - if (!fb) - { - ESP_LOGE(TAG, "Camera capture failed"); - res = ESP_FAIL; - } - else - { - _timestamp.tv_sec = fb->timestamp.tv_sec; - _timestamp.tv_usec = fb->timestamp.tv_usec; - if (fb->format != PIXFORMAT_JPEG) - { - bool jpeg_converted = frame2jpg(fb, 80, &_jpg_buf, &_jpg_buf_len); - esp_camera_fb_return(fb); - fb = NULL; - if (!jpeg_converted) - { - ESP_LOGE(TAG, "JPEG compression failed"); - res = ESP_FAIL; - } - } - else - { - _jpg_buf_len = fb->len; - _jpg_buf = fb->buf; - } - } - if (res == ESP_OK) - { - res = httpd_resp_send_chunk(req, _STREAM_BOUNDARY, strlen(_STREAM_BOUNDARY)); - } - if (res == ESP_OK) - { - size_t hlen = snprintf((char *)part_buf, 128, _STREAM_PART, _jpg_buf_len, _timestamp.tv_sec, _timestamp.tv_usec); - res = httpd_resp_send_chunk(req, (const char *)part_buf, hlen); - } - if (res == ESP_OK) - { - res = httpd_resp_send_chunk(req, (const char *)_jpg_buf, _jpg_buf_len); - } - if (fb) - { - esp_camera_fb_return(fb); - fb = NULL; - _jpg_buf = NULL; - } - else if (_jpg_buf) - { - free(_jpg_buf); - _jpg_buf = NULL; - } - if (res != ESP_OK) - { - ESP_LOGI(TAG, "res != ESP_OK : %d , break!", res); - break; - } - int64_t fr_end = esp_timer_get_time(); - - int64_t frame_time = fr_end - last_frame; - last_frame = fr_end; - frame_time /= 1000; - uint32_t avg_frame_time = ra_filter_run(&ra_filter, frame_time); - ESP_LOGI(TAG, "MJPG: %uB %ums (%.1ffps), AVG: %ums (%.1ffps)", - (uint32_t)(_jpg_buf_len), - (uint32_t)frame_time, 1000.0 / (uint32_t)frame_time, - avg_frame_time, 1000.0 / avg_frame_time); - } - ESP_LOGI(TAG, "Stream exit!"); - last_frame = 0; - return res; -} - -static esp_err_t parse_get(httpd_req_t *req, char **obuf) -{ - char *buf = NULL; - size_t buf_len = 0; - - buf_len = httpd_req_get_url_query_len(req) + 1; - if (buf_len > 1) - { - buf = (char *)malloc(buf_len); - if (!buf) - { - httpd_resp_send_500(req); - return ESP_FAIL; - } - if (httpd_req_get_url_query_str(req, buf, buf_len) == ESP_OK) - { - *obuf = buf; - return ESP_OK; - } - free(buf); - } - httpd_resp_send_404(req); - return ESP_FAIL; -} - -const char index_web[] = -"\ -\ - \ - Video Streaming Demonstration\ - \ - \ -

Video Streaming Demonstration

\ - \ - \ -\ -"; - -static esp_err_t index_handler(httpd_req_t *req) -{ - httpd_resp_set_type(req, "text/html"); - // httpd_resp_set_hdr(req, "Content-Encoding", "gzip"); - sensor_t *s = esp_camera_sensor_get(); - if (s != NULL) - { - // return httpd_resp_sendstr(req, (const char *)index_web); - return httpd_resp_send(req, (const char *)index_web, sizeof(index_web)); - // return httpd_resp_send(req, (const char *)index_ov2640_html_gz, index_ov2640_html_gz_len); - } - else - { - ESP_LOGE(TAG, "Camera sensor not found"); - return httpd_resp_send_500(req); - } -} - -void startCameraServer() -{ - httpd_config_t config = HTTPD_DEFAULT_CONFIG(); - config.max_uri_handlers = 16; - - httpd_uri_t index_uri = { - .uri = "/", - .method = HTTP_GET, - .handler = index_handler, - .user_ctx = NULL}; - - httpd_uri_t stream_uri = { - .uri = "/stream", - .method = HTTP_GET, - .handler = stream_handler, - .user_ctx = NULL}; - ra_filter_init(&ra_filter, 20); - - ESP_LOGI(TAG, "Starting web server on port: '%d'", config.server_port); - if (httpd_start(&camera_httpd, &config) == ESP_OK) - { - httpd_register_uri_handler(camera_httpd, &index_uri); - httpd_register_uri_handler(camera_httpd, &stream_uri); - } -} diff --git a/C/Sketches/Sketch_06.2_As_VideoWebServer/camera_pins.h b/C/Sketches/Sketch_06.2_As_VideoWebServer/camera_pins.h deleted file mode 100644 index 8b7e1d8..0000000 --- a/C/Sketches/Sketch_06.2_As_VideoWebServer/camera_pins.h +++ /dev/null @@ -1,175 +0,0 @@ - -#if defined(CAMERA_MODEL_WROVER_KIT) -#define PWDN_GPIO_NUM -1 -#define RESET_GPIO_NUM -1 -#define XCLK_GPIO_NUM 21 -#define SIOD_GPIO_NUM 26 -#define SIOC_GPIO_NUM 27 - -#define Y9_GPIO_NUM 35 -#define Y8_GPIO_NUM 34 -#define Y7_GPIO_NUM 39 -#define Y6_GPIO_NUM 36 -#define Y5_GPIO_NUM 19 -#define Y4_GPIO_NUM 18 -#define Y3_GPIO_NUM 5 -#define Y2_GPIO_NUM 4 -#define VSYNC_GPIO_NUM 25 -#define HREF_GPIO_NUM 23 -#define PCLK_GPIO_NUM 22 - -#elif defined(CAMERA_MODEL_ESP_EYE) -#define PWDN_GPIO_NUM -1 -#define RESET_GPIO_NUM -1 -#define XCLK_GPIO_NUM 4 -#define SIOD_GPIO_NUM 18 -#define SIOC_GPIO_NUM 23 - -#define Y9_GPIO_NUM 36 -#define Y8_GPIO_NUM 37 -#define Y7_GPIO_NUM 38 -#define Y6_GPIO_NUM 39 -#define Y5_GPIO_NUM 35 -#define Y4_GPIO_NUM 14 -#define Y3_GPIO_NUM 13 -#define Y2_GPIO_NUM 34 -#define VSYNC_GPIO_NUM 5 -#define HREF_GPIO_NUM 27 -#define PCLK_GPIO_NUM 25 - -#elif defined(CAMERA_MODEL_M5STACK_PSRAM) -#define PWDN_GPIO_NUM -1 -#define RESET_GPIO_NUM 15 -#define XCLK_GPIO_NUM 27 -#define SIOD_GPIO_NUM 25 -#define SIOC_GPIO_NUM 23 - -#define Y9_GPIO_NUM 19 -#define Y8_GPIO_NUM 36 -#define Y7_GPIO_NUM 18 -#define Y6_GPIO_NUM 39 -#define Y5_GPIO_NUM 5 -#define Y4_GPIO_NUM 34 -#define Y3_GPIO_NUM 35 -#define Y2_GPIO_NUM 32 -#define VSYNC_GPIO_NUM 22 -#define HREF_GPIO_NUM 26 -#define PCLK_GPIO_NUM 21 - -#elif defined(CAMERA_MODEL_M5STACK_V2_PSRAM) -#define PWDN_GPIO_NUM -1 -#define RESET_GPIO_NUM 15 -#define XCLK_GPIO_NUM 27 -#define SIOD_GPIO_NUM 22 -#define SIOC_GPIO_NUM 23 - -#define Y9_GPIO_NUM 19 -#define Y8_GPIO_NUM 36 -#define Y7_GPIO_NUM 18 -#define Y6_GPIO_NUM 39 -#define Y5_GPIO_NUM 5 -#define Y4_GPIO_NUM 34 -#define Y3_GPIO_NUM 35 -#define Y2_GPIO_NUM 32 -#define VSYNC_GPIO_NUM 25 -#define HREF_GPIO_NUM 26 -#define PCLK_GPIO_NUM 21 - -#elif defined(CAMERA_MODEL_M5STACK_WIDE) -#define PWDN_GPIO_NUM -1 -#define RESET_GPIO_NUM 15 -#define XCLK_GPIO_NUM 27 -#define SIOD_GPIO_NUM 22 -#define SIOC_GPIO_NUM 23 - -#define Y9_GPIO_NUM 19 -#define Y8_GPIO_NUM 36 -#define Y7_GPIO_NUM 18 -#define Y6_GPIO_NUM 39 -#define Y5_GPIO_NUM 5 -#define Y4_GPIO_NUM 34 -#define Y3_GPIO_NUM 35 -#define Y2_GPIO_NUM 32 -#define VSYNC_GPIO_NUM 25 -#define HREF_GPIO_NUM 26 -#define PCLK_GPIO_NUM 21 - -#elif defined(CAMERA_MODEL_M5STACK_ESP32CAM) -#define PWDN_GPIO_NUM -1 -#define RESET_GPIO_NUM 15 -#define XCLK_GPIO_NUM 27 -#define SIOD_GPIO_NUM 25 -#define SIOC_GPIO_NUM 23 - -#define Y9_GPIO_NUM 19 -#define Y8_GPIO_NUM 36 -#define Y7_GPIO_NUM 18 -#define Y6_GPIO_NUM 39 -#define Y5_GPIO_NUM 5 -#define Y4_GPIO_NUM 34 -#define Y3_GPIO_NUM 35 -#define Y2_GPIO_NUM 17 -#define VSYNC_GPIO_NUM 22 -#define HREF_GPIO_NUM 26 -#define PCLK_GPIO_NUM 21 - -#elif defined(CAMERA_MODEL_M5STACK_UNITCAM) -#define PWDN_GPIO_NUM -1 -#define RESET_GPIO_NUM 15 -#define XCLK_GPIO_NUM 27 -#define SIOD_GPIO_NUM 25 -#define SIOC_GPIO_NUM 23 - -#define Y9_GPIO_NUM 19 -#define Y8_GPIO_NUM 36 -#define Y7_GPIO_NUM 18 -#define Y6_GPIO_NUM 39 -#define Y5_GPIO_NUM 5 -#define Y4_GPIO_NUM 34 -#define Y3_GPIO_NUM 35 -#define Y2_GPIO_NUM 32 -#define VSYNC_GPIO_NUM 22 -#define HREF_GPIO_NUM 26 -#define PCLK_GPIO_NUM 21 - -#elif defined(CAMERA_MODEL_AI_THINKER) -#define PWDN_GPIO_NUM 32 -#define RESET_GPIO_NUM -1 -#define XCLK_GPIO_NUM 0 -#define SIOD_GPIO_NUM 26 -#define SIOC_GPIO_NUM 27 - -#define Y9_GPIO_NUM 35 -#define Y8_GPIO_NUM 34 -#define Y7_GPIO_NUM 39 -#define Y6_GPIO_NUM 36 -#define Y5_GPIO_NUM 21 -#define Y4_GPIO_NUM 19 -#define Y3_GPIO_NUM 18 -#define Y2_GPIO_NUM 5 -#define VSYNC_GPIO_NUM 25 -#define HREF_GPIO_NUM 23 -#define PCLK_GPIO_NUM 22 - -#elif defined(CAMERA_MODEL_TTGO_T_JOURNAL) -#define PWDN_GPIO_NUM 0 -#define RESET_GPIO_NUM 15 -#define XCLK_GPIO_NUM 27 -#define SIOD_GPIO_NUM 25 -#define SIOC_GPIO_NUM 23 - -#define Y9_GPIO_NUM 19 -#define Y8_GPIO_NUM 36 -#define Y7_GPIO_NUM 18 -#define Y6_GPIO_NUM 39 -#define Y5_GPIO_NUM 5 -#define Y4_GPIO_NUM 34 -#define Y3_GPIO_NUM 35 -#define Y2_GPIO_NUM 17 -#define VSYNC_GPIO_NUM 22 -#define HREF_GPIO_NUM 26 -#define PCLK_GPIO_NUM 21 - -#else -#error "Camera model not selected" -#endif diff --git a/CH340/Linux/CH341SER_LINUX.ZIP b/CH340/Linux/CH341SER_LINUX.ZIP deleted file mode 100644 index 6621ea6..0000000 Binary files a/CH340/Linux/CH341SER_LINUX.ZIP and /dev/null differ diff --git a/CH340/Linux/Linux.png b/CH340/Linux/Linux.png deleted file mode 100644 index 887fcf0..0000000 Binary files a/CH340/Linux/Linux.png and /dev/null differ diff --git a/CH340/MAC/CH341SER_MAC.ZIP b/CH340/MAC/CH341SER_MAC.ZIP deleted file mode 100644 index 8bbf572..0000000 Binary files a/CH340/MAC/CH341SER_MAC.ZIP and /dev/null differ diff --git a/CH340/Windows/CH341SER.EXE b/CH340/Windows/CH341SER.EXE deleted file mode 100644 index de9f76e..0000000 Binary files a/CH340/Windows/CH341SER.EXE and /dev/null differ diff --git a/CH340/Windows/CH341SER.ZIP b/CH340/Windows/CH341SER.ZIP deleted file mode 100644 index 310dc4d..0000000 Binary files a/CH340/Windows/CH341SER.ZIP and /dev/null differ diff --git a/Datasheet/74HC595.pdf b/Datasheet/74HC595.pdf deleted file mode 100644 index 0dac860..0000000 Binary files a/Datasheet/74HC595.pdf and /dev/null differ diff --git a/Datasheet/ESP32-Pinout_V1.6.pdf b/Datasheet/ESP32-Pinout_V1.6.pdf deleted file mode 100644 index 434b47b..0000000 --- a/Datasheet/ESP32-Pinout_V1.6.pdf +++ /dev/null @@ -1,2599 +0,0 @@ -%PDF-1.5 % -1 0 obj <>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream - - - - - 2022-12-05T09:13:52+09:00 - 2022-12-05T09:13:52+08:00 - 2022-12-05T09:13:52+08:00 - Adobe Illustrator CS6 (Windows) - - - - 256 - 96 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAYAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8Amer/AJCardaB6FuLNdUu Lm/u7mUwwqQzpP8AVV9VU5MwaXaRqtHWo6YKTajq35NeaLxdd9PToOepajBeRvJLZu7W8dysrRM7 2zu7cB/u5pEJH2aY0oKOvPyf86S6s15pt3HpkFwjJ9WEi8bZk8uDTLaWIQoiqy3EkivwUfCEKgUp jSba/wCVO+ZGTnZWlno1tezLYX2kw3DyRx6Xc28UeoujBEBlmlgVgtBWlSeROKLRun/lf5gt/Kvn rSRZW8d35gmnktJ1e2CyrJdTSxI5SBZPhjlH980lOi0XbGltDP8AlZ5oSfTZNP0uztEi0i70y6Ek 8LBfWW5IMUVvbW8cUjyzKzNGQjAnktVBxW0bpX5P6pocXl6GwZLk2F8+pXtwZvqoj9SJI5bOGGGM n0XVNgJQC1S4YEglbXz+QfOV1+Xc+mwWlvpPmCHUzfaZElwZ7WBZSY39EkAoEglfb9p6ttyoFWNT fkR5seHT/Uminl0y4nMchlCzPawfo23s445goMMj2unvWRRVWb3wUm03k/Krzd9bnv7WC1tdVspL i9h1AXDs2p3n6SjvLNrlSo4CKCN4TyLUEhVfhxRaAP5Ja/FJqUQtba6e90qK0W/drev1owp9alIa Ez/vJeeyyhSG3U4VtP4fy01608oaNoz2lvqkGlareXN9pMk5gtb23m9cW5UBHWIRNNG4h48VK7dA SraWar+Vv5hald67M0tpaQ+Y5LNZIYJHL2UemX1q1oySt8MlLaKVgFjWjnvXAtphb/lR5lvvK36G 166gkvLzW7jVNSvY1WdAtzYyxu8Mcw6rPJSKoqmzU2pioKJi8lfmPp000Oi6o1tawLw08yyRujs8 s6NNdLwJkcQvG5PUsO+CmVhT0Ly5+b9vp9pBfXskizXcP1kS3wluLe1S5tJJj6yxIJTKkVyABQqr qN+xQSGeeSNM1DSvKel6bqJdr6zgEFw7ymcu8ZKl1kO5VqclB3C0B6YUFO8UOxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV5vd/85F/k 5aXl1Zz68wuLOV4LlFsdQcJJGxV1LJbsuxHY4qoH/nJn8khF6p8wt6X+/PqGo8fDr9Xpiq4/85Kf kuqljr0gUCpY6fqVKeP+82Ks98veYNI8xaLa61o9x9a0y9T1LW44PHzUErXhIqONx3GKphirsVdi rsVdirsVdirsVdir568r/mjqFzpF1JJqd3qJjZ/9MleK0dPhQhViNynPjudlNa+2a/8ALZhtxfaX f59do5yBhj4I92x+/f8AsTfR/wAw5JfKOj30/niTTJria9j9e70z619Z9JoftBC3p+kHoPjHLl7b ZOGE4RqRsuu12bFly8WKHBCuTKdAj836/C+o6P5/S8sk5W7g6REi/WFhCsVLMjcRIwem/wDLU5c4 aZReWPzJRODedkk+Mt6jaVbh+JCDj8MgXYqxrx/a9saKLDIfL9lrdlYehrGpDVbsOSLsQJbkpQUB RCVrWvTCgplirsVdirsVdirsVdirsVdirsVdiqUnzf5SE8ludbsBcRErLD9ah5qyniQy8qghtsqO eA5yHzcz+T9RQl4c6PXhP6kRpuvaFqjSLpmo2t80NPWW2mjmKcq05cGalaHrko5Iy5EFrzaTLirx ISjfKwR97HdU/N78uNKu7y01DW4oJ9Pk9K9UxzMInqF4syoV+0wHXqclxBoovhHzLqy2vmbWJQsh SfVbq5SMhojJBK7hW+JehrtUYIyBGyyjuk51q0aI2zW831L0VhWL1xyBWT1OfL0uPt9nJLSMfVvr cIczen6smoE27SVIVrZBGp6Vq1Qu25wGSRF9d/kl+avkDSPys0LS9S1ZbbUNOtf9Ot2inLRc5X4l uMZFDXY4OIKQXsDa/oiaNHrct9BDpEsUc6X80ixQ+nNT02LyFQA/MUr45JigP+VgeQ+Hqf4k0v0/ 5/rtvTrTrzw0qb2OoWGoWkd5YXMV3aSgmK4gdZY3AJB4uhKncU2wKr4q7FXYq7FXYq7FXmVmmnxW a+vcS3UhPPmEiD8W4gAol0fs9Tt4+ByuXa+I7iH+5cCBIG8ifx/WQ+rapbaTpumRS+bNR0kubtfV s7GO7ExJioJAkd8qMlfgNRX4vDaZ1McvqiOEfjucrTg8O54ktl856WNPW6Xz9rv1dHKteDSBxAUO jkh7IchztpexII2FAcDfShZ+Z55oklu/zI1iW0uHM8Ri0BIXEIkaNIiY7V2DpLGQzFaONqUNcbWm S+V11zzHFcTaf5+1SaOCQK4fSbSzopqyAevaKW5IVqy/8LXCgs60Kx1Ox0uK11PUn1e9jaQvqEkU UDyK0jNGGjhCxgohVKqBWle+FCPxV2KuxV2KuxVLm8w6Uo5GSTjTly9GYinjUJTNdLtXAOZl/pJ/ 8S5I0eQ9B8x+tq48yaNbwetNOyR8kUVjl5EyHilFC8jUjsMzdJljqCRj3IF93313ONqf3Iuewuu/ 7rUZPN2hRAmSWZAI2mPK2uR+7QVZ/wC7+yPHM0aTIeVfMfrcWWsxjnfK/ply+SGfzPbSXBNvO0ls 0UU0ZihdzxlUsC3wGlVGw65otVmzQzyh/DGuQs3vd/ocvHnwygD379eR5KC+aS7BkmYRGZY+ckMg Whf0yGPAcW5bZh/m9QZbHbjHMfw3v02LYMuCv7ebGbDyv5Ti1nUtRt7Z0ubiSVLie1kvaszSCR1a jcaEqDt+rMeEc5yT4q4LNcN3z6/B6LLr9RLFCBI4QBQIh3UOi3R/L3lHR7299O2022nnKtMNVaZm bcsCv1onf4t+OZnZMcwnMZOGtqq7+LidqazNmhDjNgXX0+X818z/AJjsw1vzlFbR3TQzagoDWYhO moiXCSKwI/eKnwnhTbl07jNt1LqOj6d8oeV/L9/o4m1TTbbULpZGT6xeQCaXiKELynUyUFdq5g9k kHFsOvl+ht1W0vgnf+BvJX/Uv6b/ANIcH/NGbNxrWyeSvJscbyJoOnI6AsrraQAggVBB4ZDL9J9y YncPmL8xJZU85+ZkWLUG9aCxj9Ww9GigNK4En1jf4ig4+nt19s1nZ3+Liq5/p/ouXn+t61pcHl7U fIWk6RfxaE8M+kWB9FWdL13RInLmSEK3MFSrxq3LqxNPhzY58hhAkc2GlxCeQRNkH9SbTfl95NOk PprWV1+j0jDJatNfejsS9WX1NgG3rmL+Znzv7HLGlgaG3z/an3l6V9G0vStJ0kpDpqW7mGC3DyuJ DK7Hefm1O+5ycM8iASebTlGDHIxP1Xtz5V5IyfX9ehsXlecrO3qCBmhURcgzBAx48j8I+KnetMJz EDmw8XS2L+n/ADviv1jzJqdvcXiwTMEg+y627yQrUD7ThG/283mHTxkBfXzdFn1Mok108jX3K2n+ aJxd/wCnSvHbRRvJO0sRQAIhY8aRrU/CT1yGbBGMbH3/ALW3TZZ5Mgh1Pw/QjIPPvlecQGG4mk+t Kz23G0uz6ipx5FP3XxU5itMwndS7NzRuwPTz9UdvtTLR9c0zWbZ7nTpjNDHI0LsUeMiRKclKyKrb V8MXHz6eeI8MxRq+h+5HYtLEbDXVa1Q+vLU8hWdwsg36kGX7s5/T45xgB4kpecrv/du2y6b1ch8P 7El8w6tf+hpV1Z3vmKFy12j/AKJso75WWsRP1hZY7hFpT90eu7UzY6CEo46MpTNncuHqocM625dE ll1zVWVrKHW/OUU0YhkqdBEjKpjdRyY2lWDsKtRuo7b5muOy+H8ybKERW0uj+YZpAqqLl9IuR6rc K1PCNVVmpUjioHthtFMzwodirsVdirsVdirsVSF/L9yU4h41bjxrxSlaUrx9P8K5o5dlzIoGPLuH 3cP2W7AauN9ft/WlvmSyNho5eVoVR7i2UqsMbhmDnrzUAVqAD+z1zc9jaSWKZ5bx6bcr32r5Or7W ziWMf1hz36jv+9INRmhCSUSGI/VZnYPHbSkUqWcbjoK/uzux+7N9jB8+Y7/x8XTZpCjyHpPSJ+P7 OqOt7iExwN8FxSxsyP3MMNAY6ghSKkHbYbDtnK9oGtRPbr5fedy52Ejgj19MegHRbFNEDDyVFf10 4yGKCtBcAAKnU/aABH+tmFGQse/uH878fezB+/8ASrW88BuLokRSst1JQtHBCa77AGjFv8rLgRZ9 /k9RKJ4RzHpHeVe0vTHql4sE8lqQI+cdvZfWz0/akgR/xzJ0x9cvg4mrB8ON+ff9xfJP5nCJ/Nvm 2WS3SaVtRkIu5rqS2k5eolWFkeKlqChVhUDc0+HL/wCIuH0fWX5f8P0B8HHj6z04hAOg7Rlk+45g 9k34W/f5/pbNX9fwZLmzcZTuP7iT/Vb9WQy/SfcyjzD46/M62M35ja0wtI7tI7e3Llrs2ZQs0i1B jPxnffkK060zW6C/y49/v+9ys31vfPKV/cL5J0yNr5mg/ROniaIaYTCpEMPASzNsZgvHizfCyU4i pBzO1RrGfx1XRC8o+PWujI5LiMWLtH6SkwqzyhICacK8inevYfRmAZenpy8nZCJ4t75+f3oK61Ix y6Okd0AHgY+mLaJOQ9R60ZhRPDbN72bghPBxGIPn+x53tWRjqKuvt+0ta/qbw2ysJktlaUryWOG4 BG54ld+nc+OZuHSYyaMQfscDPkoc6+RZFcLavqd56saTfZ5B4Y1IJAO5YVb7PfKYE8Ao/a2TA4ze /wAAv0q3sW1GOD0ofTe3YNCsUXFlYcTUqNqrsVwZiTE3fNlpzwzFbbdE5Xy/oCIqLptqqKOKqIIw APADj02zDp2h1OU78UvmURZ2FjYxGKytorWJmLtHCixqWbqxCgCp8cWvJllM3IknzV8WDzmx0SX6 mvwzFo6J+/jYSsFA3PxAGvjmvx9uSnHi8KQ35HY/c7KenANcQUdWt54rHSRHJ5mtmkuLgE6HHGVU SmNaXSTLMAg+0jUqPi38cjT6w6iHGYyh5Hm4ufHwSqwUis/rswV4Lj8xlaRIv9EmjtUNVRYyDJPG FVjxq/7wDlUjrlzSyvTPI11qenJdP5q802yXALxW1xNBb3EFaDi4WCpIK7ciwp49cNItPvLflS60 W5nnm8w6rrImUKIdSkt3jjINSyCGCAgn3JHhhW2QYodirsVdirsVdirEYPPGoyry/QrxfEVKSvKr CjFakCAjfrscyDgHf+Pm2cA71dL288xQ3No0E+n/AFaSCRbiFm4ygjmVBkW3an7LbYYkYjf1c2jU YeKNXXu8l83lu5kUgXVxHyieI8D/ADinqCspIdf2SDT2OSGqA/h6/j4OPLSk/wARG1ft96X3MF/a 3Jt0+sTCCCCMSzvKeZVSpZfTDLyP7Vc0erlI5ZEDn76+FKImO25oDmhY/wBJB4AUugPWWoWSVnIM 6nrx4cadK/sdd8xo8djnz8+/3fgLv5/g/j4KsNxdLcXQJmH+kSBRcNKTT/J4KVCeGWiRs+/rb0pj HhHL6Ryr8WtN7rMd3dGzi1CR2CKv1RoDbhyKLyN2juilvtMiHj1bbMnTE8UvwHG1YAhHl19/xp8l /mbdxxebvOCXAsPrct/xCXcCSapy9eMtwliqkbqNyU+ErULXfL+pcLo+t/ITM2g8m51Mz19Tny6D r6ixt96jMDsgVh6c+lfoJbtX9fwZHmzcVTuP7iT/AFW/VkMv0n3Mo8w+PvzOWzfz15ha4Gnh4Le0 eFtTRnH25IysJ5RbFZOWwcbCnQHNb2cP8HFd/T3+VuVn+t7hp17rOlfljperw6dr100ek6dHHDDP Z+gY2SEfu445JZ6cviDenzp8Jotc2eSHFGrppw5OCQNcXkp3H5k6+dEN6PL916kka/6FHJdi7Srl Ngbbhy/aPxHbKDgvbi/HzcgZ634fx8me+T5JtX8uaXqt09zp08kTh7G7clxSV1q9fTNdqjbJDFQH q5OHnByT4gK8k4m0yKSARDUClCT6itR9zXry/hhOOxVtRwSI6rL3RUmlnrqDRGb/ACm5p0+yeYH/ AAubCGagPTdfjuaZ4bJ9VX+O9WsNMEV6s4vRLSv7pa0NQR0Lv44J5LjVMoY6N2m2Y7e7FXYqwLTr D6vA6tG53LATqkrEkDYN6RI6eOZs5xJ5j8fF1OHSSiPpl8Rf6Eu1vy3eXum6dFFper3wg+t8msNU SwdC3pOiyhngEodo6L140PjmPqCDLbdztHjOOFG/iksnk/zPMoRNO83wQpwQQnzDZqrb0LNwmkJC gVNTU+GUU5Vs4/L7TNSsX1M3un6lp/ryLIg1HUI9QSQl5SzxcHcxE8gXFAKFadDQhBZhhQ7FXYq7 FXYqxDzJ5u1PTfMkWmQi2S1e0W5aaSjy8zKyECL1oTx4rXl9GAu10uihkwmZ4uLiry5d9H5JfZef NdmutLiZbGUX08cUwQ8FCyCvKKRpmL+3wb9aYLb8nZ2MRmRxekE/2+nb5oOx8t2iRyIkxiCSMUUf V5dyS32mUkbk5mnMXDlAI/S4F0yDULyL0/VllhR3Zk48Y1KikcJhUHivj/E4geIQD+PvcLXHw4gj 7fwFRfMd0XZKwmn2SqsQamgrW5BBpv0y46SPn+P811Y1cr6fL/jyHvSZ75pRJFE09tbSFkCTcuSk 1HNuSDfalc5nWwrNIcvk2Xxb94CFjt4xLCivE6+utEAjWp+srX94WLqSfiIXv8OYsYixy5+X878f cgD7/wBKtBEVurwKyxD6zIaKIp96ndizBh8svA3Pv8i9bI+mPX0jvCjd2jSpqbmGG6hVI/rTz3f1 KBUNeTXMMZ4PCo/vFfqtaVOZWk+uXwcTWn0R+P4t8yfmLLfweYfO9n9YuYrWS8MU9rDbm6tyEuoJ Ast7InLj6iKQ9QSdjt1yOpcDo+q/y+EY8vARBQnrPQII1Xt0ERZPuOYXZRPhb9/n+ls1X1fBkubJ xlOf+4k/1W/VkMv0n3Mo8w+PfzMupoPP+trBezWhkW1Zkgs1ulkZVuD+8I5ceO/UVY9QKEjW6DfT i+/vPf5uVm+vZ7t5Z09v8G6VJJbQCQ6LpziSXUZTcNC0cVCkLfAIOX7DEBZK8a/DXN1f90fx1ToT +9Hx+4sjkqYHPrKUKDrHAFI4n9rnsKHrmAeXP7nZDny+2X6kDMrRSaaE9OHnZtRg0NwSfWcABJGA 7ndcuhtGPu/S2R34+Z9XmOg7kHdIIdOuEili9PiVMLJAhrIakSSM7FGb1CdmPYDalCeTdA3MEg/b 07hXkmGoQiPzJqh5RQL60XLl6VwCfTWhZZCCvyI3zqsR/dR67HvD53kH76fIbjuPQfJvymYLfX7W aQwrBBZSkSq8YVI1VSePxF5EAH22wayX7qV9/wCPcuhh++iAB9O1fDl1PvZmfOPlZZBG2p24kLcA hcci38tPHNH40O96P8plq+EqjeafLy/av4h8yewr4eG+Pix70flsncUTpurabqcDT6fcx3UKP6by RMGAcANxNO9GByUZCXJhkxSgakKecadpVnFp0sBg+rrdhfrNvyZzsOnP2qeh3y46XTiwJbe8Mf5c 1E6lIR4h5clO58sq1vpc9r5QOvPp9xdtbSLqP1T0DIIKPxdlD+pw714cNuuQlihDaBsJOsyag8eT Y8vggLfyIIXivo/y6u0urVl+rQnzFIQoADAKpuDGI1IC8Om2w45BHxZV5Hj17SILbS4PJZ0TSnlZ pwdUju/Q5LXkiEuSlVpxVhTsvXCEFneFDsVdirsVdiqW3vlvRr3UF1C5t+V6sQgWdXkRvSDF+HwM u3I1xcjHqskIcAPpu625qK+UPLqtbN9UqLNke1RpJWSNoxxTijOVHFdgKYKZnW5SDv8AVz2G9/Bg Wl6jfyW3NbuSjyPzNsg9M0dl6NDUbAde+Z8sce5ZTKIsrmZodUjuZvTaKe3KIEYXS+pEz1JEUdeV a7L0yMskMVSLTnwTzgRjz+SrIh+tSRPc3ZkURs6/FzAJZQW/d77qePhj/KGMdPscT+SMx3vY/wBI KsKrIkZjmYqbK0JNqHVTWPrJVTXavv1rmg1khPNKQujv/a1nFLGeCX1RABrvCxVPJCJXMX1r94ZA 4i2ulHxqEoW5dakfFvmKBuNz9X++934LD9f6VW1QNcXZSRiPrUgrbFkUHfsUarU9+mXAbn39P7Hq 5H0x/qjn/agdRmsPrVxJNdaelwrQyWp1OJ57qq0bnbqArSSIPiVEVuWymgOZOlPrl8HE1grHHbv9 z5c/M954tb84TWxultGu3rJYTpHp5X1UCD0Q3J4i5BQU2YVFd6ZIPqcA8kqh/wCchvzhgThD5hMa 1qVW1swK+O0OHHijAVEADyRKRPNf/wBDG/nR/wBTI/8A0jWf/VHJoejfln+an5k+YvKvm3UNT8wS yXGkWxltSEtIgD9XnfdBbPz+KNdq5Tlkbr8cwziAkutJdao+tai41O9uZEtGl1O2nWAII44jHCUg jhtCzfWH48v5WZS2RMIwhUQAPdskEk729fubqw0v8lrG/sNS0SDUhp2muT9WDXIkZYI35FZJm58a hiIvHYdcvMBIUeTGGSUDxR2LHZfOXmhPJo1L9LyLI8aA3bQn6iwaVoqcfqvqU4jiN+vtkPy0OVfa 2/mp87+wPX/yzsbLW/JWiazf+ndaiYpV+u2/qQAgTyD4QBER9K4fBiOQ5L+cybi+fPkyWbynoEyS Ry2xdJSDKpllIcilC3x7n4R1x8KKY63KDYPLyH6lU+XNH+tSXSwtHPMQ0rxSyx8ioABIRlG1BmUM 864b2HkHXnTw4jKtz5lSHlLy6OX+hrRo3g4lnKiOReLKqlqKCoptgyZ5ziYyOxTiwQxyEoipDl5K SeSfLqRiNIZljUcUUXV1RVoRRf3uwoSNsxfAj+CXPOsyE3Y+Uf1O/wAF+X+St6dxyU1U/XLuoNKb fvfDHwY/glH5zJ5f6WP6kx03SrLTYXhtFdUkf1H9SSSVi3ELXlIzt0Ud8nGAjyasmWUzZ/V9zzbT LnzX9Svln0mxtjwrDCt3FKJn4t8Jb60OHbf3yH5cDYOzydm6KJAjKZB57Hb/AGKC1bQ9T1nSdJF9 5Usb65imuuSjVWthbxN6AaRHhlYvyH2gD8NB45IYxHYOHqcGLFPhxEmPmK+8BDz+SLi4vOA/L23k gcshvE16VEZxRSyIp5AfASV6+NDXDTj29E8haLBpmkSBdMg0q4nmdrq3tbl7uFnU8fUV3oRyAqRQ Hx3whiWS4UOxV2KuxV2KsZ1/y95lv9dtr2w1prPTYogk+mqGAlcM5LeorArUMo+jKckJE2C5uDUY o4zGULl39yEHlTzf+l7K7HmF4rKBla6slEkgmAapHKV241G2RGKd3bM6rDwEcHqPI9ynbeQJ40pP PBPJUkyiIxkgsW3CmnQ02zZHUBxDkRdp5NuII7qMzwmG4eFxbiKiD0kKvVq8zyY8uu3TMfUS8QAN mLPwyttPJrhmLPCyliVQKwCqVIp1r4Gv8MxfAck6/wB6IPlaRmBeZJAsMUKApx4emtCV49j79Mqn peI35B1eYcczLvWL5UmV1dZ0DLIHDlOTACUOFFdtlHHf59ciNGbuxz/T+A1+E8/svzG8v3GtapYN bXTT2lzKJJbiK1t0IVylI2a5j57itadO3TJ/lDdkjd235wUAARQV/K3nKw8yXWpWWmPqGni29FZ3 /RwnrRirPC8DXHFvhLIzCgNDvluHAYEm+bVn1AmAK5W+bfzX0l7vWfPWpC2iuHsr7lNfStJHcL6t xHHzFv8AAsZYkKwYdD0FQcmPqaOjNdA/5xXuPMHlrQdb0q605bbUtKtbuf639caUXUsYaRaQyqnD pv1rUU23ZcXT8fYUAjqjX/5w518MeF7opXsSuog9PD1z3yIOTuHz/wCOpuP4/tTjQv8AnGTz7o0U 1lY63ptrpuovFHq0FudQQy25DRzdZiGZYpXCA7NXcriIyJ3A+f7F4h0eKebZph+YXmnR7uQalBaX ssEU15evAPStmkRdgxMlag/tUp2FThyctljzfTvlqZ7ryFpVpdXl3d2S6Rp6NaNpqvaJ+7idY2aQ ANIuxVyQpXj9pt8jqJEYyRs36SAlkAIB9/uTZtB8r/UGH6MtaiEHa2t+QPDly4c6E134+OYfimuZ 5fjq5wwji5Dn+n+qmOn3K2dpY21tLNDarbMywJHHaxAmV9wqugr7Co8cicx23P0+7r73Ua705iBs PLk651m5jtrh/rN0p3EbAqzCsa0KL6vx/Fv86jtlUs5AO8vx8XCMzR5ofUvNMtprOopJNeTQRTrG IwYIPTCxI7cQ88Lurc+vDrXN4dZjiAOHcc+W7n4+y8szxcY4ZbgerbpWw8lG18xX8ly9uby8BWyu auptpw8kcdRL+5uJip7j4QPllg1eKZ4RGiT5IHZuXHU5TEojmKlvfXcBC2ur3rW0Dte3MhMQLMbq SOrfDu6mcFW67dOuZJgO77P2NpDLfy9vbi80a4mmnnnP1uVUNxXkqALRASzkqOxrmPqIgS+DXkFF k+UNbyjRdd1prJVmtbGOSZXY/VZi8R4txNP9NBYcep7HI8Oo6x/Hzdrly6cm4zJHn/0gh77TpPMF jonq6BousTq+pBrGTUZLeRT+64fVmU3IZiiqZT+ztSlcJjMfWKLh6icJTuB4o9/4Aav/AMvHvriW /wBQ8g6MkiSJLI7arOqPDxZXFUhVY3jKoxJQqwLdzXBTRacaIfN+nyXkel+W9A0+9uZFlmWDUXcP WsiK8S28fxyJzPqV3NWKnfCqavrv5lm6nig0PSZFiXkynU5BJGWjVkWRRbN+2GFe60am1CoVjr35 ijhI3lvTFtjGJJp21hwqGgLf8eO6jf4vAV9sVUv8QfmUbmIJ5b0x4JY/UHHV2LkCnIrWzAI+Ndx/ HZWmXPdWyCryoo5KlWYAcnf01Xfuz/CB47YUKmKuxV2KsXt/IdrCnA3s03xFuUtGb4iT1FK9cvOc 9zYciva+Tre3FxxvJmFw8bmMkGNfTUrQJ0+KtT75VmlxgDuZwzGJulRPKlsrMxnZyzB/iVaCmwUA AbZj+CG4609zGddv/wBG629l9WlnVIrdVnlkk4UCtUqEhlC0pQ79x4bXx7NjkHFxfD3fF1uU3Mnv QMesMbqAJZyHlcx8DFNKWIeZSTRrdaKu4oxHw9Nt8f5IiN+I7b/p72qkzjuit1eh4ZlpcOR6zO/I EkUXjC1FHzzT8W526/jo9OYXGNEfT0/6SQU093NePZQWuo3AnCiWKzuBC0sKgCTiZY4I1B5cWJlR t6pvmTpD6j+P0OLrRUI8uvv+8vlX8yomvdU87TuIYbu2vQ01s8SS31WuY4+Es7lW+EtuY1NTtuKl cofU4HR6H+Uf5w/mcPJn6Os9OiktfL621lb29vas07RGOT97I0k3xHlGooidWrsBjO+hpArqyv8A 5Xf+ZxnRP8P6jwZgCw0s7KZGjqeUqj9kN16GuV8M/wCd9jL09ylr/wCd35qadYT3MOmOpggklae5 09xbc0RJApIlR6OJAqkgHlVStVOSiJA7m0Gu582JqV5q/mPVde1WOztpr2SS5uI7m3eSANOWPwKx YqAenJvAbnYyycljzfX/AJVW8XyRo9w1vqjW/wCidOiiuPrUUcJJhib04oVLFk35K/Fm34niBtXq v7suRov70cuvP3MiedRbugR2PphagyB68aVDeh9r38cwDLb8fqdiI735+X/FKTXMcS2JnjuEBtSR 68rMK+q+1Fibf3NPlh4JS4SIyPp8z18g6PtDbMf0cv0qE9/a/VriiOGZW4BJGLH92B8H7o8DXx77 98jLDko+iX2939Vwidjt+PkgNYTUn8y6tbtouoPbLKJob8rNKJC8cUZSL07eVeK05ULED4j12zKy RJkdj+Pg9Vh4RiieON923eefq/Gy3TF1SXXpohoWo28Is7lluozNDGzvH/d0lgjFa/Z3+jtk9OD4 gNUx1PD4P1xJsbbX9kimFrZaj9WgDabc8hEA3qq/MN8Oz8bfizbdf65uTIXzH4+LqiR3orToNShs FV9MvW5387MsjsVVOIKsFEPII3RRw28cx82cwPpF2F/LQzfVLhr7ftRl7LfFLpU0eVwFDRNGroXb eqp+4+H7I6+OUjVyH8P3pHZmKXPIBfu2+1OrfyZ5dtoxFbW8kMYBASO4uEUBuooJB1rlx1EzzP2B xRABQuvy68j3lrFa3mjW11BC7yxJOpl4vLx9QguWPxemtd+2QyTMzZTEVyQsn5S/lnJD6D+WdPaL kzcDAlOTKqE9OvFFH0ZXTK17flZ+XLSGVvLtgXZZEYmFd1m5eoCOh5eo1fnjS20v5Vflupcr5b08 F4vQf9wm8fP1OPTpz+L540tqZ/KL8sDcPcHyvppnkYu8n1dKliSSx267nfGltzflH+WLFC3lnTz6 dTGPQWgJJJNPH4jjS21N+UH5XzBfV8r6c3FFjBMCV4IixqvyCIo+jGltl+FDsVdirsVdirsVYL5m 8ua1deYpLyztOcLrHym/dtUxrRfheeLpzf8AZ+/tnYc0RCifx8mqUTaAh8qeZDPE1xZhlaeOWWgi UEI4dSzC5JBXgteKn6ab2HPCtj0/HRHCULb+YtJTUtQtI7qFbhLiVnggIlYcGIZn/eginfbOS8QC R9/46vXS0WXw4yMTw8I3O3y2QFvPpvmDUD9VSx1aKAxs6T3X1ePYUVnkjlldStG40ifl3p1zK0Mr lL4OH2rpsmKEeIGPPn/YHz95jTV7C684z2sM3p6NfwXH1KKBp7NBDdxvT62ObBBx+2ZKnptXfM24 nUdGVa5ops9HvdR8vXlrqep+XZbVfMMT3d4DDIV9JFiCScQhdzyB3qKAhlIyrDLIZS4wAL280y4a FFAweWPzAuxLeG30y3aSSVp1fU9U5RO3I/aV348A9VKN0ND3GOXURhIRIN+5YwJFqvla31KSfX4f MbW2l6bpiwajqEsV3fFWhlE9vGImSdFSq1I+Hma0qCWBnm4hE8AuSIUTvySPXp2g1vWrSHUZZVtr Gzn0q5tle9lngvH+tB29ZJz8Mc/7LIMibOMcYF9Uj6tnr3k6ysE8neX5o7TTVuGsoeU0d80l05aG IsJbYyhYhU1Yhn7fAlfhOr/uj+OrfoT+9Hx+5nTNc/o9xwqhhA40X06cKfa9bYU7+Ga3fh+H46u0 qPH8f0/1Ur1ESxyadKkUaKtmFaSIrNQtcPQFWmjG/wCz1+Lv4dF2X/cAef473R9o/wB8fx+pLNSj uZPrhZI5G9Io/JBGxKhjwelxRE4mta167d82UCNvx+hwC9tzSuU7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq8gh/KnzonmbUdTa501bS6kneEQBYbgCWTmnN/qj1oOu53zUz0My bsfj4PZS7e0pwQx1k4oiN3vHYdBxo/8AL38tfNmgS3zalNozi4WMRelaer9gtWvFbOn2vFvozJ0u mljJunA7d7VwaoQGITHDd8R765eqTzPzd+Rfn/UNU82TQWIuP0rPJLpkkdxDFbgukkdTDJIWiXjM TQVNR1pmTwm7dBxClTW/IH556pYQWcHlnS9MeeaG51m9gvIvVuJ4ePGZOPpFCKN9pn2IFdspw4Zx lIylxAnYd3NlOcSBQpk+j/lx53sNNgtJ7Se9liBD3Us1uXepJq1ZmPenXMpqYzZfld+cOjapdNb6 Pb6/p1/aR2d6mp3cKu8KTTSmIAm4Xj++A3qKDpvlOaEpRIieE97OEgDvullz+Sn5tapqWv6lfaRF YvqMNrb6fbaffxRrDFa8URCylOkSAVpT2wRxyEBEniPf3p4hdvWR+WvmWH8vLDS9KOkWPmG2s7SI XDWfxLLEIxNzuOU4eqowJ9IhvAdRcYiQqXJjHJKJuJooJvIP5yfoT0F16yGqlFVpSYzbkBiCvp/U OVPT2G/9sPAx92zZ+Zyd+7NfK/lGeHy/p8Pmb0LzXLeNo7m7taxxt+9d04hFg6K38gy7HIwHDHYN MyZm5blM38p+X358rQN6tfVq8nx1FDy+LfbbfLPHn3sOEJtlLJ2KuxV2KuxV/9k= - - - - - - uuid:48164215-4d82-45e9-b807-261ba2a08415 - xmp.did:5c4bb5af-f394-4ff8-b967-e7649e496c1a - xmp.did:EC6FDC113A74ED119ED69BD02A86D808 - proof:pdf - - uuid:3d51ad19-5a4f-4a5e-b328-fb7dbf388906 - xmp.did:3f64b504-cb94-0243-812c-d88aed80296a - xmp.did:5c4bb5af-f394-4ff8-b967-e7649e496c1a - proof:pdf - - - - - converted - from application/x-indesign to application/pdf - Adobe InDesign 16.0 (Macintosh) - / - 2021-03-05T12:52:19Z - - - saved - xmp.iid:0f285f92-6b59-6d47-9f29-262fa81e0f04 - 2021-08-30T17:36:46+08:00 - Adobe Illustrator 24.0 (Windows) - / - - - saved - xmp.iid:EC6FDC113A74ED119ED69BD02A86D808 - 2022-12-05T09:13:47+08:00 - Adobe Illustrator CS6 (Windows) - / - - - - - - application/pdf - - - ESP32-Pinout_V1.2_20221205 - - - - - Adobe PDF library 10.01 - False - - - 1 - False - True - - 192.616667 - 77.355657 - Millimeters - - - - Cyan - Magenta - Yellow - Black - - - - - - 默认色板组 - 0 - - - - - - AIRobin - - - - - - - - - - - - - - - - - - - - - - - - - -endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/Properties<>>>/Thumb 12 0 R/TrimBox[0.0 0.0 546.0 219.276]/Type/Page>> endobj 8 0 obj <>stream -HWKܸ@ˬ/S94q`o&S/RnI1VLRȯzo??q'?UO%BqO|puzǿy_N){t”svS(R.ӏ2xzvfTb:˳/iu8OQWmZ ~:9RH'ѥvշR-j [b ` bfq[&P6O"NߑA1)7]ȤG =`U(5*, -U2U S*-?Q7u:!*z8yO - Zhi΍57,m1֒e=`G9зiC,+Ϸ%Wqt@Re|O>ٴē\BLo4\HE`u1d1PFFKY\'LNُU~nyEi4I(';81&'~2zq#ωG¤v11E޾yv-%߼hL݉?!(mSKbA4c~j b+Sy1,R3UyNj ] 9$NryIqIdYl9 -J[v`Ĺy`ގi`-Gڹ4< -D -#>#>#]0 6JOYZ.ʔ;He*\ilĨ= MXK IhlJj) Ûp1*4A?crLZuL*RGu?wVݏ>#~5$(7.X0_kBpuJX"baF X;3ϔLDZXY1XAyjyI0@CלRn"*iD-$8XP6'ifz؊wFv(˽IUhC٧qizy kn>+=TeH縉)tTG|G|/1̅K~LJ ܮ SەWCX+̍ږ -5C!Hhm"[Bt[ئ-V[jp.;QCv)Q*]U¹ɑZ2NNJ%wknO{٫t -fׅy5ι 5kRߕ`ҲK黖(Agcގ9NoL#\i[(!Lrlq9n 6!,Bl.L¸J†0{ ;v^?t0y~^?x4c$  -K{ܭ)īKtU~S"Ƶ/wz0/qZWW:ީù )s,9}} ։ -qnK -}~GYFZ VH7RC{b7MXc-f 7t.+ wdArIN]n#t*PPtA26Q݁a&ٹ T|}>Gp`ҊZu42#& ._7 f.}ZzdھC!Eާ4h"CE{3b1\ʠBJDICr~7`&t0䲋CUG˻M:p_!) &5hE9o'/":*xx7J2pezK;_*]Ԃ`S4 *F1k$ͦ%LYJj)1~ -b "ۄe,&s:KX_C,EeTv -;8a -Nσo۹ GV/@tWCFz:FAx0ǔ+.$qxD:lr"9>wxsM3Zuf+;" ¿2E|P\t {Ē{-2 -Z7ZЋ+XY2DAUadJ+~:mh*(Q<*R?oàk O 4p0$dI Dl%XGqY=|ʪMvhfuZCE#<,'I7qMڱE[/vC;x ra#'U>V4{x]4T^Ȋi̙kڀX;{% 5K&r Uy= -ԒNeݲrk2Gf @[\Uc႑CF@=KRG.|e\/sJ\,r ]oqA&>H ڙk5m ) "^mYE1%몫8!-9asͲr[ ׉ -)qL -DC&C_-L)lE6] '8"Ps$PZ*\(`=Cԩ9P~Y5ãd3}Y{1 Tdf5 -;Dr\V.#_19?XvK[졫CC<=,E RB.VBv/ qJ(H{Gx(~u,\BZJ>w\|\E(:~=G74|o R/hKc_fﬢ16}4FQyH2Ċӑ }!+Fa U\Φb;t ևcz -1|}{$)iubkw2*{v:;>Ai.ЍvCd°LcpLg¨ -aBp B1QL3F C/>ހknC1#<++M6$Vܪ΁*z~p&xCyȀ_@@8^voi~ڴ(2 -x0갘lG5@ <y0}_ -H-k>lM5 `Z gbsC꿱86@& :5acH'nEoX6A;zb?kN?ou9djH;e7w;A53=rt=sUVʵݟ}lq}U~P=wUz1%\J,*.H f_ւA.vE`;()`L P(E34CV\|- m{`ϺeĞͲt$bHRRАŢǬfI_^VQ 4]^[CqH8tH FT Pdž6ڊ vXk < J7w6J53aY/X'e Ύ]g ?D'KjVto;p}\fyXH 7 -c۟I{L iwm}]v=حdG7ߥ;h'Z@sQ(2ZTq\cT'vs0 0~W~|+?bDf%q/A - zs.34c^hzZ@:~<5v_hK3M{}{ {~uŽw q2C{{X: S>KnpC1 2*JPKPug,Ʒq 4/M>G?roM |M\mA.c2XvݶЎcqL;Ўg L;N( -bv|/$9#oI~n=`؆M؏Z;yzcaѢp*QPKqod)əSvo7z|Ωbcf7װ?i~\?<*6X5AXEX^̐lw8P\Ż?zS"荂s* ~{[~Ӎ~[7 L\3*"Ք - -|ߒ}7G꿱WSُ}['יw< ]׆WpHjk!=:O2H#jE/ s3z -CY{.^/q :2:_+:qKϥ/(8巧 2s)p%5T~P=$R O@"1`), i16„+icv{q{VM5& =~%OQUřř2)k3}˔w]{4K5겻ʕ>::R}3az-s"R5tZe@W]j3&M?;@cO&'.ކ(0$= tldo'͗-09KstrW/kM*-$ZSx:/RIFàG`R|(ZK:Z"~/][g E %܂nC2GU~鹆!5ejtNf5& Kth8x$YV$,n>"S"쪲s 3FM_D)vGyaw\Inja܆ d!S8=rM4v)TTaV>o${[VXb%ևnP -3^h&t554E{MpHD9=5 I Ա IJDc Ó=rO$H34>>,Akx@8!5W  -vԔL#& W4>bpՠ 8h[&D[}dNg7 -j@cf!7N *N5!V^/_.FV<#da/yY*e6 CyE|) - 8œeK0ʬjq#ס{E J*7l_[9dN$F].(P6LX dbpHe"#R.1 ^oG.j{t/g2i83k+rMXyXV^1<سL?kJ \]{|~w/fr7OOΡKnnc5E`MuI㢬Gp&}u>N -یrǸ#ZS̹ ԅLY Ԋɷ`z3ĀtjR,啑.#ȼ_s[:1-jH:ct -Ow'|&5&uO+ R'Se;z"Ԯ˺Nlf3lDάZTo:;(+$V (Yd|tnLww f#pw׮tO^A6c .%`JSz. v*:Fk~}e>N OM&(AI=o(Fm'ȻjhMU J,`e഻v 4gLķ>$8N@0'Z*Oѣ9=EwԸNñWnI -] n&dE?JޣOLvNdmw`njmaoR'MێiWQؖo bw_e#M MMYI2O;!࣒uqUON5 /mPc/z~]q[=CK;<v)e7Wٽ r,@kT 9Hx&Ε8} -kc0I*oKX;ٮW!uV_dulMX^ed˵xڰ;#;f먔n=^hݺ`-,_/ުtUe Q4%).54v{ld_0)nI9QG -Nu D19H|i8 lۓno6F˷doh ;Hxٽ5S~~j(zg"n`P`D3*? 'MgYp2dcZ?wx"`!'VI72J"161]< OP#- a@__D+P,6{QHYhFh6zcM'bQ: %7殲tG\8vm-X2QӪE WZkm_<+P,IE"Tp3{چƦ)qȐNI -zMV7rǹ2B1bYdM@ĎK,dv맦~),, -w]Goۣ&z` l*wp Xf7MZAYu0zc'tW)JAGnkPN'$zC80Rخ&<.ngmLݱ -P& *1t ~v1G$H9lѹ6)dTBpo -2脄ePccr|Y5wa+ :,813hjٰpүVdJU=1ma])lI.yu'xՅ{~!o K6CJP$gГq,/[{^wU;QLYef/߮ݹYdkA POĶF5DR9> 4F{LB`.64C՟=1m s$}b i [>YTԵ]ٷsj(0"_ņƈ:7DW\3/V~1_+s pm)*}&5VOJ/ݫ."H^P%g4gSၪ6Ja^֖^†g4:?e&0\yÞ]cVz?qV֧"6-u׮W ȮP? -q[.Sȏ6 -QQ{ߙCN%QOmL3#ZI4Z+ !wU5lcZq_PAe#﷊@&(UUv;BK% l_po#("csי͜iK]+PfEvX 5CZ}2Q5P} k.673'L"t$9oiMAu \o|[&gVo-0#I 9hj·FNNȣŦZ"][YT;"67~&^]{t)@UC)JdVZ:zˡV7=["4fBgjY -܅f#HkO{ #&Xg8_%+A[/ q}q?إWpYm+uhe1ӜҸX;/:Gy!-^`!D<]_ݖ@1n썡>Vt_(WOyBPE0@k8EP)qvPxYaN "'dVȌa6cX=,RYA-ϑM7[q/͍v93p-sB5nHZf6 - -h$¤%U;{`̿x[%.T6 d А4C |<,ZәI"8GxA1ƅ7*)t 7ӢC}>zoo/'`߰ V/ MêY^V|cEWP6r_ fRG -g b泮CT@>ή>TOPnxm蜔̽t#F31840t rї 'nmeژ6fXMMGxWPE \\*`,bw֯]q-..]``Q pLH\$ m2D&r -Hj-?^'P/Jv=[o%!Oh}84=vt?7A]1C -}*䠲.7w& vW @]o$ OS 30 ۭ(1/ bﵬVCgO`Ny@s3 -7p2!)en`}o3X1A5wO5.0k"e{.|FDrsh|9v~zjl<_u H+\Qr̥"8-›S-na(kؔI\Qj>袪zۗ4QcTRnk&kCD ѣ=KQZվ&0G b*AЎ6. -rou=eTbOp* aejTW&G=l -TqQE:01yY?j& -ce)D'Ͼ8}x-!XSC ;(|W>V1Q - 3 hd zg3pwLJbuRn#h-CI_*a6CgA 9PXAV=Ǯ< -oNb,|Tuwg_tkEzvy~XPi"b'F -\\ۺFmdd!P82jL#yE@oQVS2W X^9밻N]a7+ᴝb5\zm vr/_ê3gxʤKA:H4[v:E]7j)5![qWnAB5=D4kfŷU'ܢa%[Ƿ%X܅q' :¹~涘 BCog+Ht!vb#vOЛ~o]E-jMMx -F,eK,i!UO":;,B0%lWAK5E?G]qo< o8rɧ!H[s8o8k hڪK^F."Gл1Ӗ>G7ZDY!X9 Bp:~=J~dVUHQ}PP|E_4Esh - -0Fsgh(3QDDV4/劤۵YꝆ/FOE#uOy-{AY{ U uґin9Bk^#2FnGPes'6$#oZ3̤gap.sj;~Mm@PkYÌ{ -h{}[ ʁE"-gD4qam+E 7{u$u`)#ېerW7QF24m0Aey|Ckhd'bʸg~r\GpUI G`^I|Rߋ.?v`74r 4.p $V~0 aH P=𐿪z_4D!4WU\e^OniN[Jo|{wv#V>D ѻ9NrW럯k/k ֿR֙lϮ D -<#^]0$|tAmE$ܤiX;J OSXSR|Kwk_d<]~s'F9UbsM-Pgz,>)Z~55MaZÇ4\yXc מS/ӥM -/xXF&1KadfR*teP<'(AӦkoilokt[@rIJ@3I (YdŢ+ҷyH?#v'W`[UaSP' ;9FvN6Aa&λ0`,iaY9iQwY 3 ȭvmPvۓ:H#iu `*o}!V.8,R$*6ƂsTNhe/j3_aı"X -Kw&Ct W ט+aWˎW$4gE%N)nL0/ڪhSao}S_dA\Ƚ]<=9zah^W:@XZX'YNJ[hwo/d$W89{S9o$@͒iNmSy. -`ijX`/4 -UxEAU_9L٠t( I(n~]'}S2 nϵ,ӭ0U @q%gwZTuIk':!9U+a:hŏ8-|@FLYFc2'Y/SImz&ӔLL>E@a谠0ӉVeVL%ޓ6^VV~Sq >›nPk;@v陻Qޗ;J"RL\[@T -ݿ5a Fg32=a -v+o)G0R2ڇ !@[HǙ -uȒ`:%'ʠ,OZ362LmI%F턴(Z3KmcNw!:VF{`d+>CYB@~B`tV6,`B!mKa@1CxԮ^3^=Bዋ+E4~̂6)<[ݴL<7.sQxyR&B~_]+ dOe!xHy/ĠxtV' tVfg'ܳbMf S}[(d|Sʁh<T| ~)}tc<Ԑo'28!ӒéRYFq/Aby)H\1)WQ"oyk?kl:MpnEQ -|#Uyɽ(ꠑtq VUIKNpΦlQ5WДACwxn$V=f}&Bo0 *j: ]:%P&ڵV(qۉ8X+" Vϭ*ZSȗuj`nhjԺHZ` dčXTG9-2Xm~:& 0#R7d;{gE1J.Ji.ğžY]i'd>ar&uN~؜Nl >v;y Q.6ZT#)V )L+,v rFwt9 HqCBU@(V2ZIXܩcX{GFT8_!V]me7uL5&, -W\ডsk;^@X01о*:A~H$uhVE+MjڐTA_A) E۴R@e~{H;r-VwJB)D$:$xLmdQd -'yw a~H'4bpg۳D)FMlzzL/9lTbz)UZ3ooc2)Ox^फ/ "$U+nZ6-JEp4 -9Ey@2UoZЙiaQ~dQ+vhSW.- ;.G&k7kh e%rж¸yʎ;$!#fb@]# I'DjΠlxY`?B}#&z,Kre:pT/W`Ir+󂵰^;xt [hjŸ -Wb.KzU\\gްo}RRE>N?@C}`rl87>OiEV2 -7y|K‹$}Ԁq;m$Op@J{nN)΅a՗㸝l\ۼF&T KP\%!tނXi7r;FJ $̈%؊~Cr=Cxo$ΙXB:ZQsBZx/u!sE_!l\^UЊ+ Ʌ˸پ=W\kiw#ƺufGp?!GGJceJrFZa8Dr~o&xilJsXjmZʻX#h}f/A">~\?߃D"SD'OOߌDG^<+G9$^0H^( ?~3&{1-0& @QGPxE]=z/T:R,_Wr?~rv:o.6g߯gˏ?)y6O܇$_Dó!q5RvO#.ؗD4Q]@;Zlؙ@ASߚ^Ւ+In}@ fD0eiƸ6IEI)`p[DvA @FTվbATQm/BE}E}…N\'\_FG`1^,. . E/0.3.ϲ!_[B(?Wb^yKG[oTQ@E{˴*_w\+ްneYDgXqyu/_y۾88[iMw_Gh۹_받E(_my(uN#Bf[%F*kG^cGV$D]\? ΋p'fv^\ۊk'ך_sW'y^ýýW={ʽiepd~阻1UZV$/V(Y |a'F{;33 3?J;>onb`qB]Ŋ/ImabA[t~࠷OVp馃,_8iԂ~'QLj7z=" --&\B@woftFD/fD.̹3Ôlۊg\>j0Q:uiOA!-hBE2j~'`D۰>*@ IZ'>uO@TS\8 ԍɬGrBj~L+]Q!1;BgkҘJc s&m0EwqEY6V7B1vOؼ,ks3 "7v8{YJ\vc35~CU /(:܍y }.ުV0nv Z<0;x,6v@\7O|u_y^y!dbbm8n!uBP/cORCeUFP!W?', -]:؍Xaѫ}mpf4v)Ǎix p+C0^镞G,.Hl! 1,yPL~ͤ-n!cT<_pMN5xy[3AgE͈oF|3#^k8?.cBUg229YLUhD#.*t 3<˺[q` Gm^&際Ud3.=#J$s%TW9x])6^ЙcxpND.*3HiY32#FGD|iANU2knщ -_y12@نFžiɿ]&'۔Dž)%B]Ǥ&L&Vak3Ai'AN#I@D.J\L -HŘ29KʳbYq\UTPx_vg=G20IFy:էn+^SE3m݋ bL ICP\%2\$,[5 ) w<nl*T#$Q55& hfh"upYS4:ڐ\^n5 qNHnC ̍S!wϏm&tO]2Sj&"Fچ tsf<fsazP~iyY4 L,8:"Lp8a#AXnj9-bM"{'  fNeR -MJ(u߾c᪚TZ|ZKdpJ+">9\Y }$2f.sQUnv6SZDZ,YQk;AmPYtLK*S."vIsiJŒUmkF`/IZPmU$5V!Ci&ץ -t\IM; -B]\Z%~\PGP;rDjy[t(m rZO=ъ͞ GOր6Hlt(1ĘZG5'(?x.pvmWrbPQ -ۧ xjW(t5?9)*Ğ}uo_dwKSw3)I;+Kyk - @WZ6 (GUΜ5UHaZo9%6Ar61RRU*jI6iFoFt -ōiaҡ4t,*4~K) -Ez^'jѡI-e9 20,໤[9}Byf3@U; i4b6w 3-<^ҫ#4qKhUBz@F.W<=1F}ĭd"C_TNK[,nmNQ8?$GL<3oj?avby$ɨA4@4S{PAS32pű^0[NlAuc6W5J`RR:W}xy_蛖?yMZ,UĻd'Be_kߗ}{-Bz]!M)GNuX qh٩ -Iw&ō+d -Էo8Aq4Nk-Zay)BNAGjAvw;»]];jCA{ܨt9mrvyÊCHM(JrYrl?~ 1}9G6 vcKv-Vp&= UuS(zC)!0_ \İkR7Uk괴,;5{X r;n%j5lg:{z!SeAWد{#q(I9l2檦ה=;V \iġnɰb -LWO[.*HP2W~'q%`NFV~@fi@sBDʒ SE*у >+"F`)}XGm/a bdAtU}ef<bE1B B]@' ՔBDDͯ&y0e>'zo ( ӧ?DIbiIzznybH3#*=ߺ;Օ)ugC\x}bu;عO]ue,*"נvN}23Dr6B !ݶ - 8٠_rrUK Q6*Y|U&p6uPH֒,4ǘsZ5@\g83h܊ȍ-`DcT8,Z1[ij~Ӟ;j -9ZZj{Љx_âˤUwO>^<$G)٪M=e1/u{j#-ZL7Hc1, M !{7lGtW -9vZ˂4j;ktݱB" ce \S|I^z -LH꼊Uo9a|dݟ#xn xM_\6!~l؅n}ًvt;+h݉Ҏp=O nPmwS9/)om3y~CZl\{,#?g=oVO!; msܶr32ylGjvk[@_C@PۺZbzAo1G e@l5lZ '_,:ѤczPQ"M=t ޱF -&LE[ȳpN=SCX/6^:OeΚ;( -XY6١Ml;(|@Iwȴtѵɬ Oץ_#C'U vճǞ_3n:i]߁п /*sr/ߊ -zWj秘 (;p?N91 o>خ@%lS!3HXK@3&}w|&,mlF861%!A)tvȚSǏ@}xŲ9 @AQ3蛖?yM,'wNʾ e׾/v[B z]AM)GNuX fݘkJ2"aD#M.o&䃖%c>^4i֢2Q?r#7 ;1 ;AAϻj]¾/QJc#jᜆXrwyÊCM5a -,9Y:3Mr{7l"dg_Ʉ39f?> '\x ȟN<8TGV:Yt3ruDUe\~;4]ޢ A| =NVvEy[9߁Z,{sXi[>M5<]'墯>8&AQ`[{G:JKu6a#Lu5%g-X]jEd)El:5Rdrؼ'ktv7tǪYgGtyqu,*MNzq5{؝)󵻾@PWCqJs| ;'{ VvS֕ۉ/]4x|p:WqDnz׮(Z-iY!r&Iܼ6 +fwmm3@:e3_f>MOIL2EWAgJpT!9B49" ;Zu'9cwq[Ta*qnKIJ*:0V3Xĥ7mRBm-Vl@38KŕFUpAwv΂ WmД-5l 7y՟2eR` wѱ }ijՔ;L*'DCiFgu܌;̝ur"Fy܎*B1|^znY9|5l - EFlqT>#0 uϏL5 rH.͖ke%/S' -ݳfBiHMM7Y*$ -P׶ L_E.UtںϨG4PFvVdpkٔM_mQ$UJ,5J3{Vƞb ,]VDԽHGe/xQQe}wי" ׸蝖?y? pWpx[NB5:{TZeCbX"3b1//J~:329hΚj2 2EZ(_a+*bNgHQ6,-WQ)~#jigx!;AٺF~j>CJ7JtNXn4u/ʝϋ$^GnJrhy54~ܩk.{NDP+$< ]6rTx>چ2Zutv[6]J9 irӘje_b]XYcpȫzyCvJt4K%J0Ʌ4ypֱ'.eR`Wa4?qb xGF>V/mmm&&#=6?"o zԺFgĦ >G Q +{/K9;-Պ,(x16K_C:{g]vl>tp -LW^u)u4]4&; А"K{-]D]f2p"Q(\SL ~]鹀=fz6O9tu48h3(Zr -mǓP2^S:'$L1f- cnqt1w5jg-$%Y8oe20;W$jde,Pէʡ4$ϱ`CyY,FѷE HFW0QaCn=^T9ULoF:el O'ZEy[{y Wmϐ-u6d]Sny_O>g~]xt\-Q"lS=gū*44C*fdÞcSȣjP[ TeiUe|^rnY7|##0l<"y6ψ=4e"}kpOtO!.X͖kUUb[VK@XF7bѴrec^iF&]Z-#iVZ+d(ZĠvId"x=ɫ+ek(jC~"ai)0e39_]Epc 4QXGIzi gZcӴI?M'E6 -Z*b7=d2j L9:36˵6׹&dpwxڢzu e[)4()kZkE~hgi)VXA2&|ej2@>e/*pIF0khrPZmbR IF1 -4-(;-i) lUƷxw$A\cKP?v:Bqd3[ -m9 qv:Sӊj XMLr*lhΚH`PK<Ȧ™Hte bX+Rc`MC!dUTx9^N@yn5Q]:ZydNI3)4-h^;I -Fkh5CUS\O띠mWlYv)Bž|@#>dQ@$ۧG06%(UYٮb)&M Hy뺼`hKfI_d/9r%u8~i@o?GV @ -W@:mexTyo V;sQ7D#0g޲ r{y2]3fѫKcbA: xXъl/t@lr{6a_96֙6?iQzZ`ex?M)Yw[F)ViS{&$CwnD?^^jڻ8)ڝ{c9vSZr&0O4:=9ӮvRÔxV)݀EqQXZ[6[&nf/(Ŵ FAP;NP޶#b|,Zm8)|Oc:Uەףܖe?:wf#i^g<%-X9>5PERS-cˉJˎ7`IZh b[ъ_o31vs[œ"jbT{ۅp{b]bKZ=ChvGKUFd*_ןj:bI;MN[+@_SJ -r&\m當E&2=؊2Wqp-cҷ4[6i0Ұ!yp}d_bނqy/gzDW ׹}k3>][j>Tɦ۰i dN~i)eqw +TKZ/$)I1~9߂9zja>ΝuT|-cNcz xΙylEh,'c2wQS/h持C2ɦ6gZy m Op?&2dEF^#Uݿlr".9q@A1_'HI=,b+(QKNB/ ;}_r Y|]b13 85adBO\ᜳ% -d: {e|ا2ZTgH 絈ayi9rzi@GW֔y@;v)t#/36L?0Y ܤlwg#F ieާVwKrYEgyxi7MS{7ĦnwpIl -wm+Wm -galݹeHR<!?DDD0 S_gWm嘮wi)|Ϗ_,pp;8`ኽet,w#ɀ]':([iGXSΞ찺}洯6'UĦo, B3ÆRR,}Myw9hzl+!U^YQGxl=[xtL AP_#C9hAi2#450nbЁ!e0Zm!L<ѫ+W%%5SU W?앹##)KU0|t崩ey3vd& ϻUYh=S;nΨqk-DQ vk~ަD.6D -Ynj-/kdxh(@YwR$JPt;mml&69"`(aR.l)[yJV7sSj6+>cme 2ӑfIkKҬm $Spʰ °f_bڂay/gn˧Y'TOVwg)Ԛ%@qY}žIoT'vP;h3ҁcm /ֆI n-#!-UOTSc4_kA+Q*Ӷ_sTRǠ》 ob=Nw9_?iۀrJoaKvJ>&$I.HXV}7 I -2Y\kڋ4|v`z-dpA/*(ayK"Px=RM_4`wvS3m[sFlק1߆ /-E 6daujIe$?_y0g_N(Sv{v͗}~s17y:Un9ism[Ц<MO@Ձ'ȹkIJplC7?Y8b%'ta -h'o\R.L2ddPKaPakWF֩\3|aE+@"1z~.i[{@yPW+a:OZF S=I€ZZ7rJ؁n **1`z:d_2p>܇7;)KaQlKl x4}~t5a;3%]`3N}ʻ'w1/8%bg>ų'\rƁ S xiaHUU0`+-JE%#ナ;qKF^%icx(dאw1 -j@xѽC_RxqZ[&B6Mu~T%P^QP{ۚottꑮgCAQ2IþtYہ`&-ĜdNOy'>op&pXZBѡhi%$ru}nX|fKzj{[0A:z(Ku4kqU0FVo|kn.S@396êYε?B^iIJLI\g3khwԫ-l+%d/HjP:8} WMXfY̽((U+r0=lN8*%Q>Ҹ{F~{8I$nXF9X9,F- X3u.wKkHO2V)52ʹukaÏ݌~-Ix֟xby}j"Ss,jݯyo{ymgN 1ȭfu0+UON;y `*Up\Dž}.4'o_.iVɇN̵YA{GRW<].9e :Ԥ:@)ܬUXC8\+J_L)ԕY])Ŏ:2LV#1i' Q3&T}Yq;L;̛}|@b в{81L>@ɦ<؈/0[\gV" -8虿^-~!Q^Ή 3vEixK~S4r?96,Jv^9)Еmvla4%+cm\t^k VrkNu)X~L"`К#y<B}ZN4l*,,v -\@FT &ee1[=pmc8!dR UYiH5x]% ҄L&:t#CäN*}ٱUhFKBq!=fJ=ۘy@*ش;{4{n`X56AeI@q[c -) BUh[1mLxHH#yPsd531 >Իw!?ь'HV|Mlx(;6N=k©<{p^ɶdDcjf;V`x* ImJzjD.kL 2{d+4l BV+|.M){ܯ~pb[xs %nW:z䧦8xB|J9Юe\߯+}6dDڝR}<=+5[:2lBc Lza cOeM0E~Al|eq*=ˀg2+ٔq\sjT<Ҏ#WX2ʋQ9B3+JsL5#h.ơ=; |neW3#tq/[OX7>fWNpy ac|)öq_5ę ͬf,]v;w=`J1 :&&UI}0zسm]Q0r1x|RLU.{smW|;Y{wZ{u&):g^,fuR:s.3y_U5X-d9l΅SU4ƚ(wa͞gť0(+}#MTqpyp'1]l*Z۔@m^G-mJTGL!S1rI9U-<[?{hB%JVE^cWHrOpw2lv8P݈y_т'T{"م ;ZwC([x <K($U:jR_&q3Z@tUmdWw+sT*R\A,)W7qW5%LQl5?y#|Q!Oԝvg{`?˭x՜F9N<$xXdԳAIol7@ef."W$CҠ=GsYOS #h^-akL+^ f)S~ukƹ.)JvM78(% pVnVYv\1LùU_qފYB>懞iŅCULS-/\4G>ɒF-!|h[.hFrOƟ7jk*Z{@0J=0isozD)]rds5(ݠ }BOF1JByE$rYxܭF̋rl$82lwnEW[ 6 ^1o|a̫Ҷ1yO{bԯsP_Hh+/sGƒUU=PD_?h쏾hwP&;MT1]QfޱTJDX7Ϭ P{읾2v8Gp wuu~3:0nԡhœ꼄k%0KO%}g؂naS}SֺwerىM@b 뼽|]vnllCB^kCZpCML@\Ė#X;7 #Ә֨9|"ᾊ?͜{?>~lΊr{Qǜs~72";>x}?f42G#da_{]W5lt⤲+~WlGm3sզ=Z˿z7SjչCult^a4c4Q?RpQ)x*Eh-^IN/l%1du[ќ7-~Ixt]mvuƱ<[izӆΈ|>3;pqRj=tӐ$au0:? CGϷar6S -7sQ InOzpdv5{RJ&lb ,oDSĊWCBb -_80% نm1ځblV h{Zk-*9-$]2F3RQ:վxv2W+Lvaz5 *>JPIi\]y-bCn,U&2c[6y`xOvvY +Ѩ1փ c69yA|eЫ1EzaJHYݢNfٔJȏ~-2haNĈs3vN4/J^c2h -msWvЖfAsG o$vsitVp )nǏo3T;ueo<&df"۬xWX~D#<6Fn(:0LBSX{|w|u휐㳟Gf?B1ⴣK;Xܯ{!+uSlZhW MW!ި]!Wo9yޥ_FgvYB\E^fWKE .Aƛ͸4Yi M琚#qіE1D@y3fk0=%9M6 S4MlVei+x(!m -@ap붜[OYg[&}MAycW)eKrV4a>we.ЈbfB'i6X~`GĵyO9ry^]&i nwiK Դ-+&R`g3 z30%* >y?2CV={qq}DW0iu:,ιJGs5pJOЬKb2Wm/!)ֳ۪ٔs޵}yU2ղ2ɩO^T=͸t^aU @F3lƁI۱/s0ni琹=\UGbcܠiw*BWM#*rbSPynо=;7MU5n,T-6 v `CXg0Zx -yϐ?4f?Dbdíii;Z>"gK0ӻGq +"zegР ~H^3K J~k8fb`&n}"Vx;l2ǩ//ZؐA p52_%,;FqlLn7W0aVbJmn K4#6P3z_gew?uYTd~ӗ;}?ȝSFgkr/wڠfkw:)/wr/wEwouJz o e$Š*HII=,KՄFX)³"w 1_^G+^ k')a-9 ~JQ@}PZ^]jTB_1׶IAF@BI+4 k#]kos3eZk7&B][ GN\%EWq&;[rCÈP";-%k67nP-/6 6nU7(dhiͩ'iB1mW2_u5 ]\bQ&|mXlhYc -(ݞsi6t) m5-Cvc_+6c_QFW22y/2yɛt92y/YD==䵔(LWשz>O4ygꟕf*?2֯z|nm&l=gI ZkfS9Cym[ ـjaO(WXfI -5jG1Vx[a 9t8~3cX%HFi#+ }[:cp)J"[ԀG=8sՇVL'5?wD#W2kGR`!aU(F=.!=mHr'|bN~p&Ҍg#Th  -QY l@rup{( c =rB᳋aY4Xbd -)}7rާZKѺzV_h=[nQ^9K*]- 'RJؽŽҞqy,A[ |r!߶6 ?gߏ+$ooaNfD3=ַ~]ۛxY|N2RfL۽;AY,}bπԲl쭀m@Ӕ& nWQ>h|mrW!er} +<76ArEs //}ٰ9 Z]iTR[CVMuߠyWDJ~fM]37',k89JhCwo;@5B/i6U, Mc! *f𾩃ptC.V +͒:+:"zZ:ȩ(В-T.Kkar/L}jʤz<%zőH c>dhk -*uKYAn0eGwV!F]pAuΘLwQLez%.X|n˴$ҋTىV{@1702_ ;6Cw-D^1vF)]E؏E~K}屎Kl73{}zQzL9,3e,#UNuTETUŇx,)u XwCxAym?F$3 '[bYGś=־GB -Tm9LQCR(FJ{hZk͐ i]be{a의C ~@ -e3RTh\qy -ɧyʛ>vǎ<]?nY8' [/|VځjR#kEmVf> (a)}͜g1Be,lZT*n@ák*@ ̲1>j%HAQr -#w3Sj~8 I ?WiD<1t{aRUzcf`gwZfu7Jxk {$nrL9[A  Oc@;`yE%vUN e"eU[ݰq]hi5ǴiD}/+0Tj)E__HEQ癥o0nrԇm5S[U4 ̛Yg6;qW钙I?D~A{a ~zYi#@ DF[յc8(3w/$"d t?es{~:4K*LE>ɽ6_n 7\$vUFW -c pa0RYHdST+QHI5.(>3_>` кW!k[Q. ((vtFQb1P'2?5>+]j|]Z[Tv,6\esh/SNEtD?p1.N+dc QNb0m`]댬=G=Ʀ ;HR@|הBֈ|Qة`a5ä[vkk8V0`+gMcPRv0^_լ_shqĎ5msQ6.Jf! -cӃ* 64m2duѪƕzs -g]!4sWE-a2"%̖cufhs^)߹wԚo"io˧}@\Uj54bZ%Fy2Y%4]&EoDRy(5PbUn$sG}gFb@mb6)>k_T:F7xy:yl /= N70-`K,ou{Z-U ];?'.qȍHqx9RSrC(0lni35661jZTxXu ځ|X d̓ܓ^׽=cR["Ip\<{}[xW,d]z qU.(&jX0Z%iY{"oNK "w&5/ږ* s8Yc ]P\bN&tp+Z]4P_DMP8eaL -:/ʖ3xd1L9j[EdBS3b.:Sz|U}co@8H$X@y2)ԉۇ?+@8 ѓRz#lњG :2aTCq#,;u`jO*MVjQB0IϞ{^&̐ ,7,"TnJ -jƬG Y.)mxw辕3s+Ptph$>лx$3%re$nmptIZ(r^ q(ϛlc1nm<<# {;qc:<Ŋkh`uAvUUb!"C:1#E>YCf[cNN Uz(Hbb@mb6YƧ?mBS`N0Q'? 70%`K,ou{Z͌|ZJjzVmG)~(-Ng.)]q^:dv.b_t8.tU,24ưV0%gA-U +{)o'b,mO{f%W铫->J\ z4䖎5&V*{H\Ymy ǒd[}&i.,k:"ohn;f³@\ [Eή&5L^4(}'R[ 1^M!Ž,x!iZCW/5j۸MP:1URGDϱFS4+HٸcpB^]5BʞLsco(CǯpQUUNg7#Kn ®F%jiK?y<7y>;nu~;љ,y)Cߟ0yJ$tChM"\g.`u[gvBV5"5zà789 [Ǿޟ&ոkWE ACqZѢoG5ws-? _g]W$!$?g%9~_M&q-A1-MZ~JӒ̜]A4ѪhKC.}t\enW/+q Dg\ŏi6kn[-UC(YK{ܛDۤ7$5i+E#-e59RM># )!andhՖ:žDtɅV oV  lxWgyC#% Ȭ AW.M{cAV 5P`krC$AU8<3Bd,"XQj6\ -C8rlH7,a K bj|%VǷ=fJ>k%`lf{U{|=FOGG8J/HYǢjH@1g1nR6<~Hu{p #kuKj -ObўQti@3D3/ʇyw$]A:ƔY-[~{ ʗü@'5kz+`XњtSw/7Ǡo,YAc3Iᝇ(;emB&}w~H< `aUIڟ Akn,lyȻ#P չi6 B!Y엽%E寒F gu"_񽕆Cˏ@f;&+/K4DSX,PEkB 1\Cq_9[Y̧ƪIW;fG pmZN՜lfX/Vį54,zX8|>kFA0ea>x}TW8TmɎy7)ҿowB3˓,ڸkH"밉epTۃW^nzŔ B5:<ԈYG5EʅSFm=,b5f=gk `=y@HB*zԨ?_5 ^P=d`zt֒|ĨKPCe],:r~+#>)Mb̈26q)lKBqxЅ~G3ѫ JkQjPAsޞ"1h4/t.ByYŐmV.D"8,/k5k _L$`cU C(h_u^&I)hTcnڋ&1X;|GV1:njIh;3m``mr^R :f8o=,×Zw듯w!bM-S1?vnGggC1*׮ru#7ߣ+1vf]{)]~͈޾}$>eHrZaпySł ΍)u"f}H=g;<y! ^|mjzleu\ږP'@7'3ŦczLy8q y$c~.[0z-DUhB&$JF<4+(3%%08qM8-Ɋ04ˠB ^I`T.89H4&4P^s1m~] -UWYFpd o^C'|aLvjكThtJѦ+*0idJĪR73T f尓<)J$s,y#~791zSw1w3ՓE1rsS+q3z^ %^˜Ou}gu@* {W=(-7*$q d^L7Kp=dm <Τ~|tTeIgi%V)Igđgz9|pkRͥ.A %,W-*r{3ߣʅQJHo 3~yjO8O=|$yb =Շ=2up9OO4w2h]4Vc;RzC7H =nYS4a -!`O5xMP+Al4Y9 -vdzGb>L52(=وlZ.D]zMҴ7}M_})a]緣e;:+t`xh^$~J&fygSvO)jɻXW@d4KGl8A gB3hۜ- )¥R؂Ai@Naږ1f2um*T2s*NK';MeZWe@hOe\s[ j-Ezi= -O¢e7<})L&tyf}!B -I|{DΧ$Ty#BJgP!Ή*zf4æꠣtO7AP\B'R$ OBYqFg)^B }};ZU LKi^ieff,t=#5͏opPl7k*}el% -]k8Q5rN, E?4Q0wj\Vh|FՔ@ZZ@=:AJ҆Lu07E{vE+"h*yTqLT>"ژN 0x{śˤժ44o򲙋ik^(2q4G7fBpM2M~l'f@' b5w%lBV7QOA9_JD-XA(7z{7hx4P_q&xILxIWeIg7JSJ8$<˩s^ 챙ZK$^Sw\mh\y*ӻۛ`^V.R)_^iy}J#Cz!G.5GCWj`CJ~o,J%U缔^Pr0)7aü -ڰfqBqrXPg%)M0Ki2C +l!qE=j+ue0"82(=X; -!4ߡ.&iZ dfF -B.uŖߎ˗#?\U_| 4&XV|VvϨLr -*{s\΢4j :ܽhpxl6=LbV;lR,".`l's۳_YDҜΐ"E8;zo|r|f[T{wq).yW8SйdqAa>a2S5hq#T#Ɛ@ƫ|?B05c!x]Yz% ;Zs87iefhBmU/1l7?DVZFaWᵩͨOk{kM,Et\Ĩ Fh[~s*oF6Xj*M!PQ'=|j_' UDﳴ+Z3rcˠBFucQ,u<]&]uy;ܕ\ poԓzE{!*xf^777fB_5p7і+!RP)TeQPIEU o 'qF#_JD87*{+ -lM<Τҵ._9L뫪jY=IɴFBt.P$<˩s^ǖzl.M}gun0taON/gojv~ޮV+>D>uHEnF*hd`dhad溣g5֞yCBkts:/\tи_|ߥ(a5ewmN^&wxD$ <9߬Ѷ95/IvVvԢfߔ#_+xTs9{C9_[x\1'kL&G5Lƕd,M̓BXJ:#z e^90Q6:$OGs=#5:)NL$YdV,r)@0ǁѯ{h ;W'u -t'tͿ2XMkA2Mc;P6gLM.&Crfi{0KT0LhbO՜\ܓi0Ӛmlqx̉J2yxUƊgb^uc`V -a-gsh(]T:7^8ҭzW~9>:iӐ-_ר'BG^O*2fs|FJ{Uz<]~浳3 G0֧M'-dL%@(gp^'kWO#橨w}$h1|7H2ʹb1XcrQ΀gɄYsalVFaJj*>NL~ F#5W2!1ZZUs/jq2*Ew[V0e%y̜Wˉ]ˮkn.Qdt|>-~I"k; 5zn5-b+qFf#Sq/T+>5EdGLqU0жËKmYIdd:ݜ&]'Ws%<׹f S>œUt6^mh!ݥ%YհtԼ)Gr}h_ S |_թ\hRݑ]U{Jƌ:h,r'iPc]ߨHAxt<끍J`XPfmqh(]T:7^rս_wρ<oHF=)<: :a|C~F D>k|ҽ*=u?Wژkņ[kG-"PjzK({|+>E>©J4J?Jd:([5 O]+p!/fEބ1 }VHP1꾖*l9?C}Mϸ_}ड-C7-J*l 96hҗ4Ʋ9u"u0^aguN;u:lVaYY/}Vn$tǕOxٜ>⽩ʳUq`oD2^:-#} -8~Ih3 ,VvYE mMz:ss2RWFв_8 <;"=cQ֌[h&qOО>}\S S!䉾V=ǔd7߯zB'Jr@x`qܙSSyn0 xJ& -jociCWP̛jA±hl"f6CN;syHN-svʭCxHϛMW)$~OY$zFw2BR'ERGr_ꐹ Mt^6s?E8'ᴵ `͋{1ÆX8lX80_]%PNunH.r-c"]u#Tr9:~d_s}$5l?mT.4Q-]Sm%Fw'^ReKc{ -Z-f^B-ph?~".rEydu.'ȺNw"O>"_."^.""s.{.\j!_."']dWd陓I’2[T wz{mlZ`#Oc_a =H_;6v'o!7\ 1g 4cFTȂ58gb>֢k̠z=KZƘW%"[W ˣӟiÂ<ҕ,""[p@#y,cBnT!Eh@cNm/|tgOѪ?N^`:\2 5]?e t=hŐBr!+b)9!G'3^a}Zlc\Y7QnJ .]݂wQT)~$boaalZap^(DxsM4%ƢJ>VVtקIf۟IɳA?H^[¹u,OmvsMshzKBm8[UaG.&!ʰMиG+׎0F]fG_Kay*/5TIԹAmV #Ԩ_ylذXUg>ZPV^ңTd*>4:IY}ǭ0?TBڻwKF@5ٝ9;&*hg3^Jt$ \4k8VHJYm_+X ζWt Ӡ`KA#( h,{P05 svc"R4J6sxb-J>[up@&3S!O!^0oTmVz -K*<lZ6WTiҺpz%Yqq%J̔"|VnJHDܸ)-DbUJJ%N$qЫę V(D,L#aUƫj&qVTIŌ xv![7x2j8mh(c8E$ ``LIU2e$ מIN \UNÜ^Dۍ#$s>;_8Rtf - $8T8u)Ғn6U9nfR]٘G>+D/B#RDMN/oRaTJHge@O{ZMAERec;%#$F¼x$q &Qs۳0o&gR0|q )")p

;];l. pmM Vf핾#jAOa7m?0`5C$h8 -k5~^=צEJ6-{ V1#;q!Rw&<&kvv5Ǽ GI>t/=m/ Ҵe*1J2.ZƩټM>t߼Ip $O ݟi/l֦ oӄřVKz!e0#?y=~/^oF:<}:M7_HG V&)TJӤڢ4x)3S;>Q|6̞KNe }ֺN2BGDLƇ -{t  :auNOl#M%ڿ^۴0Ѫ̾%w1Cr#4zEv\ǟَ8{q?>jf}.tKvlA]%H1G՟YCz`]i&JMII촨t$Ky0JNh6_k]OS.AJ`8=/+;RkbisZEb(ɂyE?48zڽxa谶R'^QIAw@<#5I;['>߽3{l=(|'#SYOfZ/~fgOsJY4T7 e>DɤPV1x"#-~}xgjaK)VG -%(*7`ũʒ S׫J!2_=os!E?JZ)Ί:L{ٲJ&m*sIe)k/q ` K1㮜/ZYԂ%[4¢dgto -6C*\s!!7K{ z0wl~_[C2~K:TEW|o! /G |.t' -.qrC E64t7wsZ^* 2l:ҞŒ:qM^0 kecC22xq$H0l"һpz%Yq.rYx?Ir"U[[?ī/dEMo+jܳ Yx@̺ĉ z؂68ӐʁŜfi -xUh2Ѿͭ&䃀5U.hѢCʪ(c8r -!K 4&[Ӽ&W/;^{&-:!/rbVAl: #z8=<z/3;sjJAS T6U9nfR]eʏЂያiPNYL8ֵ30\fC- cWׅ,KlZȍ ;,ldKa.|kb37(d60UZzy<̶{+7IV3ű$Oו['u\BhMKh!Go>78G9Wv=R賑j'{ml5R鮙~"k~U(u}QJI'0E9xrb\9-dRu5gX꾬Bԑ!<%a*t,׹(><];l.pmM VgƗ#jAOa7m?`u ucs)HahO\!o[9*NjɆGusC]-Yr0pS& yraUM" >X#r|YiG*#镬̉Bf)mxJOseE=癒ZrS XA8}/x1,[#hjő %AGY:'gA2VPN_#)٤/ ܻ'R-9-(;"͔sl|佝,n-8*B3yb6[QQ\t6a-9%R2oM \W@;#%_˹s͖ -sZfB=VWcԢUGh<͏?l%SV .~0U]bKCwb~ky_Mnó\:\(.FFw(T Q[D,8T%ڙW ,zrȀC$!1Ƭ>"17"'tP>JyGIɖb!vxp/.u)'PҐ6^-ta=ri\H]K@ wVUȐCKਧwFl 7{O*ܡ:,N+ov-^EqP/9l߻:Bf>j4|UNcgwN*3">t& mݠfGK_._s%zRٌF=qw\YiIFnr -ǚb.$j>9ZBq C`~ O'  %R=X7!%_mdOWIMЕ&yy3oiyȿ5/^1txN@8AMSH -*Fؿ|*%a83X2$ud*TOR3!y`|Nsl1CPZLVjUEl7.˫pa#;YHfhI6ѴMr@1.XWkӔdzty?bu{5rF4A?Q  4  cY1nq[#u:Ndc;%WOi%ɉ\`Iʹϫn^B56C]o] z )M}t6S='* 7 %=*(DNj*zPAE:bEԐ!M7YM0P j[_ml5l`بNF0z#TڳRTn QXO]v|ƾ Pk#^8D\}m׻^g*jAS($'&L\1)x ]PI[ЛSE jzMR1;- -J9o8j.,Ol⧖눪QN r NI\EkYUX>E/ EAi9Sg8OUʕїHqD0LXs1)FFԮH sKu:hm5.}qVO?GL/B!8H/fhZSO>[KHGob_]\xF ['%²PIВ$'ww^ru%A}DA'#U^Jl~lTv:0zsPxHU5wC(p6GJg %MѴzj0)yYˆ@LdɥP-K+-%<tſ8$jŪeF [񬭼3L.M6y<݀W"zW/mfff:ڟHe(PFU|L&*׬vi#MmhҠ{>v EejSBvUcRķo .:RR%&$]`06%∰GJˮz{^:5y̤splQ&gOit]VY'4w"ݷE-oc"w'["3"}A2*VJI*C6P^2ʰ"k"mEr(,fiPŷ%^26{ǘ}QuPZރ©G=ؤB4ޙt+ s['|c*ד/|X0=uYT%a[,uaFaZi jʱnIW2y=s'jZyw/sdCҹsv U -P t|TS`JN%M hAU]|,ؑ|ѹġV\y%Q)2:UT',@Y5㥨ʝtQA U3 4r qʪegEeB*u5&w[1w%3\Z>\l(i ܃u:#ϘifI7KhX&k LydUqVuN$ib:xcUmUЪq[۪~ʪnVUiVCVv=@APzTʻ$[T5NP¨3+ȯ -6My݆v}=y,DkxSDUƸ1BRnW]Ol*d>d -;:qR>uZB8]BYX|X*im#k/fS+Rqٸfad8 m$*xBFEyR7Dc}5ZU@pTBs0Q䕖mnȱ.UIMyROliZUΪ&ҬaxQJm - A:)63~CD[3Z" ]S(ɑ`sHU|̳)VN/$oo@ ԢvzzuE5y7C7m4RL1`7f6vn5|^'RcvD:eGEDjK{9x TAa?^`bѦU%FͿ:x[yzI]Uq ;kd>:H\upfY0@Iz*\3N|HәV<4n+-V$ޢt<рY+˪3K1"<&4םI5!+9TVOvF5r *Wuװ W-[lxJ 6AY{O\Ptѳ{)i"rR Uu0\( gKhn)g0kZgt\-i$L"N\vʚU,]p:6oC^JG7zRKb$F>Bu|=̽ -4F}Y@njr Лk[U0bTzg4qk`:%0n$J`1̬b*9g.)WRV2/%|`[Ԝh4 %{8oTB7 x= ^lkS,{j^<gz8: o4LE -5*Ÿ?-e#¢94i6EШ.*-!N3jb8dplۼb,褗0Cu H0:a,PdZB>iZJ~}e#7Vkn7"Ld": ,}\&%,>$HㅥqyGAo/6WsJ'9~EMJEAoq T2ˤd8Ig! Fy2PL[3WŤ勴 ʔ_gqDE10ҥ5 (*"lSV -5F6U|NJʚ sf4zm16b'Eh4U -+m>E`h4~݄T]kyHǩ5oCKdӦr8'R[gmƤ8UD=mnMk1`V]8ģHx'VbN[K8g)r,{tkkUY%1E@q'XW -97ʭN 60 -o/!wÓ}V|Sp|)L=m]L']rV74 >ШN\Umy4Kk|a(AbP1URA@E_ϿR>Y^7U'w2tj#èJ1w-ry 0ȭs֓IN<<#/2~f~Pu4qu|kjZ@c -Gu"ў ![ϓFvz$ O?hں > -ApXq}T*I}GUYBBnCd;z`=cm}^3|F8lLJRL~Bˎǡ% -L#\(e@%u :=gg/LO1)LuZµ,%V%Mw{(+E| U&]֒M#,Kn$9ίU=zSM8:)%cJ|S̎v0ikL -CQFޖs:P'jcWLo 0̀-&46T%_i&Ԩ!bf(z~#3=zO dd̳7~1ꆵśikݕZ:XxOI(%))vs>k=dK^[^SGvQp-~KRⱢ0<uClq$Z[V>3DISu-Sf:=S]e)?OMO kr7qjV!jUU95xp[$ߵɦN:VF t”'J -pU\So"+ R"CbHJ4&!$qٚ|e)C^=$1Rc[M\u9|8c؟ %[ -5bYWɑCQ (E_ߌ~DVm?@tUVdrkYZe-wQ`ewҜDd`B4)~=bEY<BbUESVbzʂ+s -eP m=Zq6)nm9CX>C !\Uuп"dF&i_ZZ~J 0{[UQSi ŝH[/>^L%!zZ&cD8Sǎ^%I1賕yEc/IWm1ʓWdMUEuHPf :J;}#y4J=li6_F%=F$)>ƇE9[s~#g 55ٻ"!ܸ _V.\J#4] ˝}I≉͆Ӱ?{f},(,8!Yl!ExQ!u2O* ,Ϧ󙏓)@ sp4yy[-abI >ʥЏCRܿLm"Ij{14=L4ZmA<{Q7i7?TjHnm)?뭆c)[sTHؤQVtwj6-yxg -c Qj"FoZ%iiU/1OuQ窉65 (1Fcq>;\|L"dkB=\Qss-j8}3 ⶓb%R;J Q/&['z@NfYb --nޢ_'7&iAKLiiVlXX E<>&^}f;t4XaFQ{]b:7+f -*T/.TpwHo)w^1˓m }]7L^_܆x`̼~qֹT|R vqrˊ% 0i* bUXk>J' .%-FiB771ɰdLXojMN@8^lZ;dIQAZT*p}5{ u"ߋ%iArdoч(^?up˯}(@2QgsVSNR.5AfK\r[WUjbL2E->[`Lv]v3yq;Il.g @ʡ^r_WbN { 2j^x 0u\xV)1JbO|CLgqXc -_^`'R_ér7wp2WARcдk5p8oxԇ!6Vq7ك8#Eʛ%F2;iaFՄѧs0̩zy.=#K++JO. _|ɜ-_aZH{>@U[4(~ځ[IAUu^qN!Kؘx{h* &8#lgx(M@fsoh |#X:R†`j $ԆU%?B zSe(:*6 J0S4"RKL4=xma9m;'ՅjdliUM -m Xl~:8dbsOIJK"?6$Ѩo3-)? :rD+4f` =Zث|g~0p ' 2Y//π5.ɷܖÕlG\S 6hKj~&chyA ޞ/,/}i9mO [~2dlh)(h\y4ȕ;Ґ^љTQ;nz{2L\묉 YwaU= 64G1Z2I\пc c:q6DVJ9]hzuγ+n&{CcrvR,hߚWa D"PQU*>ZR)e$f>' @m<Ax@u;-]2h{ػʓzPo.[~_߷3a[YcK*|دR:UxAZA% Np>;'U62<. ]cxw)QUhTcчZHI@%ՎZ5)쭥/m;R:|y<Fh[Kϫg*Ǟlt? -G}㗿?~.PtHyPi&ZF':  >lC7J|$dA𾳢p+ɀrV&Dpz'w)@"ͮ_8 dhjUAϮ -BEmynBz㾹`Vv& m F% xzNd2D'اM:VEu{L']oܪ=pu p`c3p/7|7T&>5=qBOX ˔XX@LyW@FxR@gkց77D{&֫nt\nv{UVZGN Sƚ+B\{V %VsK ]/z-sk15VO}_/ kK~gDdRlhl ԟ߸ -vѢܯkҧgyʈg&c4*6Z:MZTm4zffrU72>jV-p;E56V9o }P h-e?Gg C`ZZfݾoCwpB@TqNmhD S/A?%wW\36u9[MrQgXDПj WSd|q꣫ȸwx6p(Z6y/NlP$r ԁo-B$Vu9B3rÄ_Lv/[!Y8clg#9lsmKHDH`R LRߞ(! Rd WQÝO)x1UЭZ:/,y6y_{VKTR b]91gܨ*ǎsSl#JkUzcwpН5&yZgdpWԦ ^BnʇEWq"dtĽbFPKŁᓉ(K!(;sn3V#Bg -^NpaQE9 ,qEw*OEbفYo$2 D)Rs3R pO-nx9kLn,+)Ur (rs"VJDg/n+^Zjԭ^*-Efky -("!ݯ 5ur9It[A)6w3W)sѩX {\7,ȰjS?5| -z^gH/u䶶(T)}p/<ܯZζf,gh9Ňݱ$zfsbVI<(5jd BϨV?|ke^3hM#1Btt`4MJ0RR }a.=*i 6 HRiH,'3#!nhQ l1T`@:[4]tgV^IlU|E}sF!l{T՚_+3yr C&1J–z? taRWp7D|#0`\-m`R >Uvcuž|䜭(L66.ȣWODk:P?3̏.oT6G&HU 'zSaaai>}pV 4DK"\):5| F#3[uPEdSΩo:n{ `K$Kfcg1"PTI W}ػ2VI,r#i&pဪM:n5vy::zJDj`贞ye%ڟiN^]f;ś֬ -\3.ĭ*T%c3J01 ŴMR '+je Yk@43Usup)Y2Qҩ.~yK0;.a1K::x.eR|R'dFqkJkcA>4t;2b `'ٵR,X7z:h\Z&VvY9+1CJ^_g I*/l)Jڃ;0F-dh8#(t$(M, }KヒtqUHM& E(c9;ms[ܬ9֫}+`eaA5O -h]vkE^zUt%Ӷ -We-wٚsgZέEay-C%ʁ 9OuO ^b@}bDN ~­$zCŭq!*\b9&Oέy5X(هXĬ7`g0@:DtWͅ} 0W ދ.d"߷rytPoVH^;$zS(#ZlN:]gI&GXP49Il6ķȔJ3Yj(&߸f 90aF&*FN1 3=rrȃȑ()þmHe/ ̨*-J_Ҝ04&i0v#6cZyv4^5NlFmEo~HD# %4&Bg269PN+]l}Vt#S85ڠÂ-՜bOxnٕ HzX> Ba`YseGȦmp~<RQJXh_{A(2_ ;^ts.Aj 3l(9(y1t)D#deM}#)S_QH,00 -Ћn/=ECy2"IvF_&?D@;i"-LJ ,{IOz%.rsd.<%6B(ߝ XSW, z;-KڇkMb)Z$0JJ2eZF/Rܳҳa4LCɣ'3/F=ߋtG[gu}An"h7ؕ¢4(T H Dg`U5Q m(ٛ!w:smmcv&uW&n-Lik5Y'C'O=q7]yY"8? -V䁬Rì˸*盭`At]̶=Fcha,J2cL zO>5vyީ{o5T,&oeΕ~b:w_1峂]̘) Ώs/%V~َjx\CZ62M,FE] ?!/)3r[Q-grQ/8G@\$8ٌ%qW-E -e2| 7@眮LhOyJp);֣)k'H"pI"iB?GMxnMTc;M~(]C(Aܣ|ϲ@ȧYQQ#N]2DDOf#SPZ6i}RI 0uO>Ee0@yّ0~(J3gXUӰ*?Vާ|$y;Nѡ|>tE $iE&<"&l;Aϡ|R~~h6A>Nk.Q t^4j%w!L -UCUIj-ыY2]Kx9C8$RyFu([hQBP3$Qֆ -"TӲvLI5Ppƙ:/\D~6;D)yۋb(dI%+m<͐h5`.iK݀zK|s7K -QQ]hU5,0pKzl=}lD/fT=sv;$cͳ߁ZiJq̴z0H(P\˪2:ü^2zE7s)aojYR}jj2IѸ;h0`CD=l*/ D#G. -mpc}cV .#bde28BTwЮvX!"[}khPmv}bÍ;݇YQmaYm-D5 6-Z>`p2bg -uԬݡD19t"PHZWF -l-j:Z L`b[ -~g{* \"sKMu_Jcm3F~1ۤ6މ*0|14?ۿn[,Cӑ H(Nǯkݏ'?{-t648#س`LS3ꎺ۠)--Z JUu!z8OԶh ?PK)pO.0 -34C#[\b@LiMќl4;.߱mu%fQ:]*4T1;vM Fs8uSA显L*Y>}&P:UhIѽ׀O9*3XL-/9$u|CpF_-2#Y)AZ \ cxzvB'nA@9DAK%؅yWs뎏5s[eO5B_ ڱo_ Ҿ?ϣD5Տ뭈gEABN`j䡄Dϛ016'lΧ@6[FyVV-a}۱;#ge"5t{:ŽXD FTW@ڐfզݙmWB%)6z[ӫ0tn -xO zz{]#i'phƒu3>78"Kܹ`O>O^vHynfįnu٭ܢbSJʷU/ZּN9ɫ{CuΒIYN&)=֦{[hVoõʎ27يRP[ղ-1A)Chm.~('5+34B)$!#"Eoo^6[|fQNkq+J}ɷ:k`5RgX#Sb#QzJ_׺o;ߣw,]g9Ow${i3#ȹQ<_i}Pp#[Ubq;em$N7=V\]TMyC w1E^z>0 \\pSƱ˜QL 7l8\ -l0IYLbDuCCa3KrʲL: --Ssh7"IGP"-kQF9b`lwkէ nKW7Ӷ Hl1p[:TOwE]±ng 9+;)]yE3ͣaB4-Jlʮ 殠BEg7*Fzb,Җar!8FeIoDO IeGwV Iyoբ>bQJrTc%ѭ2#`BCu-ƦT}J 73;~̹WsE| 'ڽ }.A(Yן_΅Y@YB^:Ӵ% -,v7#ʽsg:V-]s>h:VQR(^FE36 VCˬ!W3+ei;\r pP7`#/ʝۢEyW9*@E,mm"07gyt5$)W%O߬uT,Wod;_\UGi[=o7T]d:_h6`;O|Jd"xT܉znTSd6`7N*\޼ -j`nTB)J2|+3uSm:u:5"V?PlX@}f_ 8U*e R/.0{]s|%"Tk\cFd28 b!aqIoŷ{ls71vw&fg*)bH(m//ޢ]~:sSNH_Zp=`Q@QRAȧmtp9Hп n|>>lJjwBT+T(玞{[yF  u -t(4]v4v~.UZ޿nx05)׎qj)=KӆJvF4tL -,C(ٲpv)%ٟTb7 3BOYт&M:7A?):UmM&d`Jُ11fcvkяF;3~0ne, KXX(a4Iýp]l.zYE.]T~ Bpf\X !޿o\@2UZDzw0Bk'ۚLrMˠt^6s?qN~2hMwmN^ p^8i_5 nQǕH 4{ $dԮd t-Poh,x%\cDʞ5QoF6P 誩TNDŽ[\6F-8mʇ#}*D{BΐVw{[y+ HJ0]lve=/ :#ƔM#c49]9oNLoִ=ToܬekNb; - aod2Ő%nZ,t8% $F.%dz7ZÉr~6+`ke(^s]I']-V4asSK˫c>M+b13o`卖VS-kh2 OuGxHB;,S6$Jqgmjɱㆁ{@"0&_DUEu$xDKO-d}qiHV5Nc*BHcCx,yyV/5O3j_G+Yi0HEE+$ӊ)A/ -!&f]^:3cBN-X\r]Y(pX?] J[$ߑ5T -b9ʻS J ƢqIB03ATkfT2Rs(y*_m8fCGQ86 x'#ZpViPWX&8̵FY*W| m?V?p?pIz* 1)gMdhO$r!ԭ)K#o$ -0J"uR J:-(ba4{G`bܽ˒u,c md)":$*L['R.zf]rCq7"_QKЃC/Kصm$q kזz)RSR*i\!ի;7Y N=yZ]N6]ƌ׍NhJV-B02HG/Ԡ_s%?&ik -a%i| Rs?J5/̥QJ_Q*h RC AR$ Z PGsyE;"~%G~Vگw"5 -eBHUy"J0{Fmu*ܐK|iUn =hb&XHdPJM/|oi`-,~ V˱o{N<(XޟJ *7q$W9-<'S.9mHPj=2@Eኌ]3;]]FJ:gӘtH Sts0A{XJ-.d N4}RP#1V+Χ`J7Hf Q:b/Q_A *Q]jh*=e -QL' -X5v+yHVR}H Jz_?돱5є0E?,UD]G+LPB,v%k힋n_|Jد)YJxk+ݹ w`g=9<-uK8ժ/t+J唫aQ߹Q$Q@Qa)퉎&z\7X7s"&ge:H #=*yuR#xT^=K -!TGeTS|*1aSDGOITT -Ĩ[6*ʄ]/s0+:nNQ)Yf>dO3z;n5Cz`\S;!4$$UV_j`u(b?"1L^/wdg ^ܘ;t1Ur3/JީwY*޹yע 8"atSg d gTe,ҘI`&µuBmE"J`:gKfmם -#miޅ~MCΝ?|9zᏍ5^^5^^_y;J=*,eN^9|? 2EU>BSQ6hbMεl)Tu 6YIЪ!4.gfGөeaq%Ɲ8N$y&pQh!%,hn{jee177Y`?eT - @AB 1Nyq6 -}qAlHrSaptc#CȵCW]i׶u9U"xֶ$}TJrɂ|қ+YR΂u=k8TP&SVNXK4cuIzRyS$# M(۸Z¶C@+W%&Z[!h9Rwe=j/bTRчRilZIYJI2m![ f#j2HYx&گ7 -I"%8%:_;ވEB*Q[]7LȍOr[لe %f] JRVCM'eA`8~}l]<,YL"_T$#t jTqٜ㚃 S_J uUJk>6SͻD"gꠀ=)jwZ.T8Wn,-9 -4jkAp%S0E -Wؿ żwZ.Et{CiTBF>dFbxoWq~bIv% u)]n[8/ze 7X -{av;h* jfoلm0إ*z$ԡC4"Hpj1M^%_mvs(ן -M6fM'UCQ'Ce&ޜn*e]ei԰#m&b=28D !U]]IBژy6|5zW#^7q=ҒJȝzd̑$ˍ za_3FZ CY6͆YJ"%wwZWHy2ZvBP$oUb'l ;kIQZ'=XHY) *-iKH qګhۀWzPCICwZFΜjxk~ٙaKeMڧuv=/P+;IwFPfKMXdwE/\6l;R31 k+W(l/$ӝ6-2P2WEmj/9,D=Tu|r(b WN3R.FyKȗyЏnQR`_ 3ߢ,N4%a}|UOhM!G9$'%Z~8n -ͩ;-'#+KT -ĕj .>UVҟy`Q=^2&lrPӭL*th F[L06a:N; lCO5k& V5; -*ceȦQyLN`/d@@_ X\48&zc< u%Ტ/Jovrz~cA7A+wFJs):SA"-"\,=}[=G~u™ZC4\fꫦa(?P>  'P2{÷= ,XMĘlt@ZWCo`A [Ҫxe}d=Ns)H.;EoZSdjXj(z-WKgfOkWi"XeE*!c9RUl(_FnL][BE9h9\n8m6XMnk1L^cckY92-"}P' ܱZrnJĕ>q^.On6; H1nM2o'e {*.uyEӬDQ©Hؚj8͘zey23ɳBCӃ[O:mvGzLhv@ĠܻQW3.Q+r֪PѺGp -"1 r[]X5 ,$h_UhQw[vå@_!%c@lZ8x6/(u+pX۟9`+<_;K)U!F5Y=H9i2G>pɾ5&;GIֶe(kt^䟦Kg g6Yv:ղr#t.T`ETѝuN.b,Qӂg~Vex:j1X v)A7*af\eAه3-Z]^+T{TgHEv~ֽ$^^kB}؎h\CZ]ױyB &_d}-Ǣg -O!u/ؽ0͂[_f]ڒ/}*Gیzq%?6ݵ5+-U8ajKe]k/#su_z䂹x :'+":qeq\h%R0 1MdZG`osNdVRgאr,lV5bǸ/.gvGa4Ԣ)=/\qJ1em4KKDx/P+ -dBG*C<,LM=Bb6bcK$鶑۷kIbFT:d[ћl[?oh_& -l|JJ7a>1*sƨtQ 5AX4B+yQ">TҪ~fL( -Ϊ<1WS$ ᝂWIbLU_3#;)H:t4iZ$K̶X׻^iX-p$|R-p˛lnQ\;=4M0@h{zMmsȤMc+SF*}FBlQBЇhf\+j]31꩖ggRT<VJ'<֌)vyPVru@$C-yT fC˸C3Be cxЫ(5sݽ\(1Fyk.-d0j(RlXUZ5۱_ 㿥_)^9KH$Ϧ$NLg0U-mefJݡεP0y;e+|Z,WX4ҚMZ""Hc嬳VKFժV  -9FΜ/s-axΈ -I=0CBԛ6˗J +.xL*\ i$KӰv[wM^̗!5F3%%f^^ A6# Id \}-ͭ;Vb%9A1!!`DksUy,ϸO7J%G ?zhexCNyY τ|Ano!GZܴ++վ86[EE:,n;RI# ">(Fp\usgC'qx`a6&HWw~w&>W#JND d_c]LaH ,p`_ɚ~$q@*@+8yJ /w[kt,2@]dUY99=uB879`M|=97C~SEV9Sn)ԝGE tБBu:m=^4ugRV%B( 92RV<՟zGAdx "["JHNMyf -~$ ( "S|GN"pra:HY4UQyj*y EHA-zK(@h)/kpnEwmIR]~nȋ -67vSV:2͏L%t.B9PS=[WGew_T%dɴRj;Ք}nQcTɦ\xqjsr($n)/'EPO-d@vcֳ.Ht=9`\[ 5)`Z{ %&S=>kkz ^.UnU;'Tz%U*vՃ^|jb}&f% &J5DSYȴ%1 Pӣ{nWˆvXl6~O `c4 -"":TW#N@kJ_W -7OE1<ߚVbJa:,l^6Gu&MP1 ﹙o\>[ZPY5, >Gn6l!'ECc!:8NyR9GIaEz/T!&JĀҪDiSWhF/_7 bt$h/VekiZJsR8As%M 6tcKwx?W_J?=b? -8цhB8EA*eG*+;"oyEm˶WHF]zv{ f_ Ks^@~Jbl+䥄{]XW4VoaӽUiY{yv4߹}U_F˴z)uԁfƇ($¸\e* Y=:q|7(J":NkjnOLrCw:u v= eQTW\ʇ`dV:L҈_ذFўͪ?I5g ˫+2YRuQ`)֗Ǭkv{QWH$yey * -5E[rˁIdhg-|)J32K.^PmppUl$9:f[옌q+K^K:t+ZkcGhKPU%|[4 VkQ!/%@i`$hrgnUa-1yO 9G:Oe>ø%#st>qy)6ķ(|kf -2ΟzO4C&xEgĐ%fӑL'֥4&V^R=e6E73L:ِ׭灥"\Dkß]2r %eoysi?$+hpE oc_h&ϙVoUVoUvn6l_FjS$6G*|9W[w.#]dYz2]KcfBaa}mWֱ jl\tpHnrq=dYyX(۬tiK5E6eR֙Xx9YrCD(2+#@<H*0>vLe\ck -PoI \- Zy8:ՄlSMT vqQ -#ՇZٽt*/.8ҒJH bB<'h:T_Z Cb\.ɒvL#Y9(lj<_A,0] %SyDE:=Hbm 5z,H3ͯ`?.cˬҸ Nyj<ܕ|{:MҾd5$CsqU6$^$DVa^&x*/DK8GVB)UxXm L˲Ǵ1Iq?5]0ZA")R2=Ut bKP2~xLH?2sw}#cmbaMzMS3}ʵ޽pz -M{G:^m!mޥdYJޥ(YR -}Kۏ$w~uwUJm8Pe2qAR+*iS<-d_LeG!ME`>U 5kiqEy'џrfRT-Mv~ -or^H<wJȖOR JrZ)Gv R=t},Z3lxH h6r Zy6u U4+ 癿=eh^'/Hr_E~$g _Uh#Ef& "a>"yڡ_$Z3 !>}:hoуSψbH~X3 (dsa؄JÂ7]Ԧ߀kY xꅖn7uncl؟sǭX⟵F -|6K7nlP$3U6-RVc}avA!é䷮8~qq9ڏk.[wη+c a|˜)^^wL'wѪD(]B=&iP)b:s8(Ľ Zց XgF!29o71kP͛Hиl-pų8ɢ:^%jM]L4m\X(&4 gϖu?rΒg1㳼Q0;99~9aJ%0(44=J֣!co54op'5㢿2) x@*Z~HQFC^0Dž'7d!$4EFxzl{ f*\Sk./ -zbF0H~j{I5JÕ/p%2wBs{&A.L YL6r0[.bשo'ncxX -쫤.tbn {i|I+7 -D]t6큑J!_ZoO%0&id [lE^UmظK WxEX沑:Uy_N!&( bL4XϪR?'` FK: o(xq\v!LN-5ޥk}KB<=ӰFW$uIzŸ@̾a: -i焝=O;qC7<4%5%UB@^#ݠӿYUaSf"<MUKE1SҦ>Ґ nf҃Lh޷r>BGa؋"b粶)mN MLoUK1,>[KkaR!>]8i>u"Qcҹh}r1XQz)omp3l/6;PLOU'UF9&oMv1&Svgkb j*>pSJPq -Hs!|yLPB/UGMo/;Mm??OV\i{K_"; Vmߕ!:7:)>joa;aaGxFkoa>: \R!k(HCYTjRDWĩۍX[sΖ٠pE /qF)ўߣs5EaqZXh-HLPx2QӖW&4xf}/styȎ˙x#[V#l7^]PXX5,ӈߊf 1_3>10N XS<oRF^0fdDt=a;ߎ8O SE{Y%FHŽ]Ȅl ʉk̺{μ> Q:e#8Υ192gj/!uĭV?RZe1gNHIfzmϹ*,T`\BzXn^|i~4d{ iC1vw\Q)\WR|#ցs}pͮ#z ̤ &~%RfŕpRW{9W) P ="q~}%}*+2?+} ?Ӻ_y]Oh Aiɩ`!@bX(1"9nZ.C eKL޵Q" TV5.6[0B0ƨ)(c}1FL[*fMykۏ 5X!_7>B*EL|y$6@Ba -L@ -^9&=z˃ i5*@^L5;mPLLQ><ZѶRfaKs.)VڗTi7|Y:'z_6exbiGB]_}S,K(.sWAtA/ep\>c&N%QsxhT%R\[%kX+{HbHUa{Әki:}}?4fDYd+ iiв\!SKs4;n*zo;tiƄ֩*n:iPeg>Ƃ@-u犌֖6zhlqTչf>?^l:TԞ_NJhF+ۍ䙧?f\څ ]_A88gC fts I#ӈRՐ#W0uQ́?³:E W="xT;X25kyeunC]Mv+\We3J幤{CRPGƻgMF}=hh-mv>=W6EoW9Oև(OꪻDQ ).› SB=/$[R Ͻ@9@ׂ"~tp-tه픬뙥 *VTRc3aIaH-a=x5b'( ;TI`;/ey ( n 6 E`8:ͤ DUZ16,JZl49gѢb"KƪѮ)2anv#g+Vr/0y95KTDЅI.΍N* 3V5̏vѨ*"_WGInu'\J[uD\dJ\EU -T$iA7y9Jy$ 䱓It}6QY -9y{,t>Bg؅a5+5e[[;C;ƒQTcuxKXsӛRkp==@tEx}Ԙ PkuA cb/=UZ -n`5dՋeêbIC}.5PMSeGP% -7 G@d*Ux]?)Y4USkmYWkfU=cL!@p_q323WJ}^JJFP+$ <"c *r)ܨgXlP>h*Hr0e4Kq.JhN~?6B0 ̕%X{劣2TjwbRjH-|(fpl^_i -Y{PWH`- #DvvEm+5rf:HuLvapn{4xi+#~ qg\ -P?vmƿuxc\5/G!!8#Oΐnm -zm!Y!qfGK*1]"$w?7Xq${PP*#jC22*p!JQ)R: -#oQ$FT^9&&ɩ ihQo5*b}(qɂ3.%TΆS̶D{)ո6}.x^b'߯m3b3׺]pyu2՚v%W/ N(pzG~[.)bMFMG S0|fs(AI3"S/-(L[ڶZe(,~@7@GT_]Y*c2 rL2~Uxр3WCd9:LڠF_"=#*?{҅BSL: yv> ꇏ$:TSu(K: ^f]gmn{HcdWu_vצ+ׇjrV*P̟$.Rѕ/x}q= OI-(z(,ƤSz*I֖q8iSkOx%4(X:,&&gu v4{hB-)i?ݙCFefGYֲ."?_~?%6^ŀJ4U݌}tjJd/I6+vK=I}ULrx{5Fa?8{Mѹ -b-0r<29JY{?Q{mSjd7Cѭx ]gI¹$geT&H|ǒ -)^q}h9M#z󪒜Y ]%&?Ι:!PEl C+,{M%He][ѡ7"zokS$|֡IHNّ:%:/)HbsVG < -CJ|zHDKc|p매$SlFw> /IFuW9zz! gXˎ(`B-<++Y MY-N͞)+teAalvzUU5!u:X;}T# -opQ% -~nn.}vM{!w#zC'ʪkl;.R35HV7!)"GB3mXP^Щ8k\aI7X!t+n~3P7i1n6ߘ-3=7kb;]hI01P+](qpF}|洵o;PD-\߀:WZ8UJ!FY5AަdnV;h:j' oϛ2Ls;0TOﯠZtXdV<9JK<*rD/d\VK6n`&U e*QͅϷq`#Im#ֵ :(؜ ; gnDzbLFQ=_="B[8|k3>%B7;]V MYTpUY6!z΂zҞHR ]N*gSҦgrJjYmF.꽃zB~7eL>:br-@H™}q|"B_ύ9YBl4m| P؅ |f{jʚ_j -.6pߕA:?iJBȒԙYUNHfS?.xРe6XhKPDV{Ga(8vQM%z7^*Ձ$.&\jCmlk+\_IRBÅ?cb]]ײC18kiLcNŞ݋Nsx%]e#X H[PD2$Cfv)zȕ|:sULp:1=WAG| }tе?t̎ v3/s0niGUDAB#B2L ZVh2O8/q4d[h~&̱^RS=^ԓzRxH D)K8ݤLH}Ѹ2EThXiFf1FpmXP2芦ҹ~Ξ5Xoe#+(L `a'lSd/)/\XUAWv605!vA - t {M^\KaoݬQ)?1WN+BMVLvo> ZMt\3`N2I/8ʽvtBuCDt#a]J?U(krֵCT_?K{`Z Ff - hX ̩3g?!B;.m-)=(PJ -:MOP 'w->$bf?%mˍ& =D(8S5QIrIKI!y+oAwnwrWYy*Mp@wЖjeDY_L}Cd@|޹04`>"՜bVۋ'Hu -̈́8}KC!L%QB=oT?r_*J( idxWipEzT;gݸճRpi -tAnњM-~MV'=9$ut<5ݹ'Ex3|d! l¢|a<07/ѷ(ۯ zhŨNReJROKeدM궏}b[S=WH G)VPY u-{׳uRxgq^K~ %_aC&ATU`$JŪV*ⱪroN*F}05%wkPucLli zôvsjɵ[W%-܇_e/qS[kآ um+ښi9j}4vibC{mGF|J7+i٢u.{G(F'Q{U=&XZ[2u,$dd}"BH[;OBL -.[\On;+jI bVt蝎Eտ0O{3յr> ?2cO:%sd%S gSts3+OXSl_a`q䓣y$}5F?M"' . $h׻ L5B|4ICUFỞA?<.ՃWZV)3!RMww -az p,<5]v,X"k!hC=I?+teA׉sT4*6Ҁ̔l!ǺӥHQw6 %>o!UJ5m(#*2fv1~g&ync1T^xmXʆA\dVӾ9i"B -7>xǹ ۸c>EYST -%֔;vL]T%P]Vݐy%IU6D7NnBIR ̓ [qS9A:o&P%u578Ɂ~ݶ<[W>%WA5$rpt<'@lWBt+((;UL^s|X}ZS.H4CFz_ow .G)k͢6/$w>sHbÐт\(uSp׆H 80xj HeɡdE^jl iwr I@4PSTNV #UyBO;t2z1Ң~nl9&10 #E*U6`u8NmȊ=-@^Ub&YWV7YŠxOLZӫ80ȑ=s.FM,KΕj*=Kz&2K(sk_ؑT8ϕ*jᏸGJWkvdMĴNa:2%'"=}QR.OrY>tJ>F?)HiwzPMGF%#a} d=og nkp y8<s5/EgNM/wc]F:+[Y*ֳFqv,uuap*ziOQ4kCl5 H(m3HaOP] woϿſ!K+oZ[(x&aPB)eP?[ bf '"ҟbBlq5l -Rv1}IjK -Sp-R)vLUp}2U-IU *0%P Ext#bcFT3ؘICL1Lc>k,7RDtJ knJX0TtR{gfWf iCLm'<yQrq(P3*1a\ M8]/j]CjPs`=~X\!@Vm\SC⾨u߀2/%Gx K n0P;QS-6Ǘ蘛SQ0KtW2=*Utг;Sq}^t=3UJ) >TMkWs --Ю2W{+P ]DNW,y}]zf`-hz)IBF`~#g۶}'$+ Sau}]6#({/\/yb%KǸ-e!;}"d}#݅YDua'{׎fZ"ƒ!X!"E29;~%XS6{*eSӸ$0r23uf(ϰnOy. J%O_ȍԪo&lYF{&hM*Ujzы9%kvxOgף8݆8`?^qх va' ySJCtȻe= ABȁ7|#EPzH֥\"+uu{ޘ ,MuCt2iw^4VF9,)l,j}?x< -?TnYZبr*Rfzk4lE k7Hfw'gv%~+߻azÞrQwH'y7K,Ex,ԃ3]I&uVDqEt7AeJ5Qy tFTϸf(20`1Y5h -v7Rdmp*hD"b%*f!{ WQDSkRTSV/Dc&H'IjWkIegv ɭV4J 2msh\(>uN *BG-,иO -K_- 11fpg]lG.;k85PR Rx_z --ReN"R έOu?,ӟy^#xooX[q!FhWPY[/Q/ $#Ny'xIfY?}DeyDR-ӆ)Ղ[\vӜc5J8+V(Nޝؐ+d_$92LADzxxW<ͧ`Y9=j[* s*:kp=ǔW} 2uU7)ѻ{#ECV;~5>n6/F8ƴ$&R#D>?dנlai7p^J1jQn&iߨVʪTve -Iܶ&`pVd>iUWBy5E]O/dC{W͜h)rU"}1k%uzadO D]XLKJ6NeZĚjq&?#xmmt2ֱa}_MMf "TilᆵWӠF~i&EOk~Mfא8]?eS̊LjMg%NI?ک%Kڪ*CAq^L,餞 -aOnIA撲ÑX@@YO;ڍok󯀼!v )lkq|=luLЩX)PVܟULBѐګP Elڛ ǯHkAU]4pW7t7): KVFGdv 3l&V~^5X__ȍ+UZ {N1^jTaҷSyt2{gtq>q S.@tX7`|81g (K(0еGr1!ZD9tPF ++4(CbCty{}Ey4/ңqd@^Rh}5% ~2L |%mrM%t8cIMb&]h֩<xL%?Oblh9 2V{ ;jv'ZkU;_MUOmP]~J6F7L^tǷHe.T]*k[OlWPtU:1׳+vƞll%-ebUS*nWXܶz~fPl}vcw~z:zPo^@, -R{=>=־M~:aCAOi] -eBōgXi4Qs;M !0؏F'kǑѭhg={dOAg`-YB=kOͬ,2 jK_̶3k vf̌/N՗윃Og`b ld0Z_?yUnP cC8}ɬL0|9I]kT aS_nNe{V^{{lkJ{An`kib4 !-YV_55a^dº0TXdSB6Z;P< yta/O) j bҙjK`շl|\WV]gƞBҝ9wW7j4kÌ=׶g덿䁟 xhύVD]‚+WC8烡5ioG D1ZVn`Au=fnD,r;c\PLr ntqUM_&xV!=ehD^sBL8LD֞JO|]M9p}EG`$v@A>͒cBUbL -. <uϫF9 RЬQݥIa8^]:vX F\8siQ;)=^Y^تs& ]lHޗL|О/{phL$hY"m,B?mdz}^"5^[[0GB/ƢKV fB? a%F7cț_v Qa-k%TI:%\R$0p OWe"2 zJEÈ|=x&@vj<Ï><1Dȣ;N?u;'uyDe^<"aBΦTiybyB?Gˣt*1Wq@҇EWI8L9ƒ$~r61$[lEPiDS?QMZzIO/ Gv q>֥Ak`2ڌVt[>z<< R]?E - 5>rv5d=u P6u u}A6S"a`S`P2$ܐi`4HDYمԈ ah2,59+|+Ҫk rGe#_ZЁ*7,~Zq|POtakx֨(&/+KcsCIip^mW - }b淘-f~a13bf(fFiD;R&/@5IGw3R9U u{6~D:KC$j=z˜i0!hxN͡gTS3x{.Hytպe [MTK?2nSZ7^KP3DK%VR-87$a<>vS\2p ,m=iRgr8Ԁr+R"؊٤ }!\sjP8g|cg "]u sñ@dԄ VK0uaҟu@>z-xJV`K -iԸdt7r [@@#Nu,LDj|Y|[B_ߴmCZWYx| Y2XSt0RGw~M1"N/AtIl+uz|6Õ`3?SS$-GU%jN -!9fЀG [fpM^ֈұT| ბj&&!xlq\A VB vk+~DoT*BWi2`r&,Iړr440BVZ9[FG* KL%rf M!7F#1Lv9`m/c fv"թt-Sc#[2 ʝF?8d)(|- 䪞qr @'?zWrڼp컢2uWO5.G*,p]KW8 h7j{ ǀXԀ2\@Zxu>J|jCHrƿ/,9rnE,jM$`>4evXt-v `>s ,@cOMkJ*걕^ϺI.}Ya;1-PQE-yhWLI4Z}MH,m( ]c ko,hxDdx𿛪l%QېtTœ0>10rHF -Ê K0Ōi4qaOV(55g^6e"}HhkE܂n -XDYU;% \`͙FGd:2XSFvfaLY`Fa  j -৪,Gep7}4!ŭf#Nk!ҚPkLt(OktHz#[Ί*UhJiv"k/lӠ3}SY[,o'í!vjd9i 蔢ؒJ#1|\. |ŨW(y'| -Srʆ=_]lڟ*N~.NNNoBNG)q9p۝gJuFe"j+#<7H&ht -&\,ZXϊ茙kLAhގ\`[#c|_Bu[!(v!:$4Y7=PxZO$fJ po^ tgC/ѷdG_X:LtيrX0 R"0'o-ItR["Z<&G4=̝`1|!.c4R!%Y ݌º0eTē 2z̙͚D/*Ra{So])0n.EM4iY@N{9ýe5[j!iCK{B!?ppC`KyE)%#=Hfa{`~LV?lKNLa'lߌR|i BEnTwo6Do^t^,S>LSAI".U86(s+٥Tۢ^eG-}Z]0C@Ie˻gRapX=?#a|p}UBn% P+m^[6P%+ꓚ6Q՟s7{w3pax0;>/Վ任b<# -^~s?e<֢z|Zo.oPXB`{mzCOE 6@k2 1y)H:r7_ҸDh25jCťT,xDŽUTyA\沴m4l^Q#"8-Be5QXyz["5 V+?+Op585!J"ZI/иG34ߊr8QaXBM=LHCŠ3JZ$D-ƥӻt~Z{(5p -oGv XGGL?X)p{d62YSϪ5>52"11hzA(ΰy٘S,gbfjc='~Uf~bXTK7Ti+3 \bN_3֧E3O_ڶ8FuyX{XWIs3I(&e+u%أn`1Ud{M3*<}A&3Jb.Ql~~˽$f3QGR7Duz*9*H>mSmB"mpO{K֞b'&\ڽolC!ΰ"8/cȆʋ|7Et@γ>X%-z.mn}VM[e5(zK+!GSfdF FP.",dd}̨P`yshHQs5[qwf  qll1p; -i:[baD€>k"V{'B 1ZXۭJB*,a8pꎤ7^Ϻ(5NM -s6Md D/o݇ܩY[|e=C)9.Aw?-YF5 Sbj QCD4Mf,'3.Fʼ.%@N+"s|K=_Oչ.2QRj`G 9q !5CD9ECM5o'ߣ ؇o;@JoGmalRir&"* X/ S*@Փҩ-):ps(91/5@`[֣žpC@-dzd'<, MP,fFX蛵9'jY-vv:-93~IHvMA&"}ݧ0fBB2U92+zkLp0? 4*Ѥ*~0+똒!N=3ߢ%!iFi`&*#厰,Rz)<$31{ȂTir%2wIr;ۡɺ>7T.a#02SC_qw+9vgF -/ʉt]9}hbY'=ζXgb2C]CRUےJ#ŀN/u4]~ѴQB~ 3E+jTKG:g׵}x"?>ޟ\ޓ Jgr΃ǼP`ƍD^_bnha4P5k5ϸk@[ny!1Z1:sv6_uwWޯ8608,ꄊZhl}^sv6WGqto[XodirӪ-{ŵg)z$;cje)ʐYj [)ݴ}j0b$v 2`$xD%ZA2alM@ GxRRЕia%`Mrh7UCMŔM9aXG|%m_$z5 >E^3r/Sr$RSUc >v -("4&C_rUwiϹe@kF>m QY!{w<~%}/BtSZ ~g9RrW5>#qua+JGh2tNB(]\ -zY6)vT)9sϥcw}BT&͌jR̊ 1u1݇ yr1sTU^/Ȋ}{on6X'$7`3cV|Yr%2;U m}r0ɠ4C:_iaC L B{;{k_rpUÇ4I6#8=PHB0j8nLŀmz걆Jv2h9/6M4'n[f#׆ -{R{([FKiYS ٙ! 󄺌+j#F +jDZO!BY=QF&Z5Dtdy%8i ^ ٯj+rK,ޑ+i'jS[ѥ7cV<֦:ICK ,=cX-Q4*/E5 qg/Td oJ䬲+_Ez2VEH_qdq}BjCKΈӥ[\axK%&"LYdn~^+H?Qiݮ%KƕGjC9S_A qҴP@ly gm{ U5ԣtZņ5^e G}xp3AVPm$4flgpeZiQg:vj \ø;0@-xv\ZX<}cb;EX*uTIQiKCūb/ $K('ͣ g uҊ{'=N=I2e'+dJ4+O+8ɊS^w8%F[S-7h 3lI.4qU[EW))!$u3`hG/>(0= m;h|` y;2h?D%}7@La@R5 $Ml0~9 -7?<F{Cن]Ej,|nHNA@ eA:W"].@}p&}٤/elM N1C^E~Ak['g?E}>'ѯH/rԥE]")0m]R&#=:F cNPr5+'uG֮j GT!q\wZNDcGB# RKDZ?!-\W@ToBw 5(UfOI_,GK:ѹ:hCG#o2,g*6>.(\RB'mgQƿ_zC_۾q OEfCdbo{1PfP$3Ww[IVBl.dD$T)jgMk%; m|m=h6ޝnt#J7ڼ;٢{}~hXUJ&/-p l Y-##=w2 tdhri2G&3r5Db% -Vt%)oT#y"^N4T)G d -B05C69ԟ. S\E Q3go2py%Da2E+O"eb4ֻ={GJvɔ-T$̪; GGZC:=O-+sޖW Ǫ5Ӟn_%BH֯Ytv())|<[jgPCIsCZ@'6.iنB.t 0:A'w:]lTpH@YHYdz EWJV "So^WkgVNO]]{/|-Nn4?syH~3(%|ok<5In&a}BOE hCPG_Hh,4KK7mbŦd?lwN8hQQ]LY$;4"ewyf> ԥqek $34B:N1fA;EVB輠.sȊfC1Suil/ v|vD&VNjBD*Z%Tbv4j_"ƊvjQf}saBMw87@I{8IlB=E͑"Ky'IGhGhy(1P!ՙ1ebYpò3#2i`liFAڊQ'Ep)Nj8暭u8Ǽu9)q֓x$$O%7HwK;0Ɵ<{cuhxt[+?~ؑOQ0 R<4hfEUvozaKzJ -F%wĎX(_ M?œ>O)id8{e%{8^1QQAN>-K5ldu:,ϒYj0jgW6<.de')Xw'pGSָW/EP4H -';ȅ -.! -5,Y}CJ -gp+1XU=2`~H.9gO¥'|a:Ba5;JVN -RS?yZ!3*ngDzr]eqYݱesopiP' bB. *\ك.ɥm0!1ls%຀;C5iډ }ks_, ya5дmX[=3= cQ?~D+#_X^{{yBm@ES33Fݮ"02ktX!{0z`b[ƭOq[RX(1#LLN0yهv>S:F٭ئ,.-RO=X/ZES{Kw7mʩsJ+Gj*qf܄S!ϑ\*i6jn8(ܬJկD:JPO84"I<)Ta$&.K䈰vo%}'m(3sʥ[=[c6t*7Ѥ=1IBCT +uV_b4~GdGB'g1~gqy7גw#x#[[ɇT@_!, <>d b]L{)O[16Z߯I_%k5 8q%Ja_hȨ?{4&8 'A a:J$h*2/mXckؒlB2#s<;sWefCHrcARxfRNOb86~ - -G4Vr퍖w2v[]P(nttiksـqӜ,yVl4-%75Y*tΖ}Ϩw*AnR?r*uʜ "*+mdJ|J$#D%; pY烏_J VQ ԕ={)Kd&CT5su-{XH?gfzt;sՖM5u!nFe/`Ua38pD\Ѕa~u"(Ou3ݲ q55[^:x C8,ūHmc6ͮ}8Z$ۆtsߝMav9:@#-=F!-h &d% |n5S(*1۟G¾+,NNgAKM}@^fjlDv1XqJ l,CLmG|>D.y\@yE7{ Rc wSkeTYy>C1˚zB 9Td4#4FEGfXoN_$eqt@EnහX^PtFEe>}PzvhiU OyƔl85rv>:& ^l3Ml4KiV71~qfOcمy8_ -`nF|=?|>Ś* W~L#8izRg!DWC15StJEl(1PjS#g)qZ+1|jPr - A1ãSChVΔ5[$R4LbmfL"dC%VDϏ@f9D/JxSXc cB)[bE;0ZbuJ+1X -,DPpi76 "5K}H>3Lâ/fu`3:N TrRb}Sx?]+\ƜEti++k~ Wܶbk -cT %F^L['O>ƚKX9kvuNq՜Rk -mlX:*DQ/i&68TlBBESJk<0i*" e6{!42&Vf@ӻ/aB5XϞ5^q"9.mu*?/$r{wzz?5 $CwM"? <@j5 „՛>JJؠ)&S 26B?xZ)7\EY3pmUT -y(rq/yAܙ#?Z0B_5rZJ.H6+g=ck4)Z%~`uv 8YtT3ضט؎f:7گIo^' -دd)gqoFg>#s21^O~hjEɰc -x gp+jhB;~ϯOf MF`% (arՀ -!ww龡DBDRz-ko g[Q@5˴u)n"` 2d!Є!_u 544 B}5 _MW?jNօ}IϦAIͿ_ Jf/Y]HV=|F ]԰KѸҤ/dCZ))͝BN,.cQin %tOVPe_^L~g;ۭcϼN P i0zIp݈ }.r՟tvvL%` 眠g)~uLLGLLFo+ya<n^(Hyc/׾?@G~3@](A2le +=v֕xxMØح-t15 -6]tnנj۟{r:>_^n-Kz:қU)QU(;g(^"XKȳ#PXB`LĐޕ=+>㉐O_ՄtHwcQ\RG%Ra:d `Mk%16D]tT~Rە|?GO)%i(Ȟ fZb`X6TkjbEoD]/ҷ`:tOk/.uЁNk!g!9b,䮣lc)T rwBSp^<\]^l.YlAfs;yf1. @ $-5Uosa&C!R2}v;ԅi4cq^Wj_**w|.\?X -]wc}Z@=Z@%ut_sRjy@,Icڧ<))RɘcQ&#s1Q=6;y|k|]91{"͒UI(cu^qG0c&P;N]c kT٤@뛒N=9E/q_ےڟvJR5"] -Rt7QWz]lL_dz 03MљCos@@.n&s7jNp5UwL}z¿Dziz#OjASۡsOOdZ`tՕ* xð6MJ-B)8cVFFjlsSJL*-TC}V$+uBߥNcdH~6턑=HG$'8>yBLBbOȟq.h6!jv~\9N%֤QQ<PBvu@5"$KiF:TNuKSZdTv0r{.q칢P#|Ss]:dKmv+#)έRU-zU20xNM8q۲l~@׺DY<7 5,"q/3GaOf|2}6ITlL?*kө=3}Z^Jx:C΢ -:9;ՙS,=foC&?0aaTّhRiִMwa˘9e7~!s:/\kSl kŊ 'QC*S)؝P>Iks殭ݣ+@\Gjc<{n \K|֋S|Lœ׃팺Fz4. }D ->}ekK'aYqᴬkm}Mۖ7O>7靽QEϬLeT:=2uFS`Q )uePŚoRUaW8'lR q@~z~_ N^Q~SqA oߪAڢiO}bݳ9Ó%MN=#JHΈ08^D4|ڗ*6*'n)w=58N`H弯 -PğC 뵄7v1!x}9/!nI{Atfu{z,Oj ~kjXu/"iP#fӏ:X m&1ɃTU20T旅gT~[6Jep8@dDe;ȴ}ILM+([g6[C)YVvE;De;7',LZ jغl~b^syWz2U@8Bd{a"b,Zj`Paݬ\ots&u`|HzO:p4`fjo\Q{ e׎qKl,QJ~9ap4N5VT>S5U6)оLKE/q-g).G):xxᛨǞ.ۼCSdOzۭ|lv!sn՜`"^b&lc=`x'+ @1]KkJAV40ixz(€ 34a"ı۽s] cA6m2#6)έRU-zU20xNw[RsmٗڣOt_ŏ_7OW ]g=_sQzFyNÜK/[jU~Կ_ οFޕu?Oy~zcS888|9t]>SlPKyurO-sVk[JgXK8SQwږRuꃦc'7&n2˵>ioןW<"-G3f8zSX옏ΎhyAsIέrg/{j nVHE |F2gf_0莤\LS5G86Y ,r>@Ԥ'r )S[l?M׏)~Af%k{iGn?hO;պ0Rmz|^'o<ϧ'Dy<;oxs$"'x'x''gMSn&{?1D%N~#F 7 -WݪNW_;bH2T c0 -5[ݛ6&Jz$!**7 -#?MWx=n`+XVVJd_%G{.P ^#~?#3r4fY$ -+ -9MRb6*y8G/>,7oz,KqܬgWW.Й'@g˪QQ/|' -F -ja1OH^Wdbיg3e/c[ZқmїjcEx^k9tX(%!툢 ^2 XAK3WqiYMև>/Ve]Җj[õWZ8a af]C{>CAY'DZUq| -WJi'M2>bb˭ ;gE7׏+KƾGkyFCآDcsBoc1B.H8D0_ ]JwԹ#a7-઩X@̱ <_֔}_@Mɤ\rj6p7yXN0vdj~ wڿ7!.W ojD/')-AQcY~ =+8&4q -6:O>K@` -?LqE?${ nbM̻ms<;*o?o??sڳ -.XNۗ\B#Cǥ'W3Ϸ3z\Mryq=Ne*MXD{ "Zbb lDx{UeM3w -И0z/?++n5W.r>ږ,;՟˗<ټD8njbU TTP-.`cQPjK0ən[Rp9+2H6>B M9$u=ܩR6;'nn@eˈz}Q -s{Tl%%uZW)8kNfn^2s"(5DL Z$d%h[+pܬ*Oȳ[} Jl&֒s)[ߏ }HId./ZrYJgMQzkg9Fwu'Ri9qK,;;ĺ~ܵuo\8Gl¢{p W0I]?U=cljzwG4=dǃ-(UMU'/bVZF^ 9:kVP6m"w[C݀󖋗ohJ_YG٪й)Q~$bWl_dgQԕ(X9L)-͐msx :KВe2Y~!s*/\_Z[%lڂm'&&D)T va'+4]WrH[@xLg:򾂯Y% 1@y2D2ݣ{9qr/_ u}[/Bi~KNEM&"gP_ H׿*.oy%f4O9δlfs'?\-z{{UE*ʩ4UP% 6+6W Tm8q 1*V" QyEkyFgc.$auՔ)܁^G%gf^&++k+"C'gJ` Ԓk=$*|[/߯n;w)t+XEI!ڕ*"TvɱUG鳠*qu P{Vܲ ȂZm:`+Ei('d`JxtڐH^\0O#W?Oi -rXtiZ/QT:(Dg $x&UID|uǗK2C5.m3fc?aA>16Y]3E޹xݧX-9z|ހ(X]%l]%(K^:?Bl\L̑|?"=LIA_>?RIK:JGdl*srUpgxu<?O.L9^`zWQt`z֢m -{GDK.q*[*}ҩGD)v$%I3Uk [a OY׫MTY=DB>_CC#ag&+3T -G]eA8Mz )UErk`IP5 {%a6zCpybEL *+AՆ 0ޟʁ.qfVnȷ2.H:xG:pc:0)c[k*\Qc"0›k uwJϷ:&ػ,cXHr6 X"wZ[rLSE$<E -2qp=m*{ @bǒ.MEZ?6jC2٩x#uLO\1"E+j݆*%Qh\Ml_gNSC\UQ:qp^.ZxƜZj5>G}gfXH0&cܿs|WE)w~/.SnY`Xr5?ޖ7ƺݪNz(*{M!SUճݬIv+<$BU-f֠~67vˇ~MTBk۴7V#j+ⴛ~$u#Atߧ p.%sRؽR> eτIwTОp\b( ZةnhWܻGUUʬ@3B;}Tۣ(Rv;;JHb9n2VR{-0ϜV5% -,/5=ł~`0{kӌ U6ba0Zέo3)@c+MkגMbQIvc6MWCZCu8Z.WJZrסg7n@A!=vi5/ZC|C*p8Y8Z=b[@ -F"X1d5qa>ߌ<5)C8 -MPuv#g}ŊƎOW -<'{wprR ؒ|x&>3\>U(f RIæZG 8_e[f#Bi .#ơ+br Dv?x<'=)?^f|'~Oح.f#n<0d6:wFi֬t0z͕7erZdIZiYek2ȧՂЁDAsKب -~.>[mK.\L~:RM-Q]b -(mi%l-8'svq *4xsZ<4 bN1(0pF%7AH[z]1alYAt15p>`&& ͉]d^%tC䌄ۙ{ -cՊV׽+G-gmyoWjt08XAMn;4{zbkѪǖRY Rɏ"*1i>tڨeZl0{疹%'WPCB[uk&T,N6괩f)nS9-8T]qK@c| -W'sV dV _ٯj넭ZΔ.O!dd{ɲ\Ү?"f3;{*d 4=+|$#&ov*EW.p,k!D auu˖gÖمSka&5d\6]\9|12X6[>3WglJU -mo:QQ}h>ZFk<av]_' -Skڃ(j0Q62`6*fj6.`墲R%U|ws7+tb-`"S.ġdIwUcuHf0QK՞ር:|i2dy~1oA[Z 'Ζy3N6K[#v{9o?.FVFgAq)^]k o4^wYjnj"V>leO򨴕r{採o;zōzR}؛הc -PW|Öyιs[ڡQ%}ط.bŖqܿb|b.bbo}묎kF΁*ݒ;^ɡG쳆5 }sz2:cS -s쫔c !5frvU~{Z׺T0-2@@QzqRv2MtMP=^Zl7bt>ltpYb5<&+"rc̷8x{J4W d4x''Ip$IIp='ׯ%y5},;s`gy^(|;>ye[{{RfS:JKs_DA:ɀBRqɘR1 p~ԇa-@Ѻ@ m?Jh."Aͤw'Y\FM[䰺LS9p<3nOt%}d@H=ov;j>Tv I\ru8t4׫^o!k n_Z={znOY=koVo7w7z缞-׿zKW׳?zz;){?ҳ8^A@?ZxDΑ ޢ -v>໧OP#ņ2rUJby/Ey48g>keһd}Pi<A|kMnN8iW :j y4%γ"xqe%Qm(JQv\(_4\ un/>tO9/Ϝ&]4+%]:,3g֘ -O0&)HUQ FkF -ťëØdS+ꑔ*i^OUCpfj5bYt_~(P߈߉zQu!Q7_M<ݿs<W<ݾkx/Opt^9Q[X6Ɇ;H92 Q 1=A~j-z!çEsF# u4_RWKe ˄+ag6´zUzPX\"dH,a#t.&h(.C5]f Ef{e^`ܶh6KUF  {4zh&q n/T.PTR?$+9m%9)/ULE[[!T*jL(|m+\0|S'.M1D j .ͦ3Ju:"zFQ]]R:{lTC^Yh[e= #%=CM0,(E/Lq85ɥ'#(/HyD4pg񥐑 -HPm2uެxgº9aupUL):Lج7P%ΓXnP ˷)P.Ig2E5H>\>k9ņ06eC]ȑICw=8gk-a8J*Cco} Dx(B;t ]nC4YvQ͗\}χ_΄z4X%AadK y+=r^{?~ۙE)PtRP!nqjuu¢]L(Rz_>^w,r9]ޚ  -|QGstO ]AǸ&6%^qn$qVSWVF_Pv^|t:KnZ$w}VR7&+`h {¦gbODBaf!{2']\DhCTM/j=+xW3&9Rj3(p0~5|3 WEuϑx!| `ߩ.>?luP_RRS Z݊(zIWrWQBsиHfMc-U-PoLP-!a"NGBZj k3S{ Ϭ%a%kH$L/R9B~;z9BOS(\(d )d==a#koebIOz@ٲYʄDRB:ġVqϴXo7Wn8kNc~K㈎ҺH)cvP1lcbHwe"f1KFaD!B=s,JRoh^2+53c3]2wtI$*.yڊ<G VQS:%)dCH[ t=%ʌG )jF8`aͦ3F5< ~Ξkx({e5 d "k$L=CA"ۇDXo`(Ja#gtetdDѼde+`{d\{AqM]FhX,m\y$? Wk{ć$YcUL7L̗k=yפZbq -b\nDb?S?|osl`7zPOiD#(GAG=;Ӱ -`9O Rj.f;a`Cr,LҨKC:ur: S|8Ye3Kìje\rʍ(:*j2s=hkS3΍ɧV@lt@abդP]Q9ο0P(ɖ(!"H_^(nK 5AcөDq0Ӱ'UQ|) $XYT)@j^\OP0)qL Gt}_b4J"Ɓ5! LrOppP!74.)%?>KƦKD&㹞Ůq3^ -\KP[ΫoӞ ¯"!ˬ2Д ޚˤ)_ȑM-%ٺznQ2d#YMFHjT^IuH.bź#_$tx2Bf, |#48A,,FOJ.1MS |_0odJrK@PPBE:W8AkS9;.}v`myEߤ(o)xmƯɄ,@DקZuD'HF1(ktzg!>?n>svtzBa0TWEt/zGջ>OFBxt<@e(慸5Jܚr[b~.fmT]iWtz,I~3+(Taxڐ@^r;?ŌTΐJ MA '`%p-g_l 㣑3g3iMC5b|#R61hxdO%fcT C$']_0wcIs!JCH^vlom79% uLK]M[g&a XPe;wEYО Ԧo?E"M@ET=o`b$KpB -LZ|a^Ksr\|HÏ^O5B89I]-1AiǺJOnĞ%L@n!/._(Ϡkmv؊+,ݡ~r|J%!aՕ -<|缢\ĶTLUo8f -|c - -Th0M3>}}}}8ȸ;q:rs }@W8Hāiw^8)co} |^Oh֖(+Q~s}X;MA=8K+-J#8Xo_ /Se:*2>ox[i4[л7~̅4S`hNj-LfF1,i5NW{FZS9"*E~v1z.`=zei^ڱ-:2dZv"P^hoe֖`e0;l9rQ!;< I(ZCIX0 6P5Tz}ǠNQ]ڛ4)M#)w꣗7MiՈ~G{qwzc'k7IHn$>%it9IZ;XX,],]^I$it=I&ki~+/9:[]OE>Nwn'C';\?ag*;ϓ'ܟ܅\͇tL8J &\Ǟi0⸈ ( -VfFE]I{,m+4 -`ڠi&ԉ.Cc!_UzЗ_\3C., -:\3Y臾4k$ya[px,U+0`Խ]7dO0ko_99׏>wi?O4$r(yZSFq|\59`RLJE4:®099Om8%NiWmh;7dQIVb+M[:lTf}-2VP_!HlFiG֌bztJ3Hn!"w"A} F -CQ\5ɥ!= C[O3JaD'1eKОZ ݑ]?>Vnco1W c] - |*,y|?O=sٷt{ߊ}Xoodﰷ|DaE[tEDg=ssS2ɭ#IUx1y)KvG"K НB9D=c3uҋʽhqZ`f~fʇ|MMdECm+2HGlI-N~1/Vg2oe7M" -嘈6`pmD׸seri_6;ABAmĤ)œ(}]ciu=N&ұP.8G!/;%oy5,| \EիNXWڎ$9")$+y0 })e}^;#bl2F繕 Ɔg-H.]8/oZٓo|| -xݞ|7&MӬ~͓o|Baqpp,^hZ b?ʪԚn0ʦOA,&OO2}0nEV -dR.(qaN\V"H-qP~r9(05`v E2`QRp?ԕ_1]+(JnLkx.Xf<L-QG[*Cb &dN⛼8" sP0vl&#40%@Q3u-4SFm~#hEK$?^H8u.ՙӿJ8mºQm[ gkNp-kS']N{)kicߑp/N8v8qqg~q5{׌Snqڷfvfv8퓌3ֳ[kR"q^1^/"zeyǢړqd8u:]tNSv^TBԭbJn u6ÏZt6^`QHA9(|Hb=O'Tޤ\>GXf}G:ּi[±V]mGKŤ&|@.{*fFlcʸ 2Sd Ŧ] -smJˠ5? U (Š>bLwJ;jA/e 5ag7֕28v)|o5z.PZ(DiBn?rR.-^s(90 65۹>EBqFs ԽirMSO0$4\߃M/9R66qo\ζ+#J @g Zc8(U-I2;P3AfcYDiD tb1jjU#K,([E QFZu޾Rw -AN:&]P7ZtpoیUԸ ڗFiZ*h]&MOhts)!x?zEAV-R,{*kֽZ!Io'w%L;WNFɶ TUYBCcr72-}\%&XD{FALʟ(FFIzWڐ27tW+mQ\\g[=YWlR6ąC)8gth#E'4.OrO9pHakdyoNZ*iG kHrϥc<&= -0)o3rH91* ?1 U.Κ1KKR/ & 2ynl79j}FX(E)8l"KYQ&i +\{H;}lWڕT͓H&sE5HU7 i ǛU%&-.Ct6rOArk'&=хRU"l0% -Z9[AUP4m.1CՆD- >PP\C߬:T1/nj2v|aaђ¢/ҕDc]F9gEӡvpWUdQYcfHb.~DX@%ۜ,\^>e2+?b5O6w/Fͤ]yOmBa m5y?u\Q(LUxPQ4mfmZ\Tmco!Hhq,0G.@@bMwG 8ϳ̜HY2JP—+qeC2 -5Y7yeN ICe$p5)8U{l?tf r]{ k3k2h|9#l%B](*V(\x&20GZ%f‹ܹi?>UCy+y-3$N\b,{k2Zϫ;_P~iAנqkSv=su<3dBf[?JH%/DETz tE!A -r IGō _pk/|`pnKQK~^м&PrG@-\Bi·6ֶg:|wc2tqN;$ilo^,4b G&Չ`̵)dT_Us+)8|rɍIO T#Զ {dfTh#E&nLH&ii29-|=(A3xF~XsEzwF&SU@ -u0kIHD yYUc';/8,/Np|ˋlN3DkFТN5Iwq>9A ''Ho\VmV4~dۯ ML^ 6a n3Ȃ/3HB.3H dۋ!Txbo!,k!,0_}U/lbw$:󄾃!>J~Uz+l.3^hnfyJ U५c+ c[3 =gZ/w&% ( Fw5\^ɸ2knxg^JC \~ųݵN~>E*G*ltzbefiB[ RR -&,kžQɲs)=.NJˀ>5nCXO{mʒzF@O#HCۑ)MNΣhjٞ`,X7c2Yݲ|ݕDfz-,Mp=(h0M'GRyn)艕qS/拢ۛӒ Z[؈f9:o~nR>P}z+ ᛤRʢ!ƮZ\TΣ60(ŚlokT@EU7x\qR~g0f79)}f2m8&bv-=Ve7chЫ"'ɾuy A4< ^n莼@Y KDw-,^^-eD^}7ڊ֘bHv_0#Ykΰa:fgdmdX ;3pV#J3"НY|5NLF!U6-WG)'{iRo9WCۂm m3|j%8 Mgd򌥌P5_'?-C'i3r}">ӇӾoK\Fqt^.?zӚR/|^ p -Fj*BPPrӟ7{Q@l Z30޸Qe3y䒪JOP̚f?cĚ5kο͚7Xs5;/~5gzf-Ϭ _pcz|9[rM*}j"/r"ǏQbVOTȩҗ̉f:]M&`zF0"TD634}fN5 ^TqϣA!#2?R \?]+ k2:[)ee2XPcYxzXz9ڳ1hז1900thpTԉQVndjvp -Vng ҧ ޟCjBɟͲ t47A%՚j3el٘ȁ$uhZYe=|?c?j}Y—L$|3?~hѹ2b97,Ü6>zr}qFHU˂ݗ^5Y(*WHT|f&~;,KNvG9zƃRۘ6.0Eye0R)|YE 16$ZSty) .sSΏksmM6TeJX>N33c˸;~-I3J?򮪛hc{JP1 >d#Ka1$M)I97]9ءrc,MMH,fPنz@2Ȥ|URΧ&j$xC)df7ȩBK0Ad$*Z#.ԁ$h[6nzRLLD9òR1Ĩ2 -d)LJS-]yK]yXIϚ1$]^㳦Z27x&*יf5!&L,M惒yU/EYH!XU/,~l[%UɽcH"0HfI,:^Q^fp3ws ^*Dѭ|1_;[Zޣ|KlvҐhTG}Յ Jyڢm\^mdq0gv8#-(#LF$̒Z\'K=dqs=汽1 'oH? 킄#a#aߐ!aېpf$;چ>${Hw_!a "Fe#r!²!VĞ! W[>BO<"ݏ]8{~ XAsݲFQ+gfK5wNM”ĒrZ$G:A.OP"?GtK]*pMAmsx} -fW>YV(E,+\ar`/7r*X2)ZUiHJ JN&/pbw* ޸fXk}L^ѻ-GS;_S"Q⪢UB5`* 8fr'mƛė'Bڢc+/r L 5[-f ZXpWk 2&,6-;JYlXl9 -Ӝ)RŸćx9֑IJk^9/udsيPzMBr,ȯ­UG}tErQTez(!4HvY.;y_Í'nsc`N~D4q(gնƏdj+R!_Ebq \y ʧЈ5x% kw*ER\CLєg`nTJ -?O Num6#i+`~Z]L2Rn՗fZFt&6dlylӒקoP8@8uGX#5;f5tC9J>By(MZӲsdqXqfcȰD\5LD2c{}yjj9kVr0Ce*D4Ԏ^Vuʮ?yGUYApޑtDP>UpAt?DBmkQ߃)z!}xTm,2abm` -2'eHeN$zysR'Ff>ssN7'8H@RA$?1&/I> T6xNpCvssNzIdEG.l;};+ o7_A_[[;ۨc&F&zհK]Y#O28ΉPGyln(Gz('Tm׀0P\jt)ڙsp~+ݕ\4J:'=kC5.Mc|֔&NDHY*H$L!_ FMJRFtHbm bx AWqO*9,,ÉKaf,Ù3KՒ9\w5l;s~&U2#i}XT`9L @ -s){bR@8-MqyB. T~ǥh4*8ܘSW12 "פ40ER')&@v3U9gyWj}HD5( Č L)ŔGh[8K9ޢ݉S`J -z1H͍8m?," }]G1 ,"0L/Ov{}WxSL( -3G [i -d'imJgK+Nbߠ0zKauSX=SX& -+Vv`v`ic0?3X"$<)\R -ަNb~&1҉ -[>2vZhp0y4!rޤhf-Z+% -Ǫ=svޣe+6ze$E#g-јI39qPUF lG69mOu).&Q7B+rҫMl>wF2cN6gBt,?U c H|d{=fZx4'`7ND֡3 |'Vt]!NA+)eh0Z=n8/Go|4pNKD貏aθvs6 fK -SZZѥn{|1?{2މؗFA A&Cnya^G JQ8({h,:dYxQRc<3&_U߯}R/6ʚ.pIcښ͌QԘnV+QrBMU -(P_@օ5,ؠCO>",1!+atP\"GpfEy0 -:%=DhI@K!t_)*$Q:J8rY\Kp#AEZfgg] U4e@JUEg3;.a28CUr \{ʼnDzEV^ޅ%!0[{1U^vҙJLvczN']HF]z+.C[nvvv; Mnv+Za޶_T$+.Y^u>"I^M^[y]ouk{__g 1'uI`ۙc3x!Iv -Whl*L0RyUcgL\s}ay%5I\%sӰlP!B; !N9) 5ԧ{ ~6a -}+Ӈ^q~#Ik4@3 2)g8tyS!}>[;kz1͍8mtk-:I`Iܰv&鄜Ɛr{}WxSw08, t7i=ڬvJ`x±*lOܷ(|f>3#E/G.0~%9j!ɑ 0q=c \J8 |W -לNFVجe&4A:(<²Z)!@Rdp01PpmxQRu48I0^W.5e͌BiDlGNHL~@%>RQ]|jWh YӊػcPDUc#)'9jF)U%LyE K$StBHel{uvv2r"}\uĎ bxVB"RT)1TjXl*L8b9Oᑌ.6;djkV5[vvΪ}S5T/U -jM~)&,eS>zߪk~L-͔O)htLyLV3[M8'uIts~&ԢBp$ّ0JM teG3%r%\8[̛̥k ˠ&x<"DòB#| -AL8C2ȝ*Fv2!&0y/:A? Ha6a -ӇZ^q~#IwT( Č L)ŔGFuS!}sEk9Ͻg`J -z1#Tb-%u{HL#a:I`IUS0WnOJY#o72)EaF(av&Gj]q6o_0oI$ -[ -Vw -;3oRXrIaLa f 63/2M“%m -$gH,H,XjeE:rdT2qPq`o~9(8hK!q6"#dzIɂ>U^#8Jp;VQWnV?@N͠<$H-|塳33, 9RfT0 -J9쪃,dH\(5itn Nb-%ML4y-]Bzc=46^BeX#p jK{99ISݢ(GfƻA -Dgĩlc9ꮻ8#_{8q -zW^sѠJuNzDm7,kKfDU*K!9JHfk*E|%5H_PU^1ʱR=h7{?b=<R`:/(x]a -qX8>0{a(̿Oas. |&NaeCIf̄[twQJۯkۛ(}fجә!_ IsZȎv9nuHY,|a*b2VY=kp~@5#89Bf`W?mϓ/ָAxܞI̿!/׸;]Rw?kM;Rˊ4iY8jZ.rIܗ+y2S";s(kv4(O""{Hs(+߻ʙiHfyʣפ%BGû 0GfO wXԜd@uě$c` $^UQ=Abm~(xHȋ̭+ggֹ[6@bAU(ty) .2A^ý$FN I{~90]S|#L(\ɹB>{14輭R K"*Yj(ٓn_bT2Xߣ`RFjA_'7ZB#!H_]9420J0:Q%s$,Lz*rNTR II{;Ւ~x` Ñ2k.{Mٗ-5vuYâ؟5Tp/ -~ R挻Ise!R썦ac - $/xyCҚ(]K;ima En5Fi4ݛlg}h3zݞɛ)uJ1\+$tbR_X:7Pzm68N,GS9/Г/: 5B ؄ H:ލE:BU:i.-ͧ& /lA"#[^eL(ކKYTDɝ5#ɲ]Zʄt-X,}U_]Q[F=S,İ6y㦻xo1|%mGpRzW^8~E^wE%ʒ|v"S8*R^gWCֱ,&jkS&H#URgY6hr}>J 0' ->WB:ɤN**b=h0Jd.nT: } a-Dom -2%P^NAP+bu =JA?/B&~?>ߏA{=ca/AA Bd~d1+dPG!I1YPO! B!!3m 6كn_ڃq8ۃ=+{c~.AAy\S Ap;A=|ryw=wr;;;hOfqX<f+y?r9'sP7s9('s7sy5)g'gogpDrv ?rug`O:; gTm4M -tbT@gmu%Upʸ? ~N>a^ ihD $Xo‹ԟs.b~.Kv{R$VU pzYiY9’ -(`P tlĔ]ugphL[\j7-ބ8n*;)ܟR;~5hbEdMTrĈkEK!J5, -RESP0"}N|/[IľbLƽlq$ml^5UH%s̖ WEߖLFNb)#We#ْZ6BH$ ޓJ \cV> +_c Mia8a"wE ]8_yfeeFOl׈WnY1yRk8?U|Rh,#x z]F7"2G܆pS$3AR%tचhR o,Hi:B,74 5dmk*Sཬ0y> g){ -HB I]Aap\oX2h-mnCKhO0u+JFc&V ې!} S3 -=v7O@Dp&NG7HPT~Y" ͂jQn+kc,qݹc!9 ->7ѧMRV.^sq( 99SljE}ψ`$8oSUNòzM|0llSy9"frc(zdl.J3&QY7e&GGQɮaB4הT(Bn2u:q|\P\3V9Is۩2α71Tl;nc RgxX1(UOH/@&9XX sNۛ>5PWdW h=w*)&IcCЉ;*ans͓>O7w{Tk+wj;x _ٰќWpM5cT*z@7SGJ˹fcΆx7v$yQGS5],avPfdg״vvv~X/S+'+>+crj[C%[a↦9 =n.0Qe܁In ʶ9$| HV*,_,ZF|mO?̨[,zœ2%*#*jgB"vjDOth 52͓!J+ݽ -W4@fd7$pRpw6I$YHjw7H|$ _h!_ zl\Rr ֌oT#4sUvrg??[U$]D *Vie&VzÕ\F -oyKFMSAw=ȕKЬ-hD*~QlB1=Q|xk[M8, -ՑU $fU쪭A -t&eRO]i􏬛vfTtkwY\Q(_)YԽWe pں.2:pZ,V-juvaMW2WxcTƤ7Iu~|,_@dM@>Cd^cg{Z^?2wt'ۉ( ri…OMeՠQ:s#)ύP<؜ IoLw\B- UNR@r6<5:!sS; B劮l*AL P&W6H؆.դV -,2B S/S^xg,dlUoT'.HNײ݇O}#vj6n<\?FmVIO:ls&`S!WњY4U|u/粲%=3hK2v",3F;ck 6oW*v$>^ʮV~-O-}q窍ttHʢ:у:_5z.vtBϜ{G0&dZ]%mՎm?A5AZLXhI5Q;/P]:isJ$%ww${稬$e~x7eseg3QG~YE5 ,<dRFGI9 -G]R/ט~jfa 5vzBOZt9ձ;r]}Ɛ6,T;4Y81lj=2\6g#Ϩc!*"ٍFlEB)|,nEON'Ju,(MCs9TYYe3q{mwP3Fk9JQi)Zpj<9MԆ,5Ǧ׷z>c+XA"s.LzImӉG]IyGO* %NQ3`ɩ=fdIZ7k\*sDAǤ-7-M%8(dh!"p!G[%RuQbi&4țo^¬0+n@߄OIJ0% GmBFY ;;Q:K8T^|5EZB-4][8-[IzȢZ^CUT SVW*Sz9ud%LA'ՒdǍswM q8#mafRU|,#GyfW-6}{qtG3ġTA2,m<, xN0~%:PW5U7t=izAgF`ij[r'y4IWA˱m֜Utclg O+TNRYޅ}6nQoW؆.=p^";ҳ?QnGTKYGV??ս6%H~"H.m UjqP h)u%V흪GM"1e%.ZUF$rUPi J R7Rg9_%*|(NcVP$ d /!htA.Y|4 &2Vkr<ГHE ['Uù*8:}ԫ>Ƀa|>y,^㈇/b[:) #;r 6܁qQmZ IL$7kGԙK]YXbWTϜ|v'&ϋƆ&\MSFS;f&&(iYq,+k@}{+C.g`٣*gU9E$sU'$Ye} -iV&GϚT=2ڟÕ1!{KjAug -Y w-7p}]謲@R@A4"ma/nˀMג$8|);T$'BIV)BqGj?1Uא|67.oFRbUr5(mnM6vi"v3ؑ?xWϑʗ}~4mc NM.CM^l)KW. G5A*NJu׺pqHbjjKkN;i =5hKuA14FhufF*bLb$oE2"[L) -[̐Ua4|>#%x*e4VqW*]Xo ^fI Eci -<υi&(WRÛ|jsH9k}q[Q4֚ L*\EOQD%7b,ٝ y&5^)޷=_]]󦧝FpH"cPP3JA kNeߝH6 Ol.'c!p AWe* -Sꃋ =4'f%Q<q.%^!.#O+]TS[B֏ qoj dV֠y E9u15}` -]HIl[lc&K -cIt͠U;sxԥrw z㺌.Kp9 X‹rao"ST2 3+7ZQ0ST_&P$.̤5 -cJ#U@]1D$ZvxtMHmRgmc/Ϋͻ.n닼$\]/JY54H -ZEHC],w.3wAo -0fjD0 /I6D,ŦWiK -eK)7Mr+Pc5o1Bg4*u=:;?F彫~n'ߣZAއA"LOB4?"\jZqRE6dH9A(!=ƢZIʓBP+1]yKJ ȣVMjjwCcIu(g^A *$&Tj5wHQ,KgU0f5U1f9="PQ5%J##enrʏڱ$g&@N6b~!JIҏ% Wc8_u5vj`h`KeY-X f Xǂ=O[0 ` FxǃU2|sʔdzG>⥮92MWBP5kODA)BҐZRPC9-H{f6 #j?=7]=~EWCpYWw{t]uuoGW?tuuGW??Y\]T>CSeޅs̏x+f$d)!|9}!ZV"d԰.[ڪ|@Qs0##tD \Ʈȕ - 4*4}1 -.N zrmg+&MHkr$1 zdRcR $ | LS;U{au\K -?&8+Aiz-j]PNbHI?ɥ/Yx W^&د$7vS $d&KZj=ϋG8.'? Wi\+ /0bF^箑J7_QF-qhsg.k]XOi޿\ؗ raH͚}/+.{e|/eW&SMX̖8)A(/C]F-n"/I5zC˩V+ XWw -&EںxqޅQWu# ͈QLI - Pz{̘'crWíޗKVWQ!f.y}+mEY8i50ؘjl}eBD=l %O<''.,,pP̺!'αŷlRv^xt+\!tXe6mun -[ҩ -g$%rel/(z W:9ץmU*$V_e)^ MdӔ^wJF%pRcxkB.X QWsYfhkT5w -|lѧB.0(qJ3)5.l]O=WΡA Hs|ҷ_K| `f: \el0rBpAk;DDY:xnv`YpUU7UuPݶ"쵞!f/qo3O'5C" 8^K7+^c ʌȺo2 ;;xj}@Q*yǨpEmv[CYֶP Vf_] IYԬCsN>4 8ަR}/3rTeA[+P(2s)8,i).[j|bBvкE%;B#6F%I[@V?"R$7ln$n!EElRR[8Y>asR;@ohN!KyPK 4"n}ЗuQO{PbV\mg,kҧcNj :qbkerC \1h̅(w9e~FunZ>?<u9ȋ~FGVO&#*TBc5cZFuXS( n q:5fqbĺ& *lkh,YG]RG2PW!2T[FmPCDХzi@T 35&W\8 ~NZ.DKMFmvJbajpB6X Ąbk'T41DO.dOx+/"y9*x90cV^1@l} j8=I(8FlR`?xk 3P' &,y\֏]]%=\C֢psQ:PJ#7iD9  6IŁk{|!؊7WK嘔m Ar̩.Vw?C$3;.Eh܋Jƌ+UQW@.HM#hP<׾6:羒)SbPf#=ePyZ QMB/S7BsV: gupe -IJ}'D!i}T -x3u,h^a׾NaK m}lu^4#x_6Ȑ],;3-u܂OSk7xƪ&kw\sqӴzEL^v}2Ƕ8wW.v -¦ݶj=LĽθWNX?3 JUd;25i/I@j|QțZ?DByXclVh~1uޢ;~CPRHۘsN>4-PsG > 4KSS DƵױ9Alɱfd,Y_.cf,Q &lP{+_HVdJT@`;TuJДH +Y;:GFґmv^FcI4#|ܴu;[6kyrF;t[?dR^ 8o?`-q2x<2x&7 2l^ -nH)ۿqz>w{o;ox'a(K ޒ:kaCx;?&)3&lSiekz6MXeRkNZ`&OS?g0%)I}&4gқ7`5hs[9 ,12u\1zyLZCe,L%p0䠣JaPZxB*Pms-܉R@B&S>ԧ*` -bDQurzĺB6CTW,7:{Ժ.>vH|ILq:Pnu|TKjԮRvPT=;u<!ycTXIBxVT'?w2ɬ\T@"T!v>aڣ`=?N-!}}拾YgY{F^o=ϼOg^ks~dLJƽ݌}ʸn\ԶǾx/Ejlu?>iyX`CoH6Q@1" …%ưf\M^Ky;SϹeOf{u -v"["8^݉vo|B}ܖ$/R[Wi껯l|N}I G/s Lh#ԀYyj$8U辮ǔ @#eX.H4xHD)UWW>oObrWõaNhK)ہ̥K/=-#i  UǾ/{({(XTUa) 4n57_|QO|O 1޸O&9[F݅Bs>ʉC-u`f$SKŮTxq(!ƣ+Iˆ^O<j֝LtEDgIV-M*Kκ' |f"n=T ?"솸;a s'5C)bt` nྛQdx^)uU2y5*-=?}VaH@ 5Fu"}5ة/ϣ֤!DEc-b![% l% 67 :u@ijxZ?ΒT۬S G~E0/C;jA|GCE.dG{0Ӌ?*E Wsкk's]1z(--O˜,y1T1o"VmVB3h5>#S&L%B6&(g.ٖ'@8|'?7z vM` ߡ liH!SȆZ{ZzJM?"DB}9 -G[Y -F -VhKr˂47LcqH򕠨sqZ ȑuKߤU 7L/Q"ŀo=QtsqRizӒp9LFAg{L>NLkdm=)lu鋻3(l{)gtD^~5:QPțN*䮨W*3'0x, n/7^Mnsl n2MS-fh;[:_B v:<+98`{P$J L?h!dUu=4muǂUu^3 -B] },:S:ՠcpRԉ]q0Y ݑfQaP|s&k$LuD-S45u~+&.aS#QGOOcG1dD/o+FBgɨbJ١;Wd.3Rx4?Hg˿25S ǔN^ֺU -}U"s`J~zXbiS^#kV=33DM}>chrۡIn̷¬936&z}k) %GRa_rpCYNijɍ+/C%J:1$bTU{Ϟ~bKY,UX"4JY L~s3b - rV [b^-wd6)]W#foΐ;UWa*q[}}[PmT'ii|ݫx6"߇.*5;+H/ᖝګ{j^kRUB~e*,֔wХ@Z,4oxV}acj΢hzK)]7eqfcAWVYm%壧"ɱO^k<1b<5'b5.FA -8{'kp8AX%l Vi8#0H՞t1(-t:I+~AV -lJe*߼hJ-MҔl2t￑F$x,=BgYA7 -`ԪWՓ1,j-<eUvPFFOJ2NbUz4uf*+ pi -p-f29ȧ%Ԥ O#Nc !d~D,쩸]aJ/OZ邾,UpTeth.1HQ. \O'5循š&&tȥ}.qw=^[k#6:+Y ":>c#n{6atm%L<؞ v!kSF8L+wa6dE濢6SX\kٽly'4o+tv=e]=pH^8luʺ RbS@W>Rwd‘O*eU=m>Co^V䁱S˷Fu_&h6Z2 1'=Ĭ=B \Z@50Q|'0 ,vЦCdF FYɣ'|]`u`UN_{P;_`@2+C=h¸cq :o*.,SXU5xA+DgL\rͦdF8]ߔJ8ڛr^č1V5h,^xJ/!4& 87[(Z%.8f#o`{lx*Mt@ 8گJam[BavBkAqǮ5~2ibL8!8 Z9&bsb=S3F '.j7I1O:UzAI%Nsr&4 SՒqW:Ug@Oը%L, CtRS Qc]g\+M_SʏA{Ju)LT -O^y.Joآg[{7~<f; dRެo 'gYEEn%3%Ջ1XPm)\3qmNAtD -S2ѿj| ߿m } OJ8Kkx 9"^ -AN.CDz 35ޯ|YI_ 1!v[*Jl⃵a|ŦR?5|7=>)~Kb=UFZ筷#o[!`;lV^y˞ o^ʺch/YOl\} 1 QF\ {4Prg{l Vgg2xkՂ -I/J$x ִW6yNEthi"nquBN3Hp..w^_ G_6KuAviگdYKql&&tȥ}_9zIֆ>Ƶ!Z֠/F]g%ktEt|20w;5C<̳|]ki*:jHŚA q]rIɊuΖlY1vP~-p(z:zc07vNme]mNeEe;+_uG>Z#o1ڟث{ۖ߼Be}QC /І@@Ƹ!yD5W$Kȣ&&`n~d l5Dz5Q f~ZN+! 6+iMپu̽G 5 $s;s,F/;vjNb?UecJ*qą*lʛܭLfaoM#)+EcUx\3wqtBPq!@s H,Fnu|2:o[ -j{1 yK\g[Ti -!?g~T k -+ hLXk R<;v,([I˨f KdeE^izT~ SRKfRx%>GP[lWC0&*)/cc2ڳL]B!ۚ`%%YRvW%i Xy{%H5 m -hogZ;tpwdD]u#G -x[h-J$ˎu(j:Omjva^8-~)4pnGdd861 -7YgZ> m)4; C/7*FBTl[YNJ^GE; J& BV\V@ m\Z=C[bW .x _.S(ظyuuRI'%@ enrl<\ K#~LyK܂S|H̾T&-E^{jFd -4$y?g+kx5d+3&OU:9Pvk){QO%G{n/]zx`pmU;ZH$2獋TY>ay=M^.rC7Adq=4hT.sԠ="#h*`:z~)->oIюL%RPKԤ\h{CKAJ;JFRiu9Q#c- B c\(sM {W1{16+%C͒\Zv3TWg~bNd6G^ݎAisMx=pTUCWw+'ퟭwg:O2ĴOHOME5p ^GԓMd1CJzRAm|X:/\}hIdNj;⍇O6xtzkDF(᫱Qt*#KM1h:3kJ1~XHp[0뺬ELـ}(DfH`[{ %c UN=&zP*3/)GB~~,)]OAfmɨ,6Aѵ%RϤ$VR"KlQ2Q-je"|l&mBϝv`IL*{l9sYjv:'>%BR :.iH:QY2ڑ]َT8*@$KĩA$#C-B|bZvX+(N&o<q#!ۏɼ''2dr,m.PӀaAe*kwbp<$_*Pd,!폊oXO|LCͷCͯSۡ ّ'_/?晰h -y!a Dη[<^|,]b/bkn1o1_1_1??!|9ļbbN1~TSͯߧw?NWWjo)6\^8Zt28Q+ԌhPWdvn:Zx(xB7 BfJ}ӸJWqϊW1Hݵ:d @]n+%*JYƪL3v֨6ϫl%I G\@MAB"n4prOh*^/TkAIöM=W<DZr5xBЕ@W-*m;:{f'R"&ʢR0,t҂$qnMT}$7 ̔b! /Yb*S#YwTu2ZVeýnZ x}2$6yGqMU "(PHIK/-ԯw3g]MҪ.-6 -4hԷ.j'2y<vPk T8P(c'NG4ZmD&UsRMŽ=d/JrFzkJd -)"$FSbM:]z[##I޿Æ0Ʋ$Q&Ԑ0nY+L0N*ٻp>] >b -2pF M%JZmɑ//K*s*{P -Q9PĎUKf1jQ*N+^[gexi}Gc /k?:̿:u(uhu0?::uu(u?mڏXuSޡww?;O!w;;wȧw8;wZP_BK| RzL -R|[G) ԰p)y}/mWI%z\.ݏ O/}THvQB7UUコR0Gd>y-[1_DD&,q 'Lo.=#C+X;g iH+˯"/p-lZ::SWUsg$#Po( opkŕlOژ֐)xSj&EV?:Ƌt*lfW ET&{ -g/)FwSV@"rB9YkE͛i'z)#(Rm}n `@6wUKE}JeH!Vdd] g5~_$Uxuo\ard-6|{0A=MECICxA$1~gTPqrjʠDIfJӒ$r#$_PؓT]e1-J;2z/ ,1X戻1F`РnL1 _&?Ep]|E$.g ;wՒ>i\WޣTӅe^ɩzUe*_@{dz+ung^Q3F5]h -+lĕ1K5QY*,6 G-GSV)v˞;kXqf,I :_ezMH&1^ ]@:\cEg6VUZG ;@FV$V%X 'xl2`Y3GL%0/O"{%^TM # ݮG:=Y'𿞰 1C5JT#b(4YY=(&X{QI\ǺzG>5f⃌iG<~)@}&1g"(KToe倡9q꒕4 -U3 -%=#+2BN+(:3;P\k,lо,j V 2K(QRQ/pr!ApGhCmҧmN2\;IJ"$Xƪ-guC/l2X AQx +K -#1Ke#:' e;z{Q 121^x+K)Z "e췐'+vRh>Pv.PTw7PRLϸ=]D8s0J@Pnz#GI&g,bRotJHYyI!i92G-kRϩUS"$3j@OOt>4վh[9"5g֌Ch;{zD -2B:SDu9eߗ{2~_gΞ's*3#@5*_C43MuHɢ8/^~r#Atߧ |s:RotEӟ9#"Z' }0776\-`bY퍘e)ҝL$\,&e&9/z΃?.2bmu/@zd.Yk@\p)kM_47sX -~1 Ƭs%eet%/ 8p"FDrUȞsѿt˭Y?Ǭ);O km57F -Rެ;[6$= zN/V; (锘7k/x-i JQYK*g]&p۬L34( ؚiJDhm$À+uDc-zUT] Үq?7Պ߬x%S7Od _Zz|*Ŭ3avckM)e}_TM%=ygӭ6p(|~N;&BY9{!C`1rNDgDF4!N꼿; ->@"3V`w?pB vtR,Zfv26nA7{yXt۬S-;C!y>Dt(dyRLE1[!|*-r3n@YͪeL7WHe*QHV AtIҿDrȇiP'iJ8qSMh^FQ)&V3g*Ԝeٖ?7ƶ1kE* *YH (-`nwX1oR:CV8" ϗOX~Ի -A\u Ѱ[#ޖ-Kv؈ŽZۂD"Fk&J*Y(cuڑ>ftg^e~z s1J${jDĚx~]&:|^dUX3z"I<8 fJmz;,]e'@3N ˠT,wCK 2wgk.(4$MJgfgK`.KLԨ;vTCf(-==NEOnhu0 *Ppsh8Wc'pW[%eY@a /3 @>)G؄jL~H=5r˃~쵯}g{orz~J IKi[mo3ݟ`ӳs=b  5P]^cۛoAIEV5.8Y.=J}%5Z=_: k:F728!QxTep~݁Ru%>15cѼ[FPY%a4Q)6{^+Մ+k ^kǮC(Ipg@R ڔ foiy{N'Q6oh-BzJ9NIķC["`]Rl;{49ni&I2FP%>uZqZrd פ! ֻY7qI*!o˕W(URNW`kM|渒9*'έakF/sU϶HCm |Zhqتv,"Y 6@TÆw%u>BضҎAX=8L:Vt)n^pIMX"AIyyF -)ԧļ}h[۾Db\iE|+$nwXM]֛kې]Ns*%RmI4(_l4]~o.S_f)kaet%/̊^5CCQW(# -49_R.'~H#5vB}oGCm_Yy6"ܫ{&Z CJl }S($򏄡oU`7hZ!;a?vum0JIfԔ%tt- UKcnnӔjf -h/Q]L^p'Hnv&Jh w[/ puI -PWF̼~^H?O:B7BGԘJr*7 7'( ?:OіAK+@b)IVSRu9'l; -;>_fW;[6DYd}QJh"uj8im]j+z$bDݯz#ތbtQNmUDI9&̪mH1*PYx| ]J t͟kEEXl^Yp^#q.x@|'1CFUlI!$/nS Xyk >Q9d5cr\T;(DF*vƧnRdP^8omNWCkTPYȫ/[ Z BR6+q$}aߙ<we/!NIHl2uJ혂Ba_Ok΃\8G)RT33UW%;̧Z@ - q5 5lAdɌv7<{QY)^C&riy?gpco?Շ0 ӘH͒2_ q{ˇտ|Dlh:C":t+Kr4N7M A9XcJ9BfZ1U$6Ϡ?~&ʳ̷Y t%>jej񋙉/c,N/k{-y14KE'E0eDCf*IfUI$1IK4M0yșYߥ o='5v&h@Adn$:2,g{@ 3#Bo 7x;Mt\oEV~&Shk"$muaHee월AU33cLZG%*+C%FX(>x%k_| 3#_{r)Q-P̰)$ WB E٣#a)?BNU9`Mx997C~S]ՆJFRoMj7ti!re&c=5~(.lUw6fas)B$L. q7qxLx6[3Q,*3Mvq,4d,=.10H#;H?A߁* \%כ|.h-QqmvKc$Y)m ט ˙KS3({@ -rC7(J_c1ݒ3}?Qߧ8[lT@(Ʀ'3FE'&#fSY fk9q|,]6]]Z;lg(!RCT(8އ#8"*8}޼:$q31U<#vO^*>/*̛Eܪm}jgf;%43/g⃿ V>c P=l4&/y\cWz,yFFݖy|iJɺN[ |xhݯ;g&q:8U:[i2@vB=_fs ,xuPn~[xB'iZT 3iӭƕ#TkĬ@Иk]Ch ޵oMpnVꭘh(/G췢, .)-U'2P" SmNF`1Ӯ6GAOZEn5WNb3Nbb4R/=q+uI9]ylp4VC!z,WY:)tӌ8˪X)h -/"UTNzU FmT;U#bs5UuNQdYAMɗzi ly[l}Pbr,j`` ስ'e-Q'~WU|4JIM_ݛ)N-~13=׿fZe^zetm%/?؞fG$S(D%"LSIJEK1J@*>fS׬1-1+7" !VȐPrθ`jb)֮,Nk޹x1o-nW%]̲_͏uQU%*_GzsX]Uz`-K 6Y;,BiMQ^\Y^55rz?c WdmR,ZfMs!JzrlpUz. 8,~Exfn@'/=*˂0.vM Sq_bJnkSd:s*mwn%x7uK¸)$+EKi2úP)̕7꽦PПqJ=Y]iRL 5_WMs/B a[EJ=o5 Y7J$7~b})_e쵔Eᝅ4i# _KMq "9󎨑|E[RR*3}=v\YZE ESvClAP\_q%dLG+MXazުiNB*yшŕҌm*\_:g 6k2@4#S(Liű 8q9IޑZmu*++m g*ۆAŸ͖R*Wج9] 4Z"Lu߿y bO~_&;7ݵ,_(t~ I>gڕg559 A(\RuD>LB\ܗNu<֎#sNauhUַJ{s -pMaӏ+jvI}gPKQnJ.IH -9`ɶyL;u#5ѵhJw(y*D]!\ h."Kj5 @^1S$=!~06ȸ^BRFXT'%N2"5ߊ[Q}+oE^61fZ>Ns)hcudtSlZB]S8Uru]{ꂇ[B s—uՁ0`o+ - -[ nhZ|M֖u#Nm 9$r "v9KpL,9KC:4c6qEKxIbgV/(C/ L|̺5sC IȻMeL2˵V)=uKBa*5ymg.Tc D -J`¨YeuIG;f.֔0) -" BƞhS7 i(hKfB,2g,,B,,`{LI Rڔ6"i#S7QR@%5F-l/>x6U"S =q3,PKBgXXH,FnpVoL4J78ڐȓk`C!kɸۗ%qt,c・6a &$!utQQ cG{hL):oQ m[}}+Q3.JQ+3n?wή F e -BDt*c^3#:yjEM9$Jfn\2(4lܴ]h*R̝Wz@G"2FbmL&zLxBws.p˕ "_~*ҍx% /1&?/hqȼBB %g8җi:EV oR'vI]bȌmrf(49ɘ mSSE_z=rizE\E[zL f^X>,Uz6C܉NU$bW":@"o= VwHy2Q֯8eN6Q -Eo%bP`IR@և,#ʉXbjw Ÿ9UJѴ~(*7[ƋS~O?Z*?qAb;gRM )Y4h✸j<ё9ֆXXkrSXQ1*|a i!8 C!j6ù":c4+&4i,ct=8fgu2DxJRY1o]UC+kSJ|% ֮+#t L^2*cĨB)5d\9HEw.*PY3X^3S(Sw`ׄ=FŸޑkt1:f1svT^UJ9@ϿJV_eR:KEcFo11辶>k4{/'SO{k/_@ZV#ԹCN5e-iCW`K0"fŬ<3F/2KR|PE5CmH|ɛܳGȥ6U"`EԲ1K 8aUȂ?0\Ħ׹E)u,mωBg2-p?9Ɯuk3Ч%B6';"!07>%P#U(A3_X4osukCVĻ1m"sƘ\rOw:H@Rt'Fq76^!J^mw&+ ltMo/ -jQH_ e\$5H<3#g -H+"&S/ 7nrgRCtNOsd(ںLjq0&NryM31313k&اk$]|H$x*Tuuz&u3CԬ jUnv駆ڃ:amGúFI+$q9  -<"Ó@ -F^C_\B Tݚ.w1L<C{Ѭbc{a?yze`]ҏiA+\x~s DMM)NUjQiiMUHSrQ?@ti2tnlGs 4i+؅%I{ ~l8s~l9s8]==OtEkmI73 *8R}rpSwxjhC@XVꌱ ֯tt';",\q?(}ɧ?eeo3ꨨENeFs,J?-4),ŀFd -vWײC]jl+*z -\9g.п̊׌ǟ(qԻ5{kUH݅d3>(U]^T=>JcwE-%2D߬ 9BD5E,aNQIhva_|rd) m+TRcVVԳ=xv[nQZ> x@Կmj.Y(ޟKL$]J,a*o#fsWMOfgRGm#*mYt/)~iql V]AYg%@┏_[R^[u8Z#<^K^B?p~ l4OG~u(MH'uёjDK#BNSZ~ow!6W6G*2SEC#KLˉ8Sj1bP픈؄V}R}mehQ:t3-k 0e~HrU Q&svHtSR֢s.'( & 妎B^ Wt눆ZrZ w85q mw_׌@M3=7ê7 kFx_IfBgPF$P•7R_TW%jɱ{N@r~σX z=@,yn˟DDg:t,s2C3ۼ|~0fP#P!#sїYo徽n-~Bvz m@ؤRS]OI bPIV1\xOɴ/>￳?ݵ_3yLA8(V຾>/I}S AͺZRڡ`P8 ض)~g łqvBV"-Ȃ4FDt9~ YSᧀ0P~.06KQ=X e* <Ҧ>d<˘&SP9&؎M|NRii8T'#MVa2ƻ isߣ!qz 3ň\Ve}ss^ -8(Q̌WdRRq3LY;vJ0xdƆ/g<ڞK^|"I&cf[g -)4\-ܐ]IxV;7B7V?z ԃ}<ԗ>y>ߜsΕx~S`؍9A1Dd*>8>9N IS4zyQcTk&ߓ_h=z>g:OYn9%;zy"v$^EWZN@s܂ - --aM__{zzR.ۓ3I * <?[|08ɨEquPE]#As[)C$ZM;JL&׍'gfT^cT53cȂ+nw"0ƆVcQxGBDOF+Aj'-Yڪj-Q Y3DXka7Z; BP&o)cj>ƳV -h*DuC? R@ b&As;ɒGD!%TOgH+y -U Y|r6A/t/I -*u,ƢkVp_2Ty }XL/ !k[86 -!'}?6-x,0.H3i -rތV JndV6hÒ7M ooC)Z{/rѪMw*DF*D*:愵T? eNQJdlR=Fl$rUt15'*4s{)2$ͽA)j@,FxXEJ4ëgu/$-egLۿ;N?[ۋ@o--nmdM5x(|UX!\%eŝ٭Ak+zAd-vbҦކy$d/ 0/]sɋ)gC \QQ@=d49]{:1DŒmŸk5^9/; +5w͙6QS RrElD tA(Ş}(#,B#H-o3 ¥ϛ5j@@Kr5FS _dj!A:C -M:K ,^TE'ٽk<5TPtMA& #i67ERIzaH]8ǠBqF=,Ut8n:e ԅaQ2q ERaϑe$O[|@&שms&:ddGQf;؂pk)46Z.tvZ dL!MQѡuUIka|@+uow4!E\ &\Ƃ'1.s'&CPs6<#j,Nat&+U4jT*hT4*CՐ`s _9奃[?*(b!vh1(?9/sHr܀YPJ>r3_i>N3>6,/zGuX9ɝlS> dQ+l؃TVpΨa9Zc_;Eu`ZU,;=H {Q.׶3) ,ik{Sa8$~63{ehXl`YH0 УRG)>B>)#E70*7oky5QO ۣZ!T1kP"q=ͳ* -SASpCHVeСB ͊HH^q{ȩ$M.DmgmGjur)ܼ 8@&䃰8ܸ{KrU@XIv42J0783\ie韼Ǿ=)1]Ud`ܨЗ8 ݛ 0 ?dWIq91,dpe3t .5H(';S<`' wf;t\8Tqqv-G٣~}Q8MpEcIt%(*kg^jVfj¬dͮqP;N Pv ś=ZAmP`C|i:'DO2Ϥ/H/hEV M-![Ԛ:s}]nH/ݛ4 J~JgSL3_SsGi$f.{^ VڪRgXK5f1ekЄ +uL6 Iږ^ߎ4X:jIU y⍶xi B/v%&̫a~:"U{ ] 30 |3n,pɌ MQS J,j+!idc%/ral<2A|7e/^e4 8{8)nIx) -r^B@(G>sGQh@Tܷ9. ƆV0fĝ04Dd;.i\>AUHr8 gDnng$Sǖɭ$:, GZN֫my9?1s5KQ^a@hk}ɿ`3Hചm}e ٪6Up xZW)]T]O6i'JŦE<^r&!1jEoڦ=۬5X]eBHt)LM]=Ir mp9e"*fqoN š7bLJ:;\H{=/ĹuXڷX ؀mC,h1 ]j?̴xB`$ `g6ZAe%RDYGvEɍ_`"K13w%0${35XM7b]_2>(<򕵩DzqE,iPx)1zIxK:NJlgE:'E?S7Dy7qbb0E%5ѱSP5:#Ȳ泮9+LIj 0Q3ImׅoJ]g$k-t4PVgY> \ a5 ]NJSMs6~E( Kv%'sHmWX<+Wo{WΏu@SW6X zRv)9gM"zPy|n+_.I8J^~,vP",M`B8d=8oZ-o~?@;혨a"1ߚSl}c6Om<`/sC@=2 -;oRo+ѵۣ2%6gy| 8PB!4A7|E @Sb26:Ccq@SGZ*.qhX⹵Mo6JV+odO& imu {#qfEo)㊟^z̊/m"qQG N i z5R^6k?76]@ 0~kUhpˡlq 'f`MŗZ*TQ0DG-(R95#<֓ >_ʹc&һK_.|и{Y P2t -`aIAhTH*K8p͝p\ W;%Q=cDƌ!`N 24 j{LgSsgsD&"h%_И+Y6bCU׵>V*2PZi4[ӧ{g+ɔ0.‡UoÔ-u{&Qevk(B[bTHѵӊ5T9hQiP/v4?h-$:>E=~n^ oW9Hۏ;IRWNpՀYCJdf{ L ikNΘ@*:0E ;66FM8ufT&89,ZH|\E&ۢjcP`=DI=0bhعjReJ'eu;PȧlLJkd@셓PGY(,gP5pn@n]d`5^SdN] n^ ۘjyA4&y⌊|MFgGiw ,fz $ʨf*Dw -I#ISeմ.4k -~8͢0L5\hEŮHt4X *+rY2AkڀI_褄ǭ)ah W)0.hյ#.GO)[qB53I=}7zI0`"֙=b4h%%t5]4OH:j + o nш,z}ENVn'V>@W:)]$ߊEdL]* -m6)X -Oh^E\"pHihL,3ʚV0+#dPN&k #"xUh"]u|B6ruZɍ, -p9P3+Ica;1/-2T0{X=ˎJӇ95Ok 97tS0zVIlBOl;};Wwn~g`e`_F ~W<`zu`k<ÿP|zߋ5/~(/NB]mw;W;_%8%* -endstream endobj 12 0 obj <>stream -8;XuY]l&HV&GB&l"Dh\m8>j1T>H(Mr7X5)*=Qn1Fb=3g3,ailZ2EI('$L>B#c[T>T -Thud%d.tJ$I/\M;2S]cTP,7>&$plCKf"^dcT$'>)@?dnHbe@hBO:[#TL_2BkIO@H, -"9QeUm-B(*6HLp[6VDu*fW7MF6R$[Ds$c/uJkj=-^fpb17#=)"ThMO]9;."GT+\)\ -EKK4e^^.t"d2;W#**:KeBWDW;,J`L#;&HFoiPPs!4E1>Td@t^8(jI`iLZRc%S?N"7 -`#gWI9R0H;8lrI45MXp+or[L6YV(_<33HEqO.FRO2'ilXqDu[5?*JV.nEAnp`8sa7 -_8Y.N2j!J/!42[nk5~> -endstream endobj 13 0 obj [/Indexed/DeviceRGB 255 14 0 R] endobj 14 0 obj <>stream -8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 -b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` -E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn -6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( -l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> -endstream endobj 5 0 obj <> endobj 15 0 obj [/View/Design] endobj 16 0 obj <>>> endobj 10 0 obj <> endobj 11 0 obj <> endobj 9 0 obj <> endobj 17 0 obj <> endobj 18 0 obj <>stream -%!PS-Adobe-3.0 -%%Creator: Adobe Illustrator(R) 16.0 -%%AI8_CreatorVersion: 16.0.0 -%%For: (DESKTOP-LIN) () -%%Title: (ESP32-Pinout_V1.2_20221205.ai) -%%CreationDate: 12/5/2022 9:13 AM -%%Canvassize: 16383 -%%BoundingBox: 11 389 534 580 -%%HiResBoundingBox: 11.6958 389.7705 533.1543 579.8291 -%%DocumentProcessColors: Cyan Magenta Yellow Black -%AI5_FileFormat 12.0 -%AI12_BuildNumber: 682 -%AI3_ColorUsage: Color -%AI7_ImageSettings: 0 -%%CMYKProcessColor: 1 1 1 1 ([套版色]) -%AI3_Cropmarks: 0 376 546 595.2759 -%AI3_TemplateBox: 420.5 297.5 420.5 297.5 -%AI3_TileBox: -147.8701 188.0381 693.9902 783.0576 -%AI3_DocumentPreview: None -%AI5_ArtSize: 14400 14400 -%AI5_RulerUnits: 1 -%AI9_ColorModel: 2 -%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 -%AI5_TargetResolution: 800 -%AI5_NumLayers: 1 -%AI9_OpenToView: -7.6665 621 3 1822 914 18 1 0 9 117 0 0 0 0 1 0 1 1 0 1 -%AI5_OpenViewLayers: 7 -%%PageOrigin:73 85 -%AI7_GridSettings: 2.83465 1 2.83465 1 1 0 0.8 0.8 0.8 0.9 0.9 0.9 -%AI9_Flatten: 1 -%AI12_CMSettings: 00.MS -%%EndComments - -endstream endobj 19 0 obj <>stream -%%BoundingBox: 11 389 534 580 -%%HiResBoundingBox: 11.6958 389.7705 533.1543 579.8291 -%AI7_Thumbnail: 128 48 8 -%%BeginData: 8516 Hex Bytes -%0000330000660000990000CC0033000033330033660033990033CC0033FF -%0066000066330066660066990066CC0066FF009900009933009966009999 -%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 -%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 -%3333663333993333CC3333FF3366003366333366663366993366CC3366FF -%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 -%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 -%6600666600996600CC6600FF6633006633336633666633996633CC6633FF -%6666006666336666666666996666CC6666FF669900669933669966669999 -%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 -%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF -%9933009933339933669933999933CC9933FF996600996633996666996699 -%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 -%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF -%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 -%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 -%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF -%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC -%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 -%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 -%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 -%000011111111220000002200000022222222440000004400000044444444 -%550000005500000055555555770000007700000077777777880000008800 -%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB -%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF -%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF -%524C457D527D527D527D27A8527D7D52527D7D5252FF52FD047D277D7DA8 -%7DA8A8527D7D5252A852527D7D277D5252A8A852FF52A9527D7DA8277DFD -%05A8FFA17DFD3FFF52A8525252767D52A85227527D7D527D527DFF527DA8 -%527D27A8527D7DA8A827277D515252A8FD04527D7D27FF52FF7D277D52F8 -%A87D527676525227527D5252FD3FFFA8FFA8A87D7DA852FD04A87DFD04A8 -%7DFF7D7D847D7DFFFF7DA852A8FF7D847DA8A8A852FF7DA87DA884A8A8A9 -%FD057DA8A8A8FFFF7DA87D767D7D7DA8FD69FFA8FDFCFFFDA6FFCAFFA8FF -%A8FFA8FFA8FFA8FD74FF27F8F827F827F8F8F827F8F827FD27FFCACACFCA -%CACFFD46FF52F8FD0527F8272727F827FD27FF8CBCC3C28CCAFD05527D27 -%76525252A8FD3AFF2705F82727270527F827F80026FD27FF7676A17676A8 -%FFA8FFA8FFCFFFA8FFFFFFCAFD3AFF4BF827F827F820F8F82727F827FD27 -%FF05527D7727A1527652A8FD36FFC3C2A0C9A0C2A8FF7D51525127FD0AF8 -%20204B52527DFFA87D52A17D7D7DFD1BFF847EA88484FD05A8CFA8FFA8FF -%A8FFA8FFA8FD2CFFC28CBCC2B58CCAA97D2052F8A07CFD077D767D7DC826 -%522776FFA82728527D2752FD1BFF5AA9A8A95AA9527C527D767D2751527D -%5252527C4BFD24FFCEC9CFC9CEC8CFC9C7A6CFC8C8A8FF7D27272775CAFD -%0AFF9F274B2752A8A8C9A7C9A1C9A1CAA1CAA1CAA8CAA8A9848584A984FD -%0DFFAEA8AEA7AEAEFFA8FFA8FFA8CAA8FFFFFFA8FD1DFFCFFD09FFC9CEC9 -%CEC8CEC9CFC7CEC9CDC8CFFF7D2727F8A0A7FFA8FFFFFFA8FFFFFFA8C827 -%27267DA8A8C3CAC9CFC9C9CAC9A8CACACAA1FF85A984A985A9FD04FFCAFD -%08FF82A7838383AE5252277D5252277D52524B7DFD1AFFA6C8C8C8A0C9A8 -%5B84855A617EA782A77CA782A7A1C3A1C9A1C3A1A95227272775CAA9FFA8 -%FFA8FFA8FFA8CF9F27272752A87DC2A1C9A1C3A0AE82A883AE8383A88584 -%855A8584C494C39AC394CAFD06FFCECFCFCFCECAFD04A8FFA8FD20FFCFC9 -%CEC9CEC9FF84AF85AF84AFA7AEA7AEA7AEA7CFC9CACACFC9FFFF7D262726 -%A0A7FD09FFCAC82727207DA8FFC3CACACFC9CAAEAEA8FFAEAFA8FFA9AFA9 -%AFA9AFFD07CAFD06FFA5CEC9CEC7CF527D7D7D7C52A8FD1FFFC9CEC9C8C8 -%CEA885A8A9848584ADA7AE82AEA7A7A1C9CACACAC9A7A9524B4B2775CAAF -%FFA8FFA8FFA8FFA9CF9F27274B52A87DC3A7CFCAC3A0A95AA9A8A97E7EA8 -%AFA9FFA8AFA8FD0DFFC9C9CFCAC9CAA87DA8A1A8A8A87DA8A8FD1CFFCFCA -%FFCFCFCAFF85A984A985AFA7ADA7A783ADA8CAC3CAC9CAA1FFFF7DF82726 -%9FA7FFFFFFA8FFFFFFA8FFCAC82627267DA8CAC3CAC9CAC9C9A88585A984 -%A984FFA8AFA9AFA9AFFD0DFFA0C9A1CAA0CA7C7D7D76527D7D7D527DFD22 -%FFA8858485848584A783AD83A783AEA1C3A7CAA7C3A1FF7627272775CAA8 -%FFA8FFA8FFA8FFA8CF9F27272752A87DC3A1CAA7C9A0A95AA9A8A95A7EA8 -%85A8AFA8A984FD0DFFA2A2A9A2FD05A87DFD05A87DA77DFD21FF85AF85AF -%85AFA7AEA8ADA7ADA8CAC9CFCACFC3FFFFA12652279FA7FD09FFCFC82727 -%267DA8CAC9CFCACFC9CAA8FD04AEFFA8FF85AF85AFA9AFFD0DFF7EA8A2A9 -%A2CBFD047D52A17D767D7D5252A8FD1BFFA9FFCBFFA885A9A9848584A783 -%AE83A782AEC9C9A7CAC9C9A8A9762727277BCAA9FFA8FFA8FFA8FFA8CF9F -%27272752A8A8C9A7C9A1C9A1AE83CFA8CFA8AEA8A9A8A984A984FD0DFFC8 -%C9CEC8C8CAA87DA1A7A87DA8FD1FFFA2A2A8A2A97EFD05FFA9FF83AD83AD -%83A783CAC3CAC9CAC3A8A27D2751F8A0A7FFA8FFFFFFA8FFFFFFA8C82752 -%2752A8A827527D7D2752FD1BFFA0C9A7C9A6CF7D7D767D7DA87DFD1FFF7E -%A8A2A8A2A2FFFFA8FFFFFFA8ADA7AE83AE83AEA1C9A7CAA7C9A8A97C2726 -%2075CAA9FFA8FFA8FFA8FFA8CF9F27272752FFA87652A17D5252FFCAFFA8 -%FFCAFFA8FFA9FFA8FFA9FD0DFF8584AFA885A87D52A17D7D7C7D7DFD1EFF -%A2A2A9A2A97EFD07FF83AEA7ADA7ADA7CAC3CACACFC3A87E7D275226A0A7 -%FD09FFCAC82752277DA8A8C2CFC9CFC9C9CAC9CAC3C9CAC3FF5AA9FD0485 -%FD0DFF6085A8AF60FFA1A77DA1767D7DA8FD18FFA2CAA1CAA2CBA2A2A2A8 -%A2A8A9A984AFA8A9A8AD828382A782A7A7C9A1C9A1C9A8A8522727277BCA -%AFFFA8FFA8FFA8FFA9CF9F27F82652FFA8C3A1C9A1C9A1CAA0C3A1C3A1C3 -%A8855A857E8584FD0DFF8585AFA985A87D7D7D52A17D7D52FD17FFA1BDC4 -%C3A1BDA2CBA8FFCACBCAFF85A984AF85AF83AEA7ADA7ADA7CAA0CACACAA0 -%A8A87D2652279FA7FFFFFFA8FFFFFFA8FFCAC827522776A8A8C2CAC9CAC9 -%C9A7C3CACAA1CAC3FF5AA985855A85FD0DFFA8A8A8A9A8FFFD05A8FFA8CF -%A8FD16FFCA9AC4A1C49ACAA8CAA8CBA8CAA88584858485A8A783AE83A782 -%AEC9C9A7CAA7C9A8A87C2727277BCAA9FFA8FFA8FFA8FFA8CF9F27F82752 -%A8A8C9A1C9A7C9A1CA9ACAA1C3A1C3A8858485848584CAA1A1A0C9A7CAA1 -%CAA0CAFFFFBCBCCFC2BCA1527D7D52527D76A8FD17FFA1C3C4C4C4C3C4CB -%A2FFCACAA8FF85A984A985AFA7ADA7AD83ADA7CAC2CAC9CAC2A8A87D2652 -%27A0A7FFA8A8A8FFA8A8A8CFA8A72752277CA8CFC2C9A1CAC3C9A8C3CACA -%A1CAC3FF5AAF85858485A1A0A1C3A1C3A1C3A1A1A7FFFFA2A8A8A8A2FFA8 -%FFA8A8A8FFA8FFA8FD1DFF7EA27EA8A2A2A8858485848584A783AD82A782 -%ADC3C3A7CAC9C3A7A876272727FD09F8267C522751522752FFA852277D52 -%5252FD05FFCAFFFFFFA9FD05FFCFFFCAFFCAFFCAFFCAFFFFFF6185AF8585 -%857C527D7C7D52527C7DA8FD1CFFA8A2A9A8A8A2FFA8FFA8A9A8FFA7AEA7 -%AEA7A7A7CAC3CAC9CFC3CFA87D2627FD05F820FD05F8A851524B52267DFF -%FF4C527D7D2877FD1BFF84A884A884FFA8CAA8FFA8CFA8FD1FFF77A2A2A8 -%7EA2A8C3A1C3A1C3A1A783A782A783A7A1C9A7C9A1C37DA8522727FD0AF8 -%26A8762752522752FFA828277D522727FD1BFFAD83CFA7ADAE7D527D767D -%527D7DFD17FFCACAA8FFCACACAA9A2A9A2A9A2FFC3CAC3CAC3CFA7ADA7AE -%A7ADA7CFC9CAC9CAC9CAA87D2027F827F827F827F827F82726A751522751 -%F87DFFA87CA1A1A776A1CFCFAEFFAEFFAEFFA9FFA9FFAFFFA9CBA8CBA8CB -%FD07FFA1CAA8CAA1FFA8A8A8CAA8A8A7FD18FFC369A1A1A069A17EA8A2A8 -%A2A2A8CAA1C9A7CAA8A7A7AE83AD83A7A1C9CACAC9C9A1A8522727F82752 -%F827202720272027F84B27F8272752A8A1C3A7CFCAC9A1AE83AE83ADA7A7 -%A86185A9848560A877A8A2A877A9FD06FFB794CA9BB6A27C527D52527C7D -%A8FD17FFCAFFCAFFCAFFFFFFA9FFFFFFA9FFCFFFCAFFCFFFCFFFFFFFAEFF -%FFA752A1A77D52CAFF7D2052F852A87DA0A77CA17CA17C7DA87DF827267D -%A8FFC3CAC9CFC9CAA8ADA8ADA7AEA7FFA1A8A1A8A1CAA8A2A2A9A2A2A8FD -%06FFA8CAA8CBA8FFA7FFA8A8A8FFA8A8FD32FF5227527D27277DFF522752 -%F827FD0BFF52F8F82752A8A1C3A1C9A7C9A1A882AD83A78383A7A0A0A1A0 -%A0A0A877A87EA877A9FFFFAFFFA8FFCBA8FFCACAA87D76A8527652A87DFD -%1EFFA2A2A9A8A97EFFCACAC3CACACF83AEA7ADA7ADA7CAC3CAA7CAC3FFA8 -%7D2652F852FD0BFF7DF827267DA8CAC3CAC9CFC9C9A8ADA7AD83AEA7CAA0 -%C9A1C3A0C9A8A8A2A9A8A2A8AFA9FFA9FF85A0CAA7CAA1CA7DFFA8A87DFD -%0CA8FFA8A8A7FD11FFA2A8A8A9A8A8A8CACACAA8CACAA8A7AEA7A883AEC9 -%C9A7CAC9C9A1FF7C2727F8F8527CA17CA17CA17CA17C7627F8F82752A8A8 -%C9C9CAA7C9C3AE83AEA7AEA7ADA8A1A1C9A1A7A1A97EA9A2A97EA9A8AFA8 -%AFA8AF9AA0C3A1A0CA7D527D527D767D767D7DA1767D527D7C767D7D5252 -%7CFD1DFF7E7E7EA97E7E7ECAC2CAC9CAC2A17D762776F8F8F85227512727 -%27524B4BF8F8F827267DA8A8A0CAC9CAA1C9A7A7A7AD82AD82CF93A0A0C3 -%93A0A8A2A2A8A2A2A8C3A1CAA1CAA07EA87EA87EA97DA8A8FFFD05A8FFA8 -%A8A8FFA8CAA8A8A8FFFD06A8FD19FFA87E7E7EA87EA8A7C3A7C9A1C37DFF -%52275120F8277D7D51524B525276524BF827262652FFA8C3A1C9A1C9A1AE -%7D847DA87D84A8A1A1C9A1A1A1FFA2CBA8A9A2FFCACAA8CAA8CA7E7EA984 -%7EA87D527D7D7D527D527D7C7D527D7D7D5276527D7C52527D525252FD19 -%FF7EA9A8A97EA984CAC3CFCACFC3A17D762752277D4B527D7D527D527D52 -%7D5152525227527DA1A0CACACFC3C9A87EA8A97EA97EFD4DFFA97E847E84 -%7EA9A7C9A7C9A1C97DA952272727517CFD07274B517C512727274BFF7DC3 -%A1C9A7C9A1A97E84FD047EA9FD4CFF7E8484A97EA9A8C9A0CAC9CAA0A87D -%522676F8A0A67CF82727514B27F87DA6A7F87D27527DA8A0C9C3CAC2C984 -%7E7EA97E857EFD4EFFA8FFFFFFA8FFA0B599C393BBA1FF762752275227A8 -%527DA1A0A77D277D5252FD0427A87DC3A1CAA7C9A1A97E84FD047EA9FD53 -%FFC393C2C2BB99CFFF7D2776277D52A84B527DA87D7627A8767D27522752 -%A8A8A0C9A1CAA1C9A8A9A8A97EA984FD54FF9AFC92C28CB0A1FF52275227 -%4BA52627277D7D7D272727A675F8512752FFA1272777522727FD5BFFCAC2 -%C9C9C3C2FFFFA84B7DFD0527FD057D52FD04277D4BA1FFFF777DA8A8767D -%FD65FFA8FD05FFA8FFA8FFA8FD2AFFFF -%%EndData - -endstream endobj 20 0 obj <>stream -HtW$ (SQ YZ]9R+2k0陇`$G(:o?LŻLhVL|ːӱ~_8Dw#Cdw3 -Ra -ww^?F*d8&I}z lDX(!w?3+gr'+!yѼO0[9EHڭ;ؚ %b\ށ$}0PC -Y5 ۈ҄VL` ì1uhRԙB+mJlh(V-p]뤬e<$jįf&U0^Sr_MR -!vӤ"3ݠ3+5@E*EUny<"26O "R -cV0<[ü#D:<vfu>`UظrE4E)`nYKPC,2.HT.kt Z"pDd~E'Bl tIcaB|4qOEaoX`hwϗaR>78VYDIb",ǹƤ*y 7$֩p@mHg5Q#O[Z{vBC224c ޺sXƇ?Y]*_efzcK("˞rW7̐)t -{j@v(߼?{xr?o/8| e&AlsE>Tbpr&[ިkn D*4o,o]W#a藯'Ph'*/Wb%;H#&D_a"QNF̟1>5Fim@[ C'vlSȑU]_Swn{u0+#s$c0rcJc + -/؆-ʍL.|sq;C WsRx%<]鯇1L)/RښitLeb!0+4[Z5wz[* -Fd1)%#:ڨr(iTdhMfY]K6B"c%bgU':wRlJN{A:9Sa1WfWQ]5R[DeǬdZWMԎ"v|55g0I[3k 3xSgĻ-VNdq%}pуc: -"/Kv]pqUMJ:V8PbFʲTRԊb؜s9c-r,uQ'~^1ڳV"W(\Hѐgf~+A0] ~RFz12\:3Rzp".-x` V] 'rEw}yhNb%x띯̞@X i-Ղ`zXPK-):Q?R>6үFmz=JBS9Cd+ o^.+7r'V2[X/^f>3)O&YL+=ժC>2m߅y -f/ZpPvM!HB4rv_g*žƪr<֖lZ 9ŵɚPΥVmӉ1GPYcfA3'Beu򚭊3Z06E;ks=6ܑu7"ѢaNry2{1 jDXNõFo!o}9J)zSrJW9SAKԚomp=i<${R>9qZ7C\5Ws(43Jl&EtAgR9t/}w.gXT,ay650n_ 룱3i5zI p;ĸw{Z4ěCdǻT!9^#OUzr ђY)WS 0z9>$x;a/d tu_<5jF(KzFρU# fՍXlrhm2ZA&.xd -`Xpn^s/|Dո!Ʈgj&bF#@!zB:36kތsWm;PTv h5Zk/HӉl~2E[{zos v~ql|ΰEcG@ūkbkjUs&GO Dc2 *L[8S5nޡ/鑙/2re;'Kr!eW}r6>YtFŰDZCMo:)]q% 4Md%}o2Yq4y#S%}I[>8c4D몪t)}1ч?&-+ByWRI/^ neզ^CpvMDX u;tht,I[{}.4zO Hrʽ\"Y upc^,)2KͳTP"8KP Yl~p \!(' / +}z?+_FoϹ@*> xQ" VW8!x܋~lۧ*#㼫![.]LYˈ\fkP} Yx`J ;@<T s΍Ìrqj_T՚DTMsU"b[S.j z>TQ˭~S8 E|o(4YA_ %=@WLљp=74ub:l`o^v<xUՍ{R[L88!9I-5?^UXI3%ȿ%E. կ\.IH<6QN'o[zhœ$󈁲LS$0e_.EPP3xq&!oR\CDd)~߿;K7Bw0Y4/0l@)3;CH+1mH ߐtٵ TGVq +ڗ.1q(@V*@|$6'#6c%*dcCAl%A@Jx $`dyTrl)Wov%WHv=8WBtj2EN?Z@\8HTf޺nUqzu"9KTC.f1ݢZge?vWU6b,MTP*1{fQb89UnF.,IQ RF?ա;nxTEQ#I.ˣXɒ8`+Elt÷bFHw,'r50е".찬@E\4Rm#jVdv=1yZ;ղY -+Ou_M6rM:SU˒*0I!(:?{ɻߑ>MkDZ[KJBX4fu=V 5u40Ѝͱk{FwEkz6$`wDZ,vd`ʝ~{CPɁz仃 S6.iPs"{cۘmy#|!_,ݟ˖ QI=x2&|ӫg9rNszIH qQU 7{Q _hrW0 b@CCRv?AY%-cj%uҠMm|iЙOͩNŋ!eI[kgm1Hz@`GMyf0aEt VV?\f_wG@ „>|I"~bV`z.]٘B1Y"@Q^H[m[384ICm}jH k,蔱qJMzH -h}zHDJ @.0UFea(-UB3z=Xu(CM^z>K} g-q%VW -‹i@(4DT/lZ6+vk,_]GBԓg7oU:},Dbqȱ|DBEyRsk䧚85@ rˮ6O8ac n6gWiX_q!j*gNr:eOxq?]2F}e7MR@ƥ^tkkWϱ>'F_3Y+al|[Sڻ)o.Mj,MEKa{R ئZ%EUUg":%P#DO -\~ UFYkƩGǮVA=muZ|\_~}|# ܾ\ ->6tUO]LBlÜp G0 - :ДN,X+Ez"2SVo0DHmیH[o-5CkJ 8^&aģ 71 )= ؑT-uHT^OG +5YtE@M,""eIzZ6zZJ {XB@>f!WLH|tD#]Ƙ{`L,n!*^ÍG k.Q.fC3tHxnr +OLV{ۃ\%brg܎!bxG!3;Bxݺ袩F[(+jV^ Yxs?"MQ !mIlM;J5t>}` ~a't+Oh1g5CuzK mzHS~On>**uA2+skXM`|T!LGlȞUiRiذ0c}ɴ7dCP7pa`]L"g!*ЙVM  "p.cSWٷR2xMϯBSg2?=w7Dx6KnGb-]䓅%nuECv<}N97>4ݵHbڣaM_зxħVAm6nrŸ=MT|7Wଚ&Xx 1I7#7:E@`ٙ$Ņ*N:"(VVW{*++RÓ^D>!{aΌ7nyJ-uOy+K;bS|'IжxEkPBW[w].[! -,9nǼ+nhaլfcWYXu;{fw$ɯzԁj>Q1T՞L -E=th17jؚ0MCJ?v (r -AnSo5^)SR+;9BɲD+.'%Ҭl -d{$DԎoS<)$an qݏ>a'rV ڽoͣ[^Z9ysd_՝\=?uqm@SfbXhNľ5=FQLis@FKo )FQ1(VPo"` -%"Z~lmTSY.W(_ P4uDjm3]DeHJRz1 3z"$ID K Reyg\΂"R#ӫR$#x˶npX㉤3睱ˍvuwD#%(Kh'^j:6xE:}@-竷&ġ39RVZ`ȌM۫(7{"2DW1PyUE-R ox8,WOty -+[F*kR>AþTPH - K"m.vؘu%m`nС71x62vqfOwU:}] 0t$X,E\tjMi.WX3ʸzz1.#*a2§'r&5rO*C#C ]D2YU;k5x>N Z%9#<(o&sϛ-a)FGTKNW|On󡜇} }3f<+HiEq h U{YELB3!]`˩0ܨtzS_lYxe - ݯ79a*m1֢`bx\ja!oAߗ6%%DvLyxQ8jŹCL&9k.c LY5g @36?*|3W>Fg|Vp"qm|Hn Ja4rA#T ]'F~-@7lΣKhpj;f f?FoX8RO 24]'onv&|m3Nb_\K^ -Qg} -f]/ g{+cob@ldkºTPw1Q;sA&)zSqu>$UM:u"z&epﲢ M'܂ŘRG714'A_B{8@L=;t MFNJh ( %e4c4?n㾁lh*fmߗA5Ԃ;Vd"׳q.-r--+I_ (5FoEND|-Y5/nCZ沤iaoq6plVk+&eܔ4T HJam=> -5[b^ɸ5"lH*DI(Cțm{CSr7)?xs򂾚]DƸE#M6nWN$r{gYWYi}}ȨY!m-]=܉ah q;϶.ֹo2U!pu8S!ξ9qL5} -7{ǟM cxׂ%3 &]ӆ`nwYM^@}ݙu/HPA05]@8$MWm OРeк}@l56 !j_Q?SVJbRl' _j(~b[YnDҲF6FQ=#Jb8u6Xˊ6)8xQ7V~¤֦}WYMmF808}n1{5ՅD25C@۔׳)F j2Ian=i>|pseA[V$GJW\6g;y8i ji,!`ߛ\2Jy'2˙j# -#NԫD{.V{Uق_5%DPڎ!2URF:v׽bE7KCaaUhuhbcaЙg'n\ sUKL2yoXa5ԵYab:ۧl*V$n,)2a$3SLmAXf$C8 -3uLR*kGbJ r{hKPN?-ŧiM̓`f^_@X{$6qϸUA"۶i]A gjea!.42f3$MU}#0p;@ޕH)>`Ƹ٫0$!Qo`[ TߥycrB_Xt'He9_+SSs!}4*slŘ"JyѶ% qDg0f1$i!a30eL|~z* ~L6YTxJ6{?,doq"'HrZ'G%WxU,;W0ܵHE/T# 膹 PE(Up Z=Nw.ZsڴCJ—a׷[/]䘮YD~Z+#sE -xm 2;GcpIL=pl$x,uAl,v:hmE'J(_.e}cKx|kQ ή]D|C+o}ʓDsYu/LAwzt( Upƣ9KeM6mVWQy!Pk4:f -PNrYȆB%NșirhUo71!YRD3]^`O0V9R=J1yNAاi,.{X.\["})nmt٧,?^4k|6 ?^Wd &DI pdxs;ۙC3s HYC )sq'Uj+~]Y .A rJIgϑkRg^i;s?ӷ׿R*!4B'e,ߩ&ek_Xf/ǻ=[pmǨjL'#QhڜRrJrg1$!,7+9V٭qsF":D%mE6~T@B l?fBwK4i3* VR-a^R-_skjIKJ7L`p-6+QC2]z^fg;.vߪN[h<?)FH(ľ[)wM4 -z|DM1jW)'H).խ͕L0{<öY9.d&XeX(R\T"mNHLqT6b I k*g8YS`= Nڟuً%FYژ.DAMV]_XIHj–@?`;7(o5̸?? o_H*25C!Nm˵Sϣ }-pT>NF_x`tV&t¼Av2:A[Y=S9 ]ggr,;'<:ɕN+&8`nqt봠tER(]AY@O$sm37s;}\H&E_|CfDN>W&o>W!9Xv< N-<."EN.() !.#ZN>'gQPJF9+hJ'tCA8jah񏌎/[/FJhVUs=]6]9dtlYNF/~-u_rg;" - -m@.F8ڔFǷF,KlK.q xGb FL寺1P2o\"a*RfTԨUC5tـaWIؐ^sqc`*Y;)R)lEb4^iA 'MvoTPW57RGj2- Q1|"PL2*č$p^GQ vxDu̫>cg4 Uqؕr`P$Q$ϩV_DEоZ U¼צAqb#}gJ[ D! }Ύg /)9Ѳn,EeRSI&)fE -L1) LSS35֊2X|VA!̌"kfDaZ/1Ö -k67=IPaKK,*>20&[}Uv#NІ65Zq0vAYʎٛ/ra fj67ZŘ^ PS*N\d"бgۥ"r1oCi͐ר(1˻CY`"'VE8m31rV{g^z\Z;$Moցurh -d֨ZǩH*x$ -Q!wQSfgG?2$yÆ)X8EmtGjj+,,rTPݞ~?,߿x H/hk n]hJ2!Ƚl}s wԢ3/ޤGxZTIҥ B(}1(Tn&`b?#R2Bls䆢Fx䭈x$=l$)+}o:NC$I:f`;1[?I}9`eHqA; $(y]ߣS$x7ȬU-ж%kƱ̣4'":+D& g&URn<_y`| d&VoS2#CS#;WT#5&[pIOI?+7vj #x$3Sx3ti{o|\uR۳Kl<(hޏ*)ǵ:NȠj-I:CTPqd$$&4wX*j"X/;C5Gd*V JC9E8W!/K!}fv>S_F&!0/O?K_v;7ӳ^),ӱYCvG`}!: LF,C3PT`i<ӽqES[.%) •tx$ x#S]L;_ xygn[`>𣇏Es7QY: w?btTt]^4fq/)[RtFUz d  ~C5\hrD-2%N CZ]::078RptvŇgfFTS|T50mWvچIx>|+M]0B0Xr"pM)*; Zӂ1+ֹ(,bNs׼ÊSQw GVbŽ4A:BC <,=^'}&\Z -Jjq Iӣ'0fy|ugzf_7$7Br^Ey?"h-i wTtH -p0OAz18:7w?OV C52D]GPJ֗#6GQAQh{@2/4?)Ң'h"|daL YʢdA< y95S:e/$A쎈U|@/yNh6nJŖcsh= !ž`,,:"X{mw}:8\wwX?,Ӝ}ѾQ2 $FFGwڔ̘#АDZ6R̈́(84o W1GZ'lwL*]mWsv ,biWHQBF7KH8Š -].2\^` B.۷10QS!f4wW7̻R6~m֜PZoFVT^SJi:Icn* 30Wtjj#;_VOCo _8;u2rD8*OU.Pϴa[[f-x+\о|*FUhF+FXEqLxIc:d||ϭZ͉hWx!ʡWx&)o6v)t-gfR" 2^[^ R^KI֍T$y86n2U[ ]ǪYH=sJqiB㏖9z!p'r񤶞rWCdArz -'r҉\t)HqEΔW-T$gMu?|Iv+? /EH2S*\mV_6^Iy&Ð&{ n B]1 $a>/|J):?fXӸ0aG`֑܏ "N,=B|&BI2i'Ҽ 1#sS}  *oJwrUQxf$,k& v #=kY ]3j5 A2XGh -D%4Nr ǖ&hk"`?n ˑ檍rA1-ЀaӞ<0kt@[D L̑v|\jEEHcj!0 qvɠʄ3bNOUә3J|ׄ#ốo_, mw H>4*N[ƨkb43}.P2gpYwtQ piŲSzi' 1镕k:ıڲ2>ponPFAV(<֕in$3hM*tW% &^$88owEuϜ],5Z""Tl0D'P<%둱?c t:X3@Iy%hr¬2:62 6gr;OW^%Ip{VߖJ$X(V {%ׅ]MZ^VFf{#e*t_< 49@ w'n1mg-U4V\}*ɣ+]Bn:w?/n }F-t&d 1\&_ϝRػeFnAzIo6VT2?g M& -w<ܷKޢ3SPwy(ArVH'/&*کauvY4cP/Fx&[F -7 I-mKLERcQҨԴvAEb"gOz=<jOuC ml*z -um"s{@Ǭ`6 Y!>u/nLpqd#d9}ڒ$!mK7.m]_%)o %C˔@zOstfїpߜFGk+nlj\ҏI_ZJ>Yـ(7UN뼑|-Ye G"3JoIyqm21Kf^R# ~|Y7ekuR$W|wETEk+) ȑ_>}!ԛZܐi. t.̣Hr5'^w:u50}O__1:Жkx;l/ZmQ؁`*XR]AJI|򱷼lw rI8h!dY5)Hάw#m'㳅:VFgb-O~}Vx4˅& u\VCQ&^~Ɛr}5P3 -е q'@ R s."iVV{ֈpA y].3+7xz4v#O9 |GeXQ9GxJxq#MNUA7xWJ4[gw趸[FbDYgeR|8敜 F`)K`JjI"H=Pe7l汐 -z%u+z#gR8:vߟRA,oA{ʑaf=ǺdW -N%SF,F#:"ӈ-7WB_xV,} ϖ#c,5y!mm%D2|P{'K~8r#$(=6 -_<ѭHW;4cީgN@ˊGtʸ61ː2SW|vbO)Kwg2<(Iݶ^H&I5LfHٞ_gHg_J\̩t"sh;UәGUFE9{^l4Rf&LbbTp\V2f1r#j}"ʽ 'jZݸf UKzUsc4)]FʬT.dbeMV.[&q -BsE[$]˻iKG¸Ȕū01VݤK -B`@Mܙ/`Lh,Cd-"F!\3:7^} ZOCexxdwϪȢbtWdڔ<yvY]דdyf=Ѽ^6@ iLm)(cR}rp +Ib'}sәowJ[P$hN"aP$iEb9I̚I?$IxZ#V/(K,h{Yǔ{HZ۸% CoI"J$ +|H!-7$=!I'dȨ$qh{(I!IxSG{.MH$%vȍUlU*V%`z:T*&*2tܪEz]ơJV&Z=gmUCD!7^M'>^ݟu)%QRTd@Iݚdy:M2zh҉lMzI~T*PhX·&8r~>>sch}"I40dZ bc!mޚdi$sW{0+A ]5ɲ_84ɊC~a7MI1Ɨ[赬Vȏ`&As;Gĵ#hI{:X8PT&f+1N+8_l9:œRc#Iy/D-V:gl,e3)ЧOG–GK3!&ᚮ؈4p}m乆B˘5c@2Ԃ8|F0FŻjL3pZ?GFq@F"8<|:c1nE oS^mV 'oIQQ11by!p] mNjj(Mo&, -b=Nu@#GWQk3)V}Y+# )ɍ` GeԹtia]nR5uf7=)?Jg_ew9SZN 1ۈxX` erwP^+eklAނ9uOPOC]RzjDN]Pb46yGv6(i GqKfq)-,PnlbS,s[2K~Vz"_ T!` ߟ -r)^@Spk{@Q@?bOF~1Z$WGCLhfQl#[.iߨt/3$g1?~Nv̙KXiWC+Y荨"؟2ؐeN*FtIGM+k >#p* Q4u:-`D*POg4|ss̷P:8f">=)hʱ,*޳\G, 5eLlC(j97R_ %x!Olī Z#P)LDn{0ǏjLoE5%ӛGJ)":$!Fr.cS1\D-kEVA;j_GQD1hQ>(3" {YHM+|pp,gO#!NX/_&YJ'A>t/yTnK}ahE)Jj]yנԨ~sң* -YVQ\54}?g'En*pQL?eAGrײB-Oy3 -E2h0ʛ[ 2&b.S4xԢhmYxBG;p f$6100G +a%:krx*m.b)QUUmNBW|}-ʘrX^Lg<3_|S2ć *K +'gc >sJ -IO$i$Y&C,VACk,m[,=}d.je-K$Y<I")_MQ$=".s#m-'ࡈ}G.0Ț<^yXS' {G>Bt|-{SG`ZbM=ewb_0͠AGjHC+"sziQk?t9C(k`ٱ2LckYpJD50(f,M -QB 5V]խk_ -V;?ՎQ {$JhP~/k(ZJόOXZN؞q^ΫzC] CnŸ QgۘX@1(i'mIGm7=~1vG2$&Sg`K(.Z!\YYX/=[O&)s>_(.o&SЍmx"Qi|D͊H-<"ї=f*+5z:Z#7!q=!؝XMﲃ')TRV{!ڢCDG.CH6(&CR`2 ,~MSXgÏZB yD0G3R%X%`zGX -endstream endobj 21 0 obj <>stream -HtW=oe 2A) Z $._O cD<\&oCe-yķ8c\#ĜȂE%xҕ2PItNZj (ɪq!<Sr,*)Ca󉼇W ~?q G6ou(PXL"8ocvadI$ 2enҋ-a\LDǺrJBk')oIkLVQvBY^pJǜ@Γő[yg[5ıB*lF鱴S;!MV'vF/63%0kJSH`IA24 ~j"ɒ4[H‚diyZWmҢʶ(bOkORkF|W##jF0~QrBFq:(X-vFvm5X5ra$N%hr_v|)FC"D#,- -`EVO- -&Zt"`iQnғZ[\- -ǭFEq?yע1ZY"w-c,^T}biQdPpݵ(R?lZ qhk/ME?1 k\Ä| z"wpOx-ٷ!O/A$_]<_5^%6.w&783d;9q8Z֠< t~ -QA<`>(/׽?C{۟C۟nyj%]5}7=R7q<<7,73DE#X-oYtz ۏ'-@l^菇 H3p%`}]YS)ZY"ؾp]6S}$ڐ@jcz*OdJ2%Թ{&g"Ɨ\-ާ%+J -wc,w#cP"Pkbi}?[$CAe϶!㪫s&H >zp;pyz5:"YjE/DHHψsJFcSr9Ao qn]es@-Xb];0/l/Ʋʗ,'#2W9+?G4MBm%NӣAN 2.&=Mo< a -1C*wrlAg IZy)Oଭ&@l;Q!Q! P}݆z[!/ȓ&&ZM yvƕίxM-6G=6S3fdbz"mQsg n:?vZdd zUdС+D YAwm"MnvC[hJd]$xo;ZGk(s^T:6*-on$^TZ kIQIW'vb'V'K?"͈%P:O6#m\'拫*\.,9pru֭Yh2Ue@@qibJ-?|̰#e*gkiN@d 7 o] α]Xd˸cpw RMw܁(-s_W>o$[ʲAD`p FD 'm/>14-{k?UϜm?t:$@K͸s2?x{hZZw<|.kv$>Ե EN>¥,ULeeTVXߞß_çam-G84-zħsјY >1zᵞP5u  )HƜu1:XΜKjA"R:D.A:$"S$q؂dl$^f;߸s+31C`0$~oy̷qhU<MbCHxh7&yO$Be.Լ$^]dtzj&bt"1k˞.Ĥn$ٷ!I@)]KX.P$"RPCQc7fH"++ح4,C=!5h]T$&cܭRZOEb˚"GJ^=/((J"] [6oSO kGO)3߂+ot7- vW:3P|q62K J 2F8HUX-I-{cXGFklhOűAq h}^`[*j+1Lv`4+OXwu#y3jgBWBG𣏕vx[U 4:,T˦]MD x.0u+f3'e@9Ar[Y fjd&:2ױs8/<<ߵ9+ oúoӜXF;/;2 -E2ǭL/Pu8x-ċSZmq1+]vh85?jQ>c|5} 75,ڡcbyQkt{awQw2z{xmS7gpanQa"ZjA5m^GzWɷ4\+1.56jUw}.?WUez߬,#= rwwKIH%yH[~99WeA`*ݩ #U{):0Sdشe1&: Zpw3K%+uK?f- ]v9*6C45# {ishɼHݗ_Fܡ8)vbHB ,*-_h>Iј%YVTC3nXsDUD;2܁,s aIMV}-UELڏ.qmJtHD^# ^<i$튺f!}=o L"dIuj4\[-oUKjM/sd=@ZFztdzA@-W m6/@\R:S,އ]VtA4ew\]m6dۈ8DOdqW 001KQql[xɼ\bǐ|)fہ.1# -S\ 4MYVdf^~)tOD$!;5y=K$E5Lf~D2]u%S|kÒq?dHĪe [ےbtY2ݖHd'rYtKF`/\^ ,{ܒɘ$LbR- ref]@~26]Nz2o1/P+ch[2^+ʌ{ʀ!aN$em%nʘms/Snʀgx2E6Հ]ܓD.OvQi\>f{23//Ԫy~ LÓ1 Kܓ1U1l1uɍd)Jd:VYwXBkyX#<[Ó}#Ofԩ2n%oҢA܅' ֏a V+o%thx"75ܺ=M=> WkͶt00~nsb[xzIiy9$]]c"DVpby3mh YD42vH (qx8/2AicU@xdf\|DO8EqV\9όDD/ ;/6;. 0H{M!(!+_Ί9܅1ʐA]0d"FQdHǸ}J¸.ze#vs̋WhBPژp ŖTx"me\ͪVZIߌG%i-T[!6, -? -x}~i}ݤ̊kxALhajm{x[%Eo"3eXbQ?'Ki6]E #ODM6KQE|k "fȞSo5+gWT㣋I-0W`[R3ҝE[ж#z!:sI0<˕- g~[{C~۟ oᑶ#si&RJ>m>+k,}yBD$fwqp_@=kwXy_֯[&g=(taGOf 㘱.npKs%BJ8'AEqSl1%ngX~d"ݫ䙖xg v/fZF @b |LV4'^1)u'tMWI`Xth*O(@&#>>iNbQ#KCC2~ $/n.w;Rڤks_|W -?GDrīel{MDZ5OQvvFMMd-fz[1R3-Ke \(:fvHhNJN_]ܽ\w8]|BM,@&d48NM п/1Ǎ DbL..0+i@z2гN|@UUu#QDv._l/{בŝORJ9ED~(wkZD}QMGi&G~|oy{hZuIj]b)ÿw"!8!c';ǸK;G6%DQ})8]߼r|z\;uUByxa*@ѯ*\`tX0,B".@Z&媗gQT؆[*F2-^/WJK4 0[jzh be݃)ѿ˴ț9?пK0xLT}sXM,^qjuġ k.x11$S('(YћY'ZAӭs Wqū~0"…_ yJ |3'QaP '5 LՃ -U<Ѡp7T4EOjt -g J+'fL3PA[`bK8}|px$H׈: -ցaSGzlS#RȔҘː0|cd"s4.GV`Ja> 00}OQHc9Kܜy1뛏f]qM*@7;]::078IIl8Co~oVNRgoW9VuUuEGHz +잓Ȋk@?xԸ*\Mȴzu -jZ^_oIvxZz϶.ht]H$]u$E6o/NTcW}1i0 >A]6qc&k #O'qJ'ڑd -RY(0?7cjcl?& |` - FIඃ@E@frOJCI_;Ra FtĝW>]msMh^)u!u4G8c4꘩jP.\HUeGGΎ`*@ݝ3~7NIɷC\AEX"vm R{ `F^sHKK5U/*ÏږlhF:u ٠L% Bjܴ(34 -ü`5T0-ߔ =)7sΧ?{@,~lqA}R Jn YRP@fV7tHUT 3ZuTml]\h(T>ֿ7 -8~8F-񖵋cȍ,֮TU'#t -n~ .(* ŇVǣj~~U/e3BFЫ{bhTWG}{GjM=VSu/z݈ok[We`x6WQ0ϱmY<ؖ(yXV2|Ф3'rIa:?jMM 6[H~J5ˤ\#523황5Q[7e( #edUPtFsK"2T~ C -ܽs&qGV's>x.M$|J+mcte 6I=Ebjd3cWF#Hh,:v%]TF`D%PiUȨjzpMSr444;_Бe|єrbvjMwmTn4S &FhEqhٶ& j 4$j[x#Dz˩U쭩N%eZD=dH&z޵ 9kJxv 3{`%f-Mw*H"]تxGZrD iw 5,,c1 ­ˉDʪ,P̦6coeHZtSާQmDاea0![ L8VRnrȵ8Qur0l$q#pOW} -cӓhǒP-BC4xu`ՅHJM>Ŀwj}Q,"?}Wg}ʞ cf ѸV:/cftz;O!x13N(Vog >e -z:32^ tpf@2tfHۙÙq}83}q83"Ùnp;3"3Ùէ38~ezX3qm͘E ^ŤZeΘ{ Ŝ0g@,iҴÜ9̇M9sN4gD"sFQmssfy 8#N$2fusܛ19f̾E7"PY3)eXǖa͈kv#5;AY3?*\֌ Ջ2 bff~\LiYi͘T,Cu5cΧ5cS(I"vYӛ5FgpxrEwm?QBA;?PӺ~ -%6{H_Q4z 9hb{a(ƋktӑϕCm@ϑkݗZ5ThR,%3,>\|EPmUʺS;Zko"6TFɉS c%sݓiL{xغ/ɵ/C2hUB_T.*Wz}_?t F#[^㰆YW\1390ЂJ<CoTu0 dh)Y:BЃ,LKz'.մ*IL1bĚ8DV>.J.*2{)jh*tj Bܺȋ#tDBZjM_\"xi*&6յsCCEjj%POAt c(2pyϘU;kHg B*m"f`UJaN"y QlP/˙t#1О@O T/tOYWdҘkaeFk,+xY N" ~J iK04cpD蒻,${j|~'%_oR39Q&1v˼oC~N+{'MJZ)2|Lm>M@q2l|9nS2eնsqea݇٘Y ֠_ºGl2dQf5RKcZZۃ8V[+2W@~bZq<6Ñ\8 \c#ḱXhM `_rtN^FB:6&~{ v/l!$:ymw~3N*HgnZ/DiC%4ЬAQzu-S1^@x_=kM -ɪ.66vB*[ :+$f9n!%-zu"6UևPJ8͌Jy|71K=c$iT[ēY2z x!2`y~֧W_3n%Qκi(x%, >/D1ݠ2Ƒ$tL͔yu5Լde4E< 9u=UB|ZgOH9O.*,tJk[Q:IQbz`а. 7Oǜǘ➹j 0- 9=A}[Ïj 0|߃]aC}Չx Bk j?š/lBnM V R7xxGfw H摘퟼GQ60bL[McX1Ӄ_<ͅQxW E,+az'b3UX1\>|U@GFnqbYEǿy_k2j'8} /vp eDfb#u/x rʌ!ZYD?XՖ_pR^wܹ{叮ڿ#qjԇmJ,#Ԅ"Ž*/Ä_BĒ1a1RՕPȨS 5&/QYTB+Q(X ll!;bL)?6U̪]NUJ"a|h g5c3u<]gmTIX"G~}Wo Xl #zcTftj[d?tH]vOi3\ `.IJf@* c {mKuL#jQn^qz+ H][f],+~iq-xrs+|P[nRl_^z7dӍ~(l=r@ w.t!DצE1'vvAr?Lh'HJ\C_ngɒZ=; ,vwjG(;g٬( Gjk_bS], -voXI-DZz@f؄U.AZ6e7zo} oaVƫ}jLOR%+&g~qT֬5i1}#Qpk^j[-b5dGshђd^BFz - sKxQbnyD8~cơAH]J "it~?狺0;8gJ]o29aS glDgVI#e8Ulw}&9D+T|B^Ǟl'V\dڧgL Le]~>ě#awV @d3hvU5yZKC]3# 3fYdkZJ+{NW8`Y55368`{f6aY]Bb؉yr^$~;I9=n7py83fOÐ4^ĖU_QiFB)RJ@{ -٢j6y>X%EԻId+YkQe3ԃl9J&R[cUl2m:ByY{'R5>_f⿯%\ 6H/07ܩm(Sb2(%ezF%klwD:kkT![KZoU pRe@*JQe@ƺT5N T#mKQe7̑Yō2RJ^LYo -2ŤBI]Dkh䭸<w 3~9[]L}lfFf^#fQfoa7H02\ -3+%#ԷK)֥nҾ}쌃e-u.+t2 ~,sMO .YHme7rd ,O|dW)b,spq2|Q`PrKyKyv{U߲߹IkޘS}e>Жe^"Χ,2u/?_ -6o_f T+6/K=߂Zv6Az&&$ bQ˗e%;2 KdbFI.Xmfɧ8etW -QYkZD]:*>U/0)|C-OǍ[>5kVjV]4 fRT>3mؔ_oyq _èR>1k(rx9GJ8l|Ic~%-eߎkq*귏鸱$1ޠ==+FhI0Ǫi^ldJZ94hrFIVM5 Uq -If=#^Ӯo$jr&zcj[U)y- XjȠ"|/. aW C -zF'ɸU黔B>HE'V|QWKx{/]( .\b-`|]m㬭aw7+ Ԝ9bt@3 -?/ĺ?%ۚYjQHC ON=`ϜkB9[m]R;*m2ؙ\܋B6hcb؃02g&ZJsYlcJYlMAjd$vC삀^I,2KjX tɫtҢ :/<n7p5_^s̘LCdF/iT}FBI&Ms_)hvKn?Lh'(QpfoŇ3}.,$,q 4Iܨ=d-:+#/U`C}hVNac:xCk]+Ok"4ҌoOB"4bP -QFUJ?|9S -K& cY2|9{*nX2!al7JۖLl6vx2 ԻfKl"v|R_ ܿ=21k'2_^ Eۓ'3drx OfN |c,xv2۔Y*4I2 B~˲*wۖYg*Taˀngaˌ-3 Ö9)Ƹ2;! [f4)oa,.7-u (22HKڔg{qWf)]Fw2K0 H:L%-2eVEy2CaNd \̷JΣea)3PSr{D>s] K2Kt2KU<,uݔY=g(aʬnʬ%G2HÔ}ѥSTe~Q,2[-@{S@{hXS_L N"e{:ӌXZh3Wܸ=x~,-5# uK11Vu˯_('׏ta ZͿ`K6ف}x aLj`A(x>Sbc NF:t*{Kjc.Ou'd ˨?n꠼M/~]fAHXྜ:ZE<)4Qgn ;3h/`i;K}Y zro4q`/p]b49JP܄ӖyŽS8ؾpYL\7Qry_4 Q-(%.A&x@1f"M_5~ d1Icj0%2$= e`d5mⷄS4a/=ٴAB֘Y ])bYya%2rԌ˨I Hg:ffrFuϧ ,%r' [fՄ[,,%K&3'L{sm zvyMFJ3RFnͅ>8ټqfGt>zee=5@̇Pi@[rwQ0:ZwDF jȚ2GujS5#~[ aJ|qvɯfH EB ?Soi3[x[%.o5>&ކ"mtD8NijК 1V/_REgȞؗqp+"g2.` -A2f`qGJI@(5rI5<rKȍx*dHFFSv *wɕ%bSiȒAKp렘QyVjD {Z kUZnn,C~Tr||}zkV5| AG > mþAeF|3sT!H:6Lx̳.p0@+ڔUk!Q;JN&Mz!p?? M j5m.Z qeAW }bBzJh#krc`w6JpmCLpv+UXwi! ~dV(#S|FeDT ”rX+Wd:I}yGR[e1^Nu` iOgϮQػtf%K"ХߞdҚ?MjI>~_?`+Zt(7>Cxɞ!m&JÚ?o <[bXa &0o䧧M- 3h7pau7{-_ ',|ɋ&&"M/~!oA}95:s|/ѡyҠe7f93цi/ lt=5Oaئ#u ^fla$Ȇ<.1d:@`$g!Qz Am/dhə2Vd4Э}VA4J6V \#pˀaUaTG̴u%m`n0, )1tGMJӽ&zb1ioh48h?Mm8`m{n4,6y@w>Ci tflAG?.`'͗ƋtezMҜB ( l }4-RbgǚcsiwòF$ h;j xye,2 >Ʋ  l1yG$zx@- ҋ獲)u8EF[A_rIdzZ̨Ne?7/T7:'+X=D0)?Boؼn2—H+?Z&OA8qx$ 'rQa'؅{kIƲYy>Kl%aH-Ak0Ak.r_XvFFb i kNPm;v`TJNQE/}u,SdFF\[u7D?gg.))W`d2FqQoW!krq_dߑ} +GO|P7mP"17 @ڢʊځwXЩh9`Bkx_HfLA?9L|*tKCZ7J2~ ܟnigQ?o- -9igoY_cOt~I| >w~(md1=|;F ;B :px7+Ol>w":'<L[@!ˎ:vj׎}-. ̔ڦi'TjQR9@SL.^Sr]V͎ Z殎> ʤIbƨxllu:iJko{agֈZϰh8C{T[&K}PX}`YxZ,2A͙엙Kt<2M^ϯ$*C/06`"!PDҷV1Y{˹P߻q<+3Z#Zx4k:p?FQw#P9gJ9Nџa]k!16Zh1HbB~%௯2Մee1?:E4tr2T$". a61,_BϭsYSPC Ͱ꺍&E]s9G[y_Ü}=;^!<xu~:.EY*xd݌!ş`L:rFh|!bޗEa^m嗁uzigBy&xwD݇ @k13b7\n/h.SaQU=Nn'0Cn}+O7 % /ohi/0c5~0W>1G1Ƶ6p!s:M)64ީi-`8,B9ݨ3.~p,yG$xp<Ria%XƩ,GCX)vDzfD4ǘc^;2Sԡ9@ ,-V٠C7"2cxg -$No.6ivL@o~HN{22q )o`e3̧cHLj Nx@^N+2R/ز%2Y%&rjY_HXm -n|+)$(h4~T/$a-ZښDr -@ - c d{D&xn!ERO?Pl+3*"cYZ8 TxIY$֭4В<'WMEex%#:c2&Ȧ}@f;CLgswUsZ4_㪈ju{1Pۗ|D?!oK] nH(nF$F]2;wDƺT` wR*yt%_>7 - Hn쉒:RQ=pP&iz -gЫkmFͶx~\ -nTo4uLM{O t>!jp*;n:p-tT[^8wυBA juVeC/$l3@6᜽\3"EgSk>b?86px}o/ -E|z p&$B )O -endstream endobj 22 0 obj <>stream -HtW=d WС7E<>ɑm97o -}{fћ.可_!gC N '+'ɇA+7hO?Dv/G1S5Vd 9X_?:O{DZLP5} vk-lMSB&HmGzZ)*@ƭ;6\: `f< ->űOR +3&m%?mqD*RxSq^|\O`2CF.$S4pX= -t&)3f+Cp+\0-di/`P9~ -iUakU&.X! [}kG>l_b8en;q0<*`CWY͒}2rXɼ8Q,OE:.Jj_] -.x$ABt]Ũ)%K;Ք\TV[ӗr^݅.ݨ@Ɠ3iK\qn!4|?A߫ѷ7QOwLGRc^}z"O"HsH֎"}Xf!-av~ϲOoGd['Ijҹ'Pk_QŹJgqRU'#BRÆV3PZ%[R̊0@;f?4h#1ehb}.PѬ̧jHBwsd>tD8uCVTmi4ʕ@ -9m]f}Ұo\'Mm}#JSȫn!kf ո#,uTGݤ>tulw腘OEνXOh4[B_тAţ)@HϞH}iQ)ZnuauAV}|Uڪzp#{'/+UEYLVJC)j^VF%ka0."OGP-wd^,@S@k(ADlB|l-*:b'l!m{#͝BtHXG 294#wѪMT@Z12yuUs+5?1<3JLNN.>ȋIc!#-К wyg:I )@fo:I a='Ǒ`&`c0>jxlT}&T>Ѓ¥/drÊx7cɲq mRpʚogM9Xw#0=F`ѿ _׀256-K39k:Ae+TRȦ,b̽&ˌ}` ݽLe2 -&zSMc2%o:Dn&F>Sڲ-Z-@f#fBv/ -{~wޡ[eaZ{ vVztʱcF+tr]sX |)~4@kD~4ޛ$2>f x7!,-e gG>AC'01M7nz0s7 ODNZ~Gh'58ys6={Kw2|=O2;ɪAS\ rI6:m ?\bw+s*}bhےIZM2+ޑܺ.=~Bas&90/Sk@YQΜn$GV:E"Npd8R:K tĝ_4+>̮=j2/'uU2kJ&Kr RC.D0#K`3Fgh`k5fs; fSp (LꊳВ%u  -*#gŢf]~>PQ=oqzoMQX*\ -~B (2 7-1?udM[iYm#<:0A5?.G9@cUC9fHj" -]fxhLk{t?@ͣ k/$;W4E ju؊rl=(Iϖi==bzoOf}ZD6sEv1j*XEUtw ~}3UÆʅ`Eej2ӌ߲CG<|nӦrdPԜFCo$,܀IMd@6auBYwS&գ&z0ׄ38zE5: -WƯ< ftX Ϻ1**(i툔F^*>gK-2Ƀ#lw"Ÿ: 1r=$1a5$#!QqTx- -yiyUp -ֽ%gL{>8ؕѼ(=_EMnWb)>gL>k.ϰ~0JE#<"'7eIm6kc!>;#p}=CkzVԜh<r{SnU{Ԝ}Kyj?d`jBdH} E8㴳IF2Ce0jn>ɢ&,?:&K3NٵpҶo`^ѱRAMUyjFYc̖chݢ|}aJCҏvy{ hӵ1!us=^c;HDc72W]˽3tS9* 2 Hh5Y$ l}v>ӱQ,R(& :n:HC]e>h)}ǡpj -7 -ǠZ7}#Rm0dbtN#lFf J-m*d>N I NU,F^r%c[~Q]2k)rY v1yøhBމGa9ǿ׿ˆc G&\4wȚ֥M.+`z~3wWo5ov~5ԃ11uk7k(di#YQY QZGZ9uJ"J"?@c*٧͜oDwQsHJpQ/G0"B '/kT:Q3h,U# >leE}7r; -?[_Ѹԩ1PB}zuke~e=vBwXbz0i]Im5;y;5@$I_OO7B"B k?21*F_ z|!L.X5m$zi>t(.k, -`Za]hTBNyv=L+4y*oPx'W>ʊ6Klg?NEfuY)!01\O}{tŒKk2c=մBo,X#gWo {f+~Щ/2fԂl$QsZ}jD ɺXҥM];R].E0lXmٽ9R #8yugs"Mu51 adC5WSAW ]` >A$]1ҚؽK|W -WlVȜ!]$58}B?(=͆q_ijeMKf38o_ 2'aD" !մ&=JE}/!L.1i}_DYN*$\x b9qoK-bsV mAfPT1uurz> - 27z(SȪ%@%><2x, uq-/:w͞@<~7H{Lр0@4gaK~jK%gd]Ⱥ -P\xEP.;B}\O1>r+מS)nW|KM)2 tC &| -%vxY*.9u$G6["Aq]%K#ވ7qR۝lUCd}5b93m`{w X.rsfowhrf>IV%8$6WTQχ;{\^ҟe̲FQZ8w}$fI=l -2kSdyF V8G{"ųY'Tџ@lv*})m8y.*)kfR7צNT UKBCQ˼eKdInsIdcX6Grw#  L׾|4+xCpY~l>@tu%B0c&q0*ooF`Q{.:0R KҺ6"hh%O4*rGC'Rx*(w2(!e'dϣ+r#^NlnDN [2mY?v}e&zM=a"ҵ>8Favehvv;P 3z9cssHa0(쵹ET%qmƍ^xmX6+I={t(qsgW [ GCvڔ=L4v([YО|)Gv< <1A}[H{^GZG2mAYX3p/D$]cJ,zA+-9gh_l -4ssU'&ٙ^~Lj-l P]NR3 MD߈p;\-Qm]ɝ$R"o5TӗH'uc7g|N,--2,vNu͓:cC`)M{>R|8( k,J2"M& -[Hx O>)/93j{uߜ@>wy+t:uFցŭ땜%p2Y;K`Ԑ2>#mJ#j%HIY*%:[ X;Z򓒑Q+[` αKE$r+˭+^mQڳ{No<<6v}YHm_‒7⯑OIcGdk;1.wΥSJe muT\MK#IҴNmy"k;T` /kzHyi@4\.vϣls&3X'jUA~ݱ"";LO8 OO >KU4NW$Mtdy 9&<_bj -̝B`~d\R)fGuRGD(N740g$x -I15X#U:ځx -]2swFS ^K%d8`,6EGFrig0?:KcB8h .ܾPwtࢲMrO#ex>#W n؍Z0x -h/G _҃A/7-%;̰d'B x_$x; W^?_?-xDߠ*:`jtcIˎ~>ӻ9x 'oi{^]!'=8'G>ӋHߝd53>gƛ#KA/ U%Б&ȱo@Zx@"lƱWg&*M,K [1"iK8z'&Vl9€f^ȜHURzRwҿf|^u}@ͼfO`ෝ^Q r\FeJ\kieRV+kQ+L{tP)8} Zzv25(g"dל k$h|,|S7-S;q,o6qkC=f -Jy11&Ʌ^tXiIKY^.%FgEX]<TF|de< 4%ߤ,t֑m>UuPHe̬~_-VmIgrZ - Gg jU}[%GŐ8A`?{ -hn+Y~d84@ȮJYvĘ>H(-[Nxݐ빪z3oT"<=ØT>Yo~w-ݭ$ȷlO$﩯ُ X8NץUpW5)VVRi|Zj $ZԬ_CG~1C # YF"I!f4|K}/gFoH.A4D잯WuI̤B -K1\ߖG]ƽ'f|\h$Z3f,Vzk)TAJL:mǩ^˴#LUhePO5lo0[7Wr}(UH|)LKFqFaUOMA>.dy-P(NK~tpHJjcG5^ڻn3rS&;Ijaft9}Ә6˰\c$;Icxv{/"zJ^{~:(\d[UO(3ǭA7VO$zޱЮ暂@|gu8rhnpC;Yԋx -phrf+_>NUw_ 3jyHJ,s`lK<<|^1:9 Hi\sC%/-ⱪ~QEn-}Y'}XD LP!ݍL~ cGw>~oLj#F%bzQٮVDVRhCOέ|#ǎ*>b:2џǰdhc"@dp?6]0ԉyP_ԋd,=f@+n 4p JG"XHdxAE%Z ħzsEّ>H+(/ ^/ )fcIVa:-z z[Ñ6*e; n?R4xV#6ԡ88_hl8Ĵ[!3fq tm{Mח}D:aqPW˞|<Ӯnjb|GȺ;ɕ&Bm؜UKPBE^y C n5XOB)UPWQePH1} $Lx=xbɧՁ0Ve_C# 6 acmЕU8[Oڥ;Y\5Ji  rmEuf6@a+QK^Z峳aY ".yzTqʍ{~;3ګ/׿#~<7isBWǩa#+B*O7gwhoMjc*D V2*?a,i9ğۥ/ q}m٩w@f@4G|p$.I BlJ - Op"-SonHװ#^W]I,gzi#IT)aX`6<.m䡒!EGDrl ]k3GXD{Z .wi[~QpifǤױř4ehCA "bUjc$-axRa(IUt0ٹ~":3H Qv3K4K }:ǼB VG.gaqNї>V,|!~V -`ϱ7G!]7~BiGw>~o.VP%vH:b:AagʁVvĞ~ 78- qn|r +U$U_W $z,c"o -U l.u^@DH -O ->?*YgUӱ',~R9$ӆ}rD&" -ܑ'r6P^DLj/zŢ&yd!`+eWꣾtAmMmA/HQeن=g[>Giw6f!aArďkI,=eAQrXI1:Pf>Ь&8cCDfȘ́En~ge7ɰBЖ"(y $(MM9~(#6S:iܔ fD+amHsEKb= -f)Nſtm\feJaÝɐ_lf_(^,hٸQJCgc& Fˣ<]_YM%\VG|vJgh 5MIY9-D4q*.tkα|4x<"Sf(O%ւAۋZב#rGgMZ°7ذ\fɯ_ڕ0h+_qfKqETcd.+scrc}(l4+8+[0LPJL- 9ǵqO^}Ejkey]/vG`5-r䊣3OnU2pz+V} MpV,ֿN67lddLUL KA&>-LǃLLu'EdX6'fY҃L| }=d< dѲR2ٗLN&xCm'~dZu'Ud26qȍ9ވ]bR="z<]aJs)}S$7/S:;֣5u:bSbdXPc`bOa -!i/s&vaT Q<"t7qAg7>~̘;]dfUjƉ+<$93“r5r\rآj^H\Nl2_%q{m;gfHX^2^!QmFJ1GXq]YBr7RyQ` ьJl*ˮf0DV4x_{^%=*c{I\cV"6Rd,^2m^Ɖumk-/T=\]3>{6 QO?~_PŚj0ZoƔg$ޫR/^tv!c-_%D>5j̉^P6Y+{%c _{bR޼Dqxh %L-@z$)J99llMU6jd~)M^w%H0K4(VF^g._V/LݓHm . Sl)k#D8tTQ/r͵ojݟ)ccC]|mSazL^;#B-2m`\;U 60im;eêXG PuX{[ |Jʝ}G8X,أ s2jRpr,BSZMlj-ڷh4]/_jX[Y88Q1Sqqap^oʴ -c-3\(qBCDžn'9 -cHEO tfg%G2#BˌMY1sý.q|g[,sYLJͅ«})z:Q"ӊ@nw}J -̣o-,zk&gZMy3ӌNe ;f N.+]907Ph'F?f 8Zxqf+"+` H5l> -kK^ A1S:RT/H?Tba H{ھbz*0*`"mYG ר@:JNDHӐ5ɾݼ/ l5h~Y.%h"Բmh"1[aH|8F.ﹴd.Cݎz"bV9A 3E4\Dh_Ǔ  V3ڕ#X9!,47N Ǚ3Vj.X9<J?˄r9U_ '$Kp4#W̢Bɍ̬{#iN ʒHquEeT%fYZ0 (ybőw>U.f^ANtٞϠ.Ӳd f,_DysʲgumfS]\$TsoWGʓG(μ/Oo~cMVl`mN,vtPV$ :h4 9@:2jn} י4w5݆m>qYBQ]59ax3|.rjeDDlٸ].>JI}cA=9"QkVU{US_~!.ַ°?ΒWF0eP?#F=7omR]:tgΊ.)0=S_ c|Pbw ^![p{3]&r8Pt  Dpáaė;J)֐~L"He<]7=-[j k-Xw]D:&3pM`pqlH1vEP} _{Vڵ$DaZa KqJDVQ@栚rp"qhxԤeL| [}v1dd HfR6^Xt t C.E9Z'eC>4tzZnE6tkaA|tgDq Fa+v)i,ENՖ^MJ)CE;%L̅&ucY"8[j,W~*k6t:=,iqf3˺ Fs * К#!h)d_36ExK/ 1BR+L>s'=b, WF0Rvj9{C7usZg Vmr+N)BZaJu4A3WJC0=*s&/Wc+Wp*2cstCU#1$Țт{Œa)[k8v(ID\/ԑԧ;[o:C}h>@ -̒ -OWt@2h.JY}XbF;m@z23ؚ )Oʤw%Y>#ҩy =ĒWkz 5Rfv{h8j2<=i!ㅖ -uCClً'q^}^?B~ &r8 -䴌8Ւ,5#:1L1~\`kc$WEHZ4gxzCӋݏve%+Γ -\\&]e}"Eg͑=djJy4i+ ^Ą'v*#=Wi$̖{4u>ђ֖,WZ[l䲒Hpߴ; ^p(*T}<yćϛ5{LGa*ү_*)YnF{uIg}_y+o?y9'~b|W% nh'%1828۝pEէ>6#(>ŷ$QPOg P)ˉx`xj)o9kou5}'3a=*OD<r1`3?C;>_ RzzB 3/X=`bQīf7L` h$ّ.{$յK5*Dw{cJDw*3ذʾ%bպ+?:0r PY:brY6ZhjyٺnHoyG-חB`@*s_'#[\X*pܺքh+><>ny7tB/P>ʑi#4S"5&XݹKEeHI UdTZ%K9i>[WI5AQ*YyaŊ졌UQC%Ǯc`L)SJiZx i,ԶCd[ؕ5fc)An9vs;1 x~d9jolJKH -7ݏ=dEdмctKIUZ3B'ri|Ͷ --2G^ǦԗBcVix}a`y&XSy]-dz̦.AZ%%[?kBʰvOI0}}u.͊0c7fmNfu J'!ܬ{ wfc#I]V$)khތ\+9ؕR8bJv]>Eޑ5| w1cJ7YK֋V5Y{_"%["sj쭹g߬v;Bx6M{|?~ozkyƎ~] -v@V8 -9tcꇠ:;(*웤?^CdE#˼* „Yh| BT*zAK3? XtCz'+d'0]v񀆞 a{뉤U<͊$'nG[s -I\hI훮CC0JZSxl'_RH SNh pkuڥL[g$&xʚ6y`o3Vv R@ꎥ(n+4c'g5xtb+2Y4UFeC]~Y_u^, D% _0π (_[]X[ƪ %/rJ1eGK"Q-&xv$ -(80SxLӼύqYXuѝ3*`WeNtRԱxur -*61$+d2iƉh$,,42mVI}烦ZjŏA/GopN\j#ui^E,g"9R6>'*h?-Ѣ^t!9l斻gTc훪{Qh҅R}Pp5ODr,N ; 8|TQflVNp⨮yj^;rqe8[i:/\;;ߋtU"hтT4c #vB*<W:q$B| 2t+%+_8ncDR$7[^φ,%+*%j( -~Y>i:BYqҚi~ld]:60`C;H%/2vfLwH$>uE-\]DbZ>0ZulU2[@E|IqCiװƁUFZ<בvG*60Q)Z2d0Pr_zM (6Lze)xf?2*zGJte:}obUOKN#2u%dt[ y^~yŕ Lǝf˷qO{x=qb zK{&Ƶ~3*Fpb)f3 -*ߥ#G0wgs[ml F @bZ3 0Bgd -t*g+>}ˆKDjx?5 Y" a#9='Oiĸ`KqH;1OHu@)Pgdk;csyipl&8li.VK Ov"(愪`ϋ9ⒶՁqpzZ&˘ۨ|<)I7|#0~HEFpws-Ri2ǮjwFReR_+[/nK@RjY /Cn'h9r/LlCh9/St*0bOl78ba;q=N?VnÝr/5Q zob$Jzg:+BJ]T>^Bu 8p2EFVi %0F=s%d uO((`M75ZpVP۱sI5q?vOJ跈dˢ#dZV~WW)X N,X2x|L3ب\-kk9TR{i+ ^ƴ$&wp.'Hz#IJ=3_pba!xKXxu{В -EmcwR VTt ߬[Z:zҪ+mupdh@+[9jd4G55geGI%XTG<'p|b7|}o@I-z6VNl :-rzT-W8~ѦJ,FZVyce&e1:A/b1UHMz6S̼hg*,cp6E|*M$#b[WyUufo%w;PXZZSc=4[/QpuThMyrfi6AdZ銡Our| -d (9,I JykM;NZrEYjQ b1󸵯~eg1 -*ɦ!K t%J]Q 'Z%*wՖR*oΜB!G4mfK+JVŦހl+L -αDWy-9EaƊ&~elGcƜሲ!Rm%( 33|wVΓ -bsLsv<7|] ]0p]ow~ \z$(7amZbRA+䏧D :-Q7{6y2k#촆&D-[yBTT}F-|o"b`gC%_,'Xrcm/U,UΪ,Er @2/P$܌.%G]uMJ4=:1MɁ0sҒqj7#`(Vm#6Fdfv2._TA/A 5T#$4\ax]Ei˼ct4Aqo>% -endstream endobj 23 0 obj <>stream -HlW;d9;FA{r7S^nNEO$EFP._L?`F`o -`{ -/^V0 +6/&w$m+vPs1!o_8+L;QogTXʊcNj!=dן?߰vfqZOa/1v>xo 5-IMuqX#$~|JBv2K3T2^q4~:~14D^R jC y:wZ]Ke)WDQM/lqgkUuTV>/$[ oƹ.]<"~CK&WF-ȀO6R=WKԅ%upԠS$00IDKZExc#e{ES\kR19t.Sy뮵ؐVQ}+r7l@3s{N.l-ҬeWz -ѻ"\q -"E&D`{'/̜PVr^.*$ Vzg*HBsnWNk@V&pqz y9VGJ{KɎ ?O{ LZB*ޙ)׹^ك-c^xh՞xwa7u$B:M-Pot:T;&ʡK}I5DO*DYɒ:b皌h^.}C N({j]g2Vx U64 T4#3&· <9s3h(zΩnOA'"# 4XTXD@6[v4 CɚMeatkqxF%Rt(o~`|DA?dX rD$ t GS9"[k-q1~ <}ˠ$|ȠD %1]H /|C- dPe0\!e0}`!1s`e K2-ܗ4^*.}`B-dU0*(9\*u.|8[t`n -^X2>*' -J -aͣSه -i[_\* -v~ -ƗMo+޴ D*l벖tw^FQC^ng OZNcMx:P=9s= mpn[sttFʣNt$l -UZяM$o8EW򈆦'o-VyBjx`qeB[ 16㠟G|#he88wdM ,;9̜ i^%\عޫ}"y<qGJDIlOa}zCn*wԼBWo`5Yxŵ<1]9ͩU6:+shi 0s#F^ ȑF?l C +OlNMb.çþ`ذ[ЌQܓnZ$"6gRgꥡ];zOWrxM@_ [<$7Cx2k8>TlpxG['HF2Js.^ܳ}TU?WUÌhۅ5bʟ突Ua. 81'`Ӡ5hiLٖ/P{o9рC\FeקXbC9'0sY5oe[s}e8>hA -qs56MJVt{đ)j܌SA>=,L$lѭBe[lwGPj٭^ U Axm hb1 ؙc,5ɢ'9dA[ }볤uǭG5_X?0Lg& ,ʮM)VH~6]2AOD"|Dԧz^YLoˣʗ%pF2$g GN#SuB2;Gmwk ͮ |}bCƷ37@_K g RM)+筠y(u,m`n0 DQxnd̸U$R$9-b#U|y#L!+yTB׻o$c`(@"|GMWd08kJu.%]9 0:S 3δknHfn,l)/:Z!){k\EAze4pî;:?N_=}SCg%+_NIЮZOߜ ;;s}@ ) -yz^+4Rg>#QZ}`Ck[^^o6L[ޠ2m.^;Wڭ1+3Ԝh8T|0mX "kŭ gi_BJ|chG+tщqrWbsdKFOR}BX8pTK (Uv6vqE {M69׉QHK6Di\{@ n~]4u ؿL^<;/7Vztؼ⭅ʣ: -#&Ц9zRC /7a8jAQoh|}_!m=*4Bw-Hss)So=JȻ}`CLl(Ka7AiV+tFbFbr%j7=:!"Z>5m7r{v,C^˯7=S.rK&Y%Ss1&UI3Hu2vU(F'3e@Ź "ZSPnBe6ݲs@"C3=h]cQR$- -j\p`.`&\!0b8Pggb? 5~4Ub1봼*.Jۘ^h8Taoj#n/} |meeOByMFӏIt !ɘLdɥ֒|/[KXW$ "EF"J)A1֒cJv#p06ȂP~+š1t#E{~๒^.7G9F;1s9@;nr^|y^{:=e%Ac>'#dĀKM01HQԈĸs#4(Y>A.N"X^ C)u -hCX rSC3Z!Nd] iaE`J&h`VV@ZbH$DڭT 4Inek➗r*;Rg$m_@ƹ \D F{R*O]w -AS^+6$#i9FFEm ]~3Ee}b'2h32 - A< nsa#*=j%Z>'̩i*5uHeOKdK9+X3~V܋G1sgbaOQRKa/J>zl=O#W2^KKVxʶ6R8*Fˀ7| -3?`V]RmbƠm -lZAE]cM!ªʔOcQ9%D]80;@WDܛmU$R9N=(>ؠ"V7HXη\ 8hɾ}!e{1«.R0-kZY7tR 2P1Hh/0Q Q_V~K됗} =Eoq衽PǞӏ ~.CKLz.wYu-,z>MPnʾ;Sf%8Nuω12V ؠ6s+AhBsm樳;Fmp;Nyp'1g61$W/6+h4 l?e=--QQ&E+<&ZB*x8Tj܃iy;&3fu,Q&(xp~tC곥e}NYG;yM;6jU|vd$~L&d~2PkiL?HW'0B \/D vCZP %XJ+d_gW?<(y[މzw3dMKB\dC_0Drtݠ=HQ)֌oU6`-ϽEv]"r;S@P[1n3&0&O"hrH.z WͦrUAju@/7 C!E8nRq z[d.ފh%[E)>__|_[ .qZ#1pJ0z zsXT'b/aP2Uo%PL^Hy0KS2 оw@[o3RJA(hZPqsۄص<oP %Jc)\TRi?j׮zEB%Er((ˇj&0|EdGb 'X߾)· -¢)W[iVqqsTi/aoÀ8}䚡k̑pWU3R9b7wefa=*M?\|ERRwXit;:KWg$ݣv[9.-)>K D2(yG"CUIVva'6]׀ 0IBҘObaG[FЪ+ -  a P!Baaet`04oe$F+lRYHs!~+$i^aX4jR92Z 6HZV^.D&LƱV؍N`9}. ڣ&M$ÈP'pޢiJMr@c% bFUr"-c𻺣\![3>V-x\ۇߎ"H Ye#6zE0طvwWxFw>mSO6m@l^כhߓOK<Z acl5;PZ<40kK}`0+O#ʶ[Ʊ-A g I]ύ#[b-gA-[x=֦fNk42?œ)Ts܀Q7V^lSz"Ǎ."yqJ WEmoE;fUs]^Y@xЧ+7j-QK_W6>nIkFK$Հ"#]"oWeը HxSS e<ڢlW\Q#ʳG#YnpGmNQ|.vKr?`'V+\F7qhtdvuEĮԋ]K]mii"5X!t.#%!T4y[E)Ib\c\ ;]^٪w[-\qtE.?c:6!sFF0|t\!ǡN薆eEeḺkYhCŮkt4hW7w ct8ƒo@3>}cG<=`{`PDHkqZ#%rsMuGCȅN=Ԇy-upGX -c:_isIKjĩw9vx왶*G}-FSN$xL O`5.4LcWQ\2z-2X+\#-+'0("cc{s@&vaJczJvW9jk9Rߣ&ϹcP{c:oBnzT0O2̕qe;_X~&S(Eɶ!TznX~ͱ;f!^#y=% \بaʟ)W&VL++cS^# 5AC!8N?I"c]zvz1l -V(}KKN=ׯ̷n:#O#ncDc/ (ȦүX 0GǷ7 _iLTI `P(#0!<{ބ#+L^FC9KC#M|)"c] -\u@YM{1åU i x0j}ܰRt+o 3\=/,SeslOC@*>t =VXj/vCw`!W4 -C en»dbx1, ͔U.+ -ʥ0d5ZD<"_dӽXx+ `P V46 -ho`9-6S"6&6N#T??艳X; -`9sD"9J-rTǶ4K*Vk.ez+ IHU:9ip+^gP6-@f=s0aHH4ps+}Cdvt_V+лKC쨑51;sBe]m /ɰQwAXeWU3Bֹlhhϵ*dct8 9{ر:XsW^_\x7IYU#VwO/6O,k2E@Z (Ȳ]3ghzqG'0潛e,^c~ed=ncۜ񠚲]}֯(/O3mWH[Q@Rw:K"e|r&fX;RIX;0^y9͝E`-AP|c C8Ȳ ncbNe]_bfal{_Vwuc'by"#D (CP0nI^5/&8>u(ZբdfٲV6tq8X5ɏA&}5 />*{E꺵,6^M?9Wսeq:TB}bsw|ӝnynN}mi&R٬)d -, -,4‘ojjXCeغk)R,X+VCޭ:P -0ACf'V_fL)e\>!6;s4 BE#n{jOKKӚ7$j M%Z'ؚS`ŒL24QVv#wf<g5$YŠ"t(m)䣻ף,YVQRvێZVԑ@.)bͦYT-Bm_dC_4q$g |À$*k I.3%3 {j -!]H w wM8h -11Bk-Zc—[ 2}۹%X P!hK|IMHߺ<:@͸ogܮCP[`{uC,]xSﴕ$:њdXYJ ؞]!|Bb+ъ񐼋+~l3l+*MovR1kFQj@fyC .Sl,9 -2 ^˨=\+(kz%rЄ U)PZ@UKw4(:Q+t?=ɾ.R,x$Qr_B@UNmuS?"U-B Rb0) \A XBDlK\(<. QrI@9kϑ=v߯]EbTGCṖ0PEzҵ]$\p4IơܿѪ)ԇj6Z ͤ.=?qjܤxaM"j\22UΡ] 9HQ]_",,ƾUs^!ǿ¸VFZ%ϑ2ެN3MRUu3̮c"rhx4̘)⮳p'jëPxlӲ7Ym0֮IdVє]BS Aō<`17SА:/ծ#ɍ}1O΀7vu|wX"2UYnǒE2CE5[ +%[Qf ̫'{FAb"P40&Q LZ8,ct)jY0$C!jȵ2䖟}>r9S_q}]ΐ1D7O?l_.'8i@"{W&Ia5!UMMb{de=m -Dbi~}믧"-0,E/ cŬkοq7|Tܱ?cǫ޿*$tU w϶ Qr{3C0Y?R ދ*&iʐnh6 iյfkxƪ(AGLg5h%lNUcǮ&>| FirKY?srgѾ7Wp=^ X3'656- )$  -WZI6_`?ct+)'/u +{QςZX*fiHwXkWSUtj[vx~!k/F|פGk^UFr%sU; X)h:PBf9JG 4Jәh·궇b'5ܹO!/'u_6= )`!7`㬊&.XK`ّ\fQ\bZ6Ԏ3V8Oj \pa:}Fb蝏Q#ȫ/Og3q}VKEy}kGw?g#( -v ^fE^dvz9 ƽpE]dNՃFF!!Kr?UϘ1N}KWkx/ɱS+]+e dž/˜zUe4]ah OըB;{ifhm9N}0fH9Zk=3_iS}zٕmn郉~FQ\Q qEs9+k6q2ndQ#V jtNU"ӄKLa||0rBDx͖ +]M`3rA]Q*ʸD;@6S{y>EX*²X /#UOWծ'iƙ&G[_6@KC<s;')+|y`1 HKE_|86qO#7 #͚F됰Y鐰xKV SNO h El}ז0}}>Q2[VjK00o+[²0ާ[%#auI^e%Շq,^T0SU0v,½g^S('!`s3c [8CgZ0.)`-`s;-`| RV)Er0NGIg0SiZs0]Js[N5N>0lb7}ho?c/C3)o&ЖvH##yâqn7Z]+1_c^NCEs]H8 #S6,ך X|2jW]P9`$ZJl -FX5{,ܡOΦx2G(q :rc\ PD'k>S:^KszL (\?cQOS_AFRQ:OX]v JYjnk~hוd$mJ%}碹fN -;%6 &h,:/>-z +Ëph5*PSl9'Gk#ja cj -X3*ݼ\^ō>P&p$Kl!-,Rcc!u zcy_vLߖyw&|Hv-dR$1 X<6a.#?L1-t‡׾8A~G do텾D|ݯzϖBf1( wIy`V- 2 #,;9 :cJd `./fRQӚ>5omad-vaSe Z&`浩4؋bJ\r1|qgu0JUXӿąSam+? =5i~!0oVhI1rS,V?k -ɖTUl >Զw+.Nya=-Iy -}60w.'+vrQ?!QkY^le=ARZ#ސ=U˨/`{RɣzpעS=G  -Rlby?[|Ly_}QQ-J,7҅PgEwKb*j ->Hdjg^H́p?5^w(prt-sma-!`.)腽i 4"0wp -{/.j%c,Pmn"rd~3,JLP"CQbսsa`3"{ӧ7X `ϭ(>o?c Gd|\bT9{{F^,"Ԓ5}%$|x_Q4h~HG4L X+iڵЬTaXͨ!Z$4~%eݪ -jeV /sIEsM -ef@kAR0JV ݥE $ߺrn9 -9agy1jK`z0Fv=:/#ZG& YV -v-d$Th+ ƷU%η[m;ebDªz%McqVMı$"f]&ȳn+\$YCHڈU#Y -5VIM>Ь1 pQGh42ɰR7d=^X@WZŌ  c^d*-$4V[ ςzԠìw=^@\qj6 pf)'AQ^N>NeݬDO]b,$FLG,aKK!&4}) wJJr_FHx]6sJ + 9X"r*cG*5< hvFsaUe͍Jr97ԋ!f#oEvjzQ @T9b k !5ik}w%޾̔stطڱmׅ֜}6[A -.eq>aVݗf{m)g8}T%EG}|&mK3f`[ԕ6AEK3t:Ѱ΄Ufr` C8q~fe\ cywjNj6z@U-L+n6-խ=͡{$2Ϗo,r#mluv -E搅QoīHE˒M)'}'_[[~4j0#_cڶOsG*5i5玠(gvoV$,4Y VH^dž7+Hl3:O1muI—-(vIɷޣ7.5TO8wFoR_p_{ @^#}F 0q#,cdžnG\Pdt._J(_i!cÆzMIJ/E0-\ [cϯ_{"W=.7$rܾ -B}q\χ胴<Ƌbv`a{:mMO |ޫJ8%'O}y`#X%g@cX6ZҞ!\hgl]\UK/lsVKocֿP~3VdֻWl{9R4?cӿ!3 ۟aa(b10uwS!4?#<3|_%W@VRc?'Y -5pꞑG4OݣkyL g|l FZ%=f$3yVFe)zU]RZ^=[ s:gx9{ =)yAXdsȹƛsגhI; hNpI;EqhI],EBGu9pܴUES FZU-]j) X3We0/ cxLL];Bc_]J:bvF-\V0@j`]c (= @Oz#(Hz26Nxp* ظ>D к{uXF7KiG< ca:\p su0EÊEW|O &ٲ[5 -<<<wP02q/S\9.L!rxU;9N=o(u4/o; -`(szU4NKVh| QUw!(tiHV?mM Dh+a, -Y' װbb,v:\z.3۝]ZdQnY[FyA!U7[ 6֖k޳L-*f#څȊlIpFO\G13ef*^ujNIKG XƒvvE$Α$Z ^7Pia"딌U~8d5bF҃i>skW*p7b.t᯷̦JKn es| sȼ |eI: CHNZAoHjyr\X'Vꔕ#I?*j &b&,Z:^@Ģv%і{u #giS.'z̯_aB. U ~)rGNgG*2NUQ9ꝓM[Σz{㛿E7c;Yk\HyeD/,|ON<<7U.Yan(pzu^^/Shy"W\] l#Cr ';jd߁9eg X5ov&cFXw2!:ANlNU܃(P%A<)iyBlA=K]@B?i+/y2D '`m,*x;.5`r׌6 , Mv?i\ѶpC`!]+kE iS cib.5ьif0bI'єϸGIFst/gr b<ܥ^ˑlA$j~Yg&؛TZגLFғsߐZfo 2d{2ЂtD-P[?{4KGzgV|> 1}TOzU:E'6 pս⪚g0K3L}pac6X>0L9݅Ayg*jBbx#mH-U<=W ~۰H/;R;f9jZW|' 9' .덽RwD2+xj\F~Ijj[H{;V7rK?SpǛp C[~ Am `ceMRjP bc@3Ow. -`47tVMIXZ Y|#_=E{bnʞ9|xSSFX 1VR=Zj! ByJ۹@MʻeT#YQMX7d}bì|vYbV,h.##汫Y1i1cմn ).*hlȨMt MDqM}y@w|dsp:]O ,leSA{Ne"X%ƽ,idNb^rQ0 \4Ϫh ^>J(Xb,G^4.7tzA?0Rf"0|kTo^ӆWXdGq#=dS(K._{|>̎ -s[K{R! -0[s"wTf?_T319XIioPrGn,l&'@EI-&i<ݓ3̈́Vz%6mS5 ѼBUI&[WbR =0*A=YG~7 FEMI@F+}`s"a0ƻDwmmkZlh|C(䮑>hy+窮;!JeH`%@H,Y 'R>#Ⱦ :%`jwπqf zD29O_)ڮ@f=S9@+b/@G]m0F!=Jj?'$q\9agMG`̸'=,'c lx /ЊzUBnv -Q6l9owZb0{t66 ȣ8|gkHR}E^#,X>3U5r)f>}~N6ƟܥCib+_N P+Mv|_mŋށ<:Uqwy\j^]uGu1|21O0cH1=5>?x .>stream -HWK #v []2 Ƿ/ɡ%?OOI뗄>'Ÿa ~$HM>F6K۰Iq @?ʃwݓXS\^NH^|lkDs:pޥbI>Cku1!4@Xȳgu%J?@Zڀ1Z4BT;cǣ#( O`"aE{jƲ:QxRsq*(O%?~я?㷿}߅e~"O21?^ OLy|b}Tg#潋:qEkV1|tUgJNf44&.16624*oPC2JH~c$ -`Oo$|k?9 ~H1rCT~"-F ^k1b~Ŭh5}6[Ypcu(swd.Y<'乄9l7[&8`N5BF =dVe7Qd -2gG>d\> Y7{h=} `4 |auYG< (Isٻ7*6X"*{c=1zv[H<+teZ].~^0.Ck/xh=kP[:=',[I`qgFa>~SHG4Py[$.jL9l .)s"@1\sV ovVW١q|W[["ız4 jq6sPyw%uK0& ;ή]c%CӾycgcc$"cYHeZ1LM`YQuIU 1px'kŨ98P)Ao;b~jM/C_HR=:"S1ו^5G^֤.CT-3.c]h-9]K鑚onuc. 1Mɣԛ| U7Npp6G nkuڙAܬ08-j,L}&[s"ڪ؊NYwTV[M^ň[9w}g^oy#\zi /;io|Au3bljRt ٚ*Rϳֵ~m7IrߑI¡3^ Hut)М!6Z4`!E&vș1,LJ>%E-JR,4{ptĝ9ය4e}a?^j"33KvwїZy.؝`_S!|36\37=PVJT  rL 92]ډ)^7Q< -P(flRxhUU- P5I)\P*@WWLF|Sõ"Y̽ӏ_M{b׳hRZrafv2?o2c$|7<QybK'TnJafE X -&$>:>8ATY5Mƨ'n5I`/P{ߞIY/izЧ9"؇zx.Nnu?cܪd=W ŋ,9*|c{=;MH*wy7ſy0沜U0J(`IzwҠm5ྊhM:]˷zFČǜ-61CZTNT3x.IMۛ}2uvp4li[ >)kub/Ӹ^䠽/uȷòa5Y^«aRvRl'M;g^M(A d7 _{]5zD1rmC.m&Eʤ43zF 1ɚ.vF] g" -Z6N]Xa/`m#'iOBmɇg?<|ӗs!H}x$]0&}Gl4jl8} #g^=ՉrX_|l/XwJ8jj⩒|MAs5pi%?XuBQUe:~'4fQԃ*Ҵ1%0R҃>ke"+q& 9}.1ɰcyS=L"~ -YJ$nyhgx3ɷ?ށ(o/<{`) ˴),=V/^T.'{;6讖HBvm`";eN*Yf~#]34qڰV-/dGb2"YG7 mleQw\;kG+Upcb}{Z-t+lbia1nw3|NfO&>ŭL]y[.wmERZ^+@ߞ**r@Y>pׅMי~ z?@ jg7IJ{?LSU.t7\Ty}$jܦЕPejd$/jx$`NGt8cq=OhY2ڻA5)ߕ:xثYFr >-eʽkdW.,{r,y b|FM|] t 91iDkɭY^LIJ[쇑[XܕcXΚֶRj pFRFw)lhږP-޺!n,C| N6~݉CEzAA=J̉{d>1`DHHgE[. A|SI^3{L=jkF%CC/c01t.Iv?[H6UsBң@kq6.Qx,Iзo^g$+{Ah?Ww6]cY(TY? m޿jF@ī+wup%<bMX=q\,>uVʈBٌCO[9pZGh~Og\[Lyc/]NVيU5^vY;lz.B1h2H!/$K9:|v pcZI"e%{?~E|azx#$H~LТY3W(|⺩Yk'Jdw,ΉayO ǫ_BҨ.1wl.Hz~bz,<ųTv*H"TQRrK -@vA_+wv+'%ˆAH8`75][?BPHh#߰ckv sZ3- ٍ= S ;[3d 7z(~UvTW݃. !.w\5CҮaߪz -YO, -ЗYF֯ìϕ.cÛXc=:Z;Y9ì0~[Fif|f¬6+~fq[el}en+~a)xҮ-hUqG+lUy,{mfl)Wܥ_ïxӨ^PEOwn,I_iWꖄv,INDoQiZXvGZ16ʮm&p+[kA J|'{9rϰI}/Ȥ[wە;c+-VaiGvݓTS9؞j{tBs5 - A[qxnH.8"A˛E%5'5ۄ:!cj?a}. ;2u]s,*cq.$'Ș$2M-,%t{rPHS3*, a1OkTrȲ٪^)H5lQs^x?Pw_cQ5V]s$a~ޒ=~i[(Dyuo7ō=l-a.S!5p%b\.r=vS;)8| .r$6t2~[; -+v%\ttY]wz(vܯWe CIְ*WچxSO[163',~8߼s;N]%~M4N}x)ШXSCVL?U-GîHQko}Z P2{vP@ģzҿ&/]b.]1s6LrfB}Y]{R \tZcTڴx(%~՚PKQ:")`C$gۭ ""kUGEė oz򌸰ԍׄbXm EVVo%iΧ$\%1"x֞0̹grD1=3j.O.Ae"ay^vFug_҄i yvh2Q+kX Sm;ּNZ]W={Fp1t/pvfI(-Ot[p>s.5h1mbK2R=hx ǫJZh#㲞 w.},Rr.ld.8?pNj,ATflyJ4()(asv-"9 a:zuya^} >'k&pWU:wzɾol"<wuuc:M[/49iumJ&v,% %sKeT:pV䳠)vK~ܫE !+~܌Wp]yztCXk'PT K#r/p{nH?hYy:Ģ2*gҁ+hWfmDBxMGGreI,Jh??z'_k} - LLgw-ϳL)UN j'?<'=sV_vjfV9U~*̎zLRr.\|<[nz\:o%`,WXY%^1ꝝtц(VS4ˋ'Cw(^XZ`oɬ΋_#QvUh 7?IR_ ީ"oT>ᦾ6uW=oPX5JqY.x Ysu8.|ŢfQ(ҝ2:hUxNBrZ˴/{hvnKtLtS^ii7"yM@T:.hqSoC|6zE:yԖn)+:L٢JY(( dADck\Ddôi5(se7IKSf >Vj(jc'_lI߸?X@x?m^*'P_^.7_ -ùqѰ0)73eX,I{Lm݇5+l['zSۆ 9?40]wb&-N:Nzl "1mI򤎴G~ Nk~^mGw bfMZcYk͠yГ)>>9eK8R 2#ejƌW5//zx92ɛF|N=R4jy?Ꝅ/)6qʼⷲ3 -2cOj׏\ӧ|Sij =" ,>]>}*|c6kl7Mڇq9p [I[OU9#waҌo4Ӆ:.6AM+d[DMSdq=bo>/vX1j+) #;`M!$hlT[^-5<ŵE 1|7`i`c1/~U࠷1<_V$%_ xG߱ Y6V-HMLrX74_|}WDPVD+*'CПFLǎƠgi{^tERx3j`%c܅EPj6wЇv#Rg=V>߈)I ԝ\ԷȦCO Ejv.1+b3݆LIiڵ,- -s3\.q\@_֮Oxj - -wUX`kU28EZa:@K~IyXעXGw+|ډ$+V:U\|6hCI$Gn b)֫ ~m8O)y) ׍dp᎝g(OWgX5Gほ;"OǗh5'DVuC9LzL;MhZXMgf;^ЃaWjÓY { L͟jSDMmSbPg_\sW?m6q&Ub}t8iYz{-@@.ExĐbK'V>Opl.ajp"gUd)k@sFyaw_w_XP9Q5o !eQZSW~F1tS.;iG+Ew&`WiY4Z[V -Z з8 ́n!*P$|[p~A\W(m/ر#v#_GGH0 'f6E?yH`w2U-FL$F#hB˙Eyno.[-SF4j|jN,Y$/UU4RWLWf 2%1o5Rm%eyK>ljQH^vQJЃGa!R]o)m t}I~=c(heEkRf9L,2P2ܹH~b(%;EeJ&^BΘLM2o"u|t ]:vu ~h\rko/A?6>?o;O#A -)xoj;#x_FfmEI :z]wd^i`) AN.KZxa\0J)|ϞFcOFDn FcѴDeX.\a}ۺbjFfٶ\FY`Q˔qBD 9 &]LeTUQsXnb@:kX WD{uxnh %U"#>fНM 8_l:xNYy\؊Fdua-ۀ-rxxơy;D'Xô*yԻ5XtJ`sHKiQQ۠V/ԧVVLfE[gT6xjࣶcQtp'FyxU.4&W,Bdmf6I zB+f96^Y5ȿxW kHo螳YKFcO@,e>O #Ʒ{t&P?Q~$6|PLMv)ѵh,G(CL!~M=3e` `KևމthYW\)sWmfTK0o(3CZyL`={gz*iYDU>k tVGEƤNگ\VauQz7Sc+*^T -_\E1cn(5UsKNhbV*kb]T UT vm)RV=rFǚChq,r6z -특d0t)&86#DFcK.U{TW#帚V)BU#s @?L1#"hxv+l$Å!el|_wÏ{,U_*bOA(гv&O#{PF$=LnXh^406!`GT zI H4 ZJF Bkk+" Q+6df5Jx tي-Ya5%85#s^9k nyF9$Сr N{jQ oSdZwZ%Io?e"l7 GP &q$k5^54H(o !%%DUSXʥmbGݨ.L 1~$4 #n[بe쇢VvƊ7B55߅!b2j9"vph:F:RK~*$7.TbHt$Vq"X b6aͱ]<D13Abąoh:)._$UT&!>,.0jG$aW#NӕmAQ{փ73͛x~ψ R?Qwۅ$jafjj9C$W/IJʼ:O7*\:!j CIjt. 04{ov؊ԏ_N[]t5;pԏE"{tn\Õ lktMF2uyu_$n s]czî2xP B񙁟/vƵ7;?`*^%`fY@*0J[:@..> -@S~&5xZs@#r$2 HZN%D -.j|` yxkUWsNkUtg P{&m`'e| ;%p]UYfU`ߝq2FdW4+Y ? ;X}89^L2YvxUi5@K6qJy+'["`ugldF) -r1uuӵϼ1I\I~ =}bqnLuƣBػ1,Xy0qRN\d5  ZtEB"8Xr.|b-SmIwLlh@c(ŏ5Ɂ,њ^J&5v Z6vQ( fEUHL0|1g̝%cHf]+Whm箰LmddIBpD$)mSQkPJ(!;?_^+/f5n@FUf@W)Q]͟AlN =XCgݑ巰Lca7۞S(>j"[ot9B%W`՞qIM}B - ߪ3D-.v/f [v_8^Fn vE>4Ÿ*{u@m]c)i7_j-,P5 _D/ Oa[T$ZVWh& {0sPvPWb6JcIY]!fܼ+THdal+K[/߿T-7VfgcF. N -*\y\]MEqQC%!#0ۅ ܔܳb5AfJ"/MO:ܒ`gmq"6ׯ-G sM)4PП-&6C<5)(%•tͷ1ef;dƺ24{̳kQJe-Qk([fcsuVqӯ~t=:SX(:<cej}Aڈ}0)!F^a$7Zy͵,n\7O{^Vx#x!'d4z#H=]hge}YYW<7 2> bGPv?+m7조2Z!Mz~ԎUlQ! :Zp7vI1 l/5AWFř;]ChZϬ>?$imeʒ -ء%VH (M{H?x[ZY^^{ZZs( - -@ J/up>=j$pg;7̼7+m&΂8Q/]֤ޞBr6g/]B% FȖEIWaT(9dJSb?'&n9-R}[DYxJ9Cҟ}ŵ3?-klfmUκT-Q6=*Yj9<D4unH,h{Zg;p̊͜CtYe|qnLS+Cӑqm/O% X񄹌/ڒ/JK=q~%te|s8bKqңtZ]:lX+N:N(YYc$vqpK:Μ{[# 08JqjsLd+|]Ůu<G:CX[+/_,Yq_oGu=ͶNK-YS\߹M׼f0a,߰yo8*tO,^#܅6UclXv[ms#X3cQoG{S=F=:?R(rC`I ;v'jb]U w]{xP^`1˱;-m'1\ĆFE`+2epţKt -3\eOġm0p~/[]w܈2f~L2enELzS Y;跌Do1ck4Y,V2`΢KMŸkTAm2fv gz+7E0mv +vt+(c{1[Fi ݏ+abzwe^8̡yu7G^+cL:l15-X)sI$q|^\u-E?ǀr2F x3[!*;Ep[a-mM߀GbOiQ\^BkY5jS=Wk/^ or:g_g -(/~7XS_j 9xc{&B|@ -_=mqTO:xM,}Į#,JBV .458ؤ+7tƠ7`g (Վ08Tc 1Xr:^}4y2n+cwT s/^^|.@t9'So=OC }+MT-OYwu)L&lWM1| XPHL2ȡX6ڒE=Gů_ -o3޽ߘQܱ%+GVt\5zl@&pw:Fj(cQR"$h6}c(!>F"B.?4SЄc̘UJddKC48NC,. X5%/*7 -h"^"^=V!OF -]q% {F(1{9_Rh<ԝE!#Hf<|\ss}ׅUa1+zF_4_C3%; ;3"^rDiZn|W!-c1p 7k/J^~_\$NUވ9oO7VܾKcOĬ߾ϐD0362훶}مp [\1=dg@I8~#YLs]/Elx)ؑȈ2/Q?iX"G~\.0ȧX큯kXfgG5n(Kly@d,ڼ%?A-$:?6pZ;@ 7'OE:b@?Xiv9YȻK{RҀƤvQo!zS_$甍RӖ@"U)uqK3 ɊQarY(6 o|8(9ϳz,2 N`HMEHW54` -kolQ(}>}zQFuNޫS\Ƕk5# ћl96Lus`ǘ7w{QM2=fcz!j:fT䦏|&BqcOB򨐭esjEх0yV(c 4zS2w|*!UVqB6Oe` ²SuUJz2fy5fa_:n/n-GE\$XLQ9'`Eȵ@y7ʣOXt`Bkc;ُ} .4JN#M:=SY}M2^&ڠ|$nkv/a٭x7?6鼣Q/zvqcO"OӾ&@p 1 ̥gt?]t :sK 4eyr ň*k`ry,;<&Zb{t*5h_)s1צkjnh[q# sY 7P_5v!/VsY|K9rq,!ᴘR4# 1I`hk))F:o In7ƖʘjXŦ![6-Y i[2kЄz@XIT]80`mE74pn>_Iu]jX,#zi_}ipPiI ) -axtTRgWϑܜ%x7ְ]j9UYʜJTM?Ş^c.m^C]-;u9̚{K{Y&57NA'8ˋx3:'0kׁ.c01U+@|:,FFbf΃DAZKe5!w:*O`;6 SdF=l#/t `mT^RW*:\-xXWEdT+>@\c⹴Hݮ*t)2FR"NS!}mD1HE`vZ dE8}hc[ZYxf+>KR)4NQ߿6lذ ;, ~Ĭi. h9kW Omb3XCXseJǢ47j;yFRzj!}t3QBhdoxafL*bC^b1X^9nq̨Nmq`YRt9V=@&<vD녰/tƘbC"N籵_EQF `aЩj=ËvGք%Ȅ3qxkEq -^^D_Fy7X?4T3͜oY80r0cy`\ElC[oG'P8|Z!v/bzԁXJPW|k;8s}oژ"}-UjQ ҿ xS\Vb^m=8]]{W%%[Z5Y f 0B^.߸lFXq\sV}h cO_>ut--{bG3.E:\3USng]k={׷|e`$ oV|:i:Lb}i`Kr-F"\$! ->xm'=g"sdړnrXtQeV]Xg^1,Ib 8?|ݟYcX_[ cEi9~eVN -DY0z%:ޘSh֌&Cm̋+Mt~aa;x/nzt,[+xHSM4|7(OR4J>z 4y1vjב$7cJ΀$ K+OS+ٽvŐUd21K B+\.;تgLDF_"Rս&N @Ő%s~.MWڹĈ63v]'k1Mxh~Xig|bK M0|0m>36[>t8ZFFwLry -,ӿ́v%-_'2wWAm%Q&N6kp+ J kPW$e*q!@>kBOuح._NF7 odlwnӭ)jj~5a5ktGjMlR/De U^6h3yT_cƁh,CL[njp -1~ᙙLa;i|! ]Y;$+tg?a֨yaĚDwlrGt±+`M\;Ր͑"&~뫳 (9#Auaׄ6j{3ҳiQןIbIv*7)si+ ‘oTȶFz0C'|zwsj쎍>o;T;p|KbXB%И%HϴGl]\ ulٴe.q1uUuqXYOx$Q_8%Dacccll͘X'+@b|X$'1qd sbkAVYi!4נCsw4,Zr+'cuw<%c m*F},l,Y~:ӹ%JFK_]{ecPcbe[P]>b'#dV@aI~FmԹI*Ϡ6VM%t%VƐr}ɳ3N",3H8~ȇI?b!g;&qKʕ),N84 1i}rXqc/#92/5y^=n^c>}N~qnrghsĐ^XL+1_B8Xơ-Qb4Y$Pܤ]:ӘJn@Y.}Խ2.pDZ7kZ UU 6iFXb- r`inYKe,X+9l%l[tY[' -_7sK] /خzAe.D^O -L*VWɛ51/f.>w# -iO6Z~ -d̏/6&ΛM:ƌN^uQs +ӠSEI$X0N|b0pm<@x?RJ2+!G@<`5<1"h k?@?lN^%:WWww9?h3Z9OHё2$Y@y\Ite]vOkwg<ػ{)D=jR},t+5CseH9@W;k6I) 6]I@ǯu% Mzj?I@W媑$ ;F+V`#NRGRGWjOxo^He4Ui%6Rnr[<&0om:vOˏ:{=ڞ/_ak;'Ϣj -]MU(tZ! Ez|gE1!լf׳ݽ9%$*}Kꤲʛ݆u 5Em}G)臽vS"Nkvu56&m֏|,c,y^"AYnԡ>Q/\Yǽan{M!ߗI'g,^Û9hMnq~uK`V69z }kkץ*k,.=Y B4aDD9J6͚l԰d)mVk]jkfz\`L|l78?-eK((Ob;r(v{LcU }Nxq9즘᭤S2NN͚%C2%k;gjYکζFgAq.qIU%5n靹,Yq#7#F:ɒ˴lPw/db ͅ?!aRs^Rj8qU ' fs tU s}+y[a|_PUogo*מk D%Z'L 3;;%YhueV< -2cu RqlG^[q-Ŏp%&t!j[9_GO%f||od?ފv>DR />>]:HP\P"aL؟}G= -endstream endobj 25 0 obj <>stream -HtW] ]5pcH\kBU9<Mn42k1_C|Ǻ&Fk0 u?bڟ}5}kYc~js$X7Veudz/V֗ac厶-W:Vf; 4)B&ujX !ҝ^7i5Drq*d>BA^CkQ*XRH9]N7Q-ſϴ+CJٰCV] ^GMu9? \zrk Ttd -CH"G#m;?hĘwYQ小O]od;Ѫt,?u~"Ymc3{teħCWp`|;#(?[><[~ZEBm_w }UZC3q*X}iY( ok:{?>@;/ `NA,ZfFcѴSث6m:VF,oM1GτHoj\@%YU;fȖCz[5t>Yј.iLxzh*~3/6\Mh3КxynZ'Dhݥ́ H2*h9vMejsk33"rx-\e ol9C;:Y闢ۣU2 -}-&F+$"(ftFvq  wnjL㨗Q?pG՜,r?8qz{g}Ej+4xN*=I s-Ӄ8ɞ9>"?j|3MW9-Hf|}SFHKÃXPE/lGPV&>$C#"UY4c`hs -=}ۤ2QܓT-fb=3}1jC[5 @>I VҌ_|oeȩ̈́nl$+6JßٰE9ף+w!/0|&[4V/Np?%ubT߇C穌??Ҋ͒-_䢈& z-ɐTvf]8fD18YzFx<]⒇zOC/owafq -TшKJ FZUZzB-U ! i 5zx4 vb1pΚAq2b>~i(73x1m E*\gfOB "k LMo!1an?)ᄷsrԊ,aߋKKއ.a">nVc)bI*-"% 6}/}@X MvP(lAhXnH@;b[}5:tI< ޸k#"n-5G4+%sRm~ ;ɉߨtk2}_LW42ZLr -~Qa~ϐi zrcy,YPyQW; n^dס2XF Oi;a!uK8@l!;^^JUksrAN&Yrs`U5  Ps .80%}55u'9-*&Ԕ JlPaaR+"?UMvƢlCVIFGvoKmRi1TÝ,޿;`u`@MgS= bmra5+fAM?.%, -K1jq` cl }?@xƟnFjU8c,q-͢-eJd-8*S)jp $d-[Pdm0ݿ+iyᐣ38P ClOSe Yܱ:]`p4f@X'Ta/7y\4"&*Q: kn@OȨE 8 = Av$A%o -OئSL`_=ɸ(iVTN@杊.#h_O}K ݻo3l3|>[znwtGO+v1-aImK7zsL% :Fv6ofndLemk$U~w$t==/O=_ϛӾ߮[WGm}/ƜdXTxV 4%Ƈً[>}2IF1֪q=Rx+ad8i -"c7™ 9^HV'2S*gu4BсY|WOl'm%T_kܗ/ln\YUp iUrvpF؜%fcF:D6-灭|3H7Ozji,r(0ܴUFOl^p;x 9sE苂qO JKV$x_E bUق,<1j0kRaXj{VX-.ef<3ހLg"ugs _8m{sJɐÐzlҏocO@ eII^$m7ߵSGI4{e~LgvkW`W~wzfMM+}6>"q&l/Lrav#oNˎ'eP5MMssmjQ*,.2?`z* W/%cDvjƓgz^%&KИ$4Ӹ֭|a\kE(ӔFzX39Vl2U@kB.qqhRn-s/DX;W(fix0, )jM׼~MaѭcYۖ k6Cis@' h䴵%3@tVfΨJ  -b'շߘd%6>]vng91͚|b)+te&`o?yU"M: wOD;‰#9;&+K[[Ing5OSh 463G(`%m -^sVʈ+5ݺ^k5b [XxTz^тr6m͘;X;d o5đYGR@.u0mh'?%ee4~9z%J9Wз$>dŐRQm3Lhzv->rQc3 -y;d$]ǹ;MC=*1L)MIZ4w_T41~hbfy@pd~>6&yfX,%{2e|x;YN*N7u idˁoS~M7k*79uIGei"G" -^D[mEͭM:ۯ5^[=N| adju灱f~ɇڸ?-rr^c%A'p/a{`LQȩ=c9gL0%/2֝^B4= X3,%IT|>c~a7bemVd`W>g swоNB$+\mY-Pxr31ny]Jr$7gaLɹ(P/27 4J QåaJ$xnvُ,X5TK 0k=t[h۳6VrV|Ŋ^g ,Q؊qcfK9eO9n)35uHnG#fYQxc7<ÖY4.~?97@sC~\,}m-56[>ނGpE#kP pR2eK឵VKy3v%+8p[) d`KSE~Gwp:$vyTd-#zJ0ӫPm:%;>Rq%wO6|PxꌔkYgFZx_TJe+nU(uNMU7A>֤545@YVvl=*;V8M7#JȝS/]a G+L{y+Is7#bi]lˆO8|:餯jOcxXt*5Jrq[6Nu̝Zd>EI۳6&n)p\|k^׆f:HJ;J}mY2%5J]+_Iʸj5N!EaxHU I VגXt72oWptavPJ@= 6 vZDb" -T9Z>5)]Vx -me[6I$tJP<?rR|~6Py`^*/o^fldֻz2W/L%cD'.K=l}{ .K4SxrҍY٠ `$4KUT_Ҹj Jcȸ)u|!P|0>t>]dY%a1=L\2l7e43aOV/#Z'Db #K6d*3.wZ2iӳz  ߵ),I]j&9ղ>Ԋygo3flj?~ui Eu <攂 -um[w|_}?mvcUXp[۽@%³,N}&6pڒzb*E M,?g!yOq`4>K{ qo 0F盠 q /˧TEpO3g5~>'j -nUZCrV[VQ|Ž@^k`n`%`.B4h2tUءؾx<ҡ 3଑XxY>fZWwRhcw46AITy8fZ8M:w/ yse(+gb YqE3wߌ)cLJn靦J<}ĠW,txYJc$p}PJ岭"6?jr+qx7*k %Vu"^|!uf@*h`2SCjg1٢jOg!N쵙˴!X7-̧?(M6;oUU{O- UCްq0U'V ޱ \Ós!֊7,o8m\܃@s^)$TY9gFY*uօ>HJX˛hXjX-$aYvgȰ龓R -ot_I8= J)g`ü1QsłB\Iy)F5",O=V1'@FfԛP|+W"+EPg*Lrmx j؅lc汐z'E?~Muo+Dv{S㕉݈u5p>{x->[˪Mx]Or'cКY+'ÎY r+)3n-$˲*e,8Jy0-VYPؘ9p+Q>&+iڜmg]Zb:p%{2L|CFc5J;03]0lg܃G- -i$#`הX -$yqoF[=|?,:۟O, -yoXG]=1ȺY!֐U@z.ڶL iCAkTt̑{a"1&:81}~/[cSkcXȲW9 ^!(>~*guV9r+b EA) \pլfAOΠ&tý*%Q]m-?048>r;IҊ) KR1]/e #o~pƃ-UxGhn@!ɦEWv] /ɈeR4o `f}sd?BA4_00&>uyxݭqC~a2 a u,=11c7Q:?_XuN)6吿Ũ}It8\# E><E G$~ vc$4pzhWitRVೣ"J^BkM~: Cf4G&]_ -ȪJlTgE ReCY'Ovo]8O W:uGXe$yc+1|651'5 SEyhj;$, _{Waũ/lq%-hLSI0yf5d*.QͪϽ٫>ХVCuc†ƀ@U&0o:tlG5xٜLHN'yWd~0!BQ -&”d=;ͷRCW:H$rAG* ,aTq6**^';}˓u/NWk^(C$Ln T`<`_=l;dhF7AaEs5;>1c;(,sNy T>C+_~Г+oGas_+e7X0ߑ Bg2)WHe3i$5.Ncʊ\Rjlx T,,M˟7k TXyA1Z(5l*agQؠuTS@'(o@r57ܴA HZ YWQw\JavhfoVʱFkK!KT[+Ĕ9iW^jd #VQHBP'v<|w{;-~JmYNj_ wh}`UQk:E-I>?@u_XbyH$uO9Fa,kpim7[;/ga/9Fo΁#glfʔ"3šESx?׃txTIſk/J@)b Olp3FasX_;rbu gɠ a|[Vݷ՗[ڡM%3A~\;=tZG6dحE@v5ZQA>'˚A Zt8ޖNR Wr&u)Q(xk꣫WcHrݟ ̊Ǵ_Zܨ\2nAnԤ#4Z({S59 \ -z%J7)0XDAzƈQN{G2~*ȏ?㍋1C9Aex 1iI*%{THAl(1[dUJd\ yh;e%[[z6H7_Y7~i/ھ4.$<^=9ΤhC*s/zF,kABX2X 8c3H'sDb \uvn@:F|.UGs6vx1Q&(F }ǥzcNjpT~m_{,^^A[ٝQ$ʺC?w)mT': ]IHנkye yg=h0Fg<9`g2{OF~~"2I(+; bցWY:?t'xRx -2,~^zk b*WƁ -w chk{3C@sHG{,4ڞ:_]V?ǼsR'k"LKpGM.HiSs+|БKaS`Zd*5@9^SH[_14/Xx~ᨸ;t(Rc;\,tbivi"ʤYNfJ-e[=db±LQIee;wjL;:gt -k?v4*t;G C}:T%rMV`U6f}K.!4qځN)Z+g1jF$ q|ݿ|ۮ>mc$LJ\/>{eY/Xqy)") z`9ŧ4{B7#ShkpF6t-+?_V0}B {qN"yPb fl׈cдes er K2ikX4x:,ޙ&K(ˇ!ĶGEHǦP<*h @|j݁a˝hJEJIikn'V]JL*_7\SEe ->ެhITϺEnMᔆ*L6x3ı+þd1z;enPM~n+mfQeU/MČ>X|Dy"Zgߋ.dI,`-/؋gَ܅͞}X!Ca7=e$n辟ǻn @Zա5w.Yu&U3ȣ<=yC(HQ&6Nexb[dp(Aˑ[b!Jj-ao66jY=% miБ$pea x+C0|\0m(2iUፄ&OQ 8|CMX"" S虭 畾@E{d뛭 A&ŘlM,4'C:]zձ㖅( B }vokdtY.v=!d1Tlc, 4&C^a{=v={ -Ye!I ]@fH!ʡJVoE*T _3Vu.Cǿ~Mg F*H\B_AEyMO3Pj~pn>`aUO}!P]c{L ^2I4BjK `X@6=@ BX3Ҷ'PQBJ\9klS@Ҏg]4Vt@|~KѾmii,4נQ^`6$oc0;Z/D#i3aP ]hR$H2I%ߒ<0h4#,P3k>2I@L>3}2jF3I' U,*8go(u8;3o0䅇卋4tZܘBVP?ԝt리C skIqΤ:UCKӉb+Bn,0-]1WK:ǖk;I@r1S% b -F lWA^rIAXgEwng\5+F4?\{V@STI5c ;fbl'I ͓VW%1f$ 7k[+$KdYn- ԝ[1DF$i ]\sI`$)Y\#K;9 @C)?" ٍ!kC:7HU'ɇ.;i}>X&_'OoMna,:ur}vamvq>+0hw2rk`Svz"E|Uq^02`LY :J fry@a㟞@R@ZX4R͟NLiɪ8s'6a`e96{ÕLO}bּcE'r(! VS΁~_9)8 -V/6QK~eՉ}Jăh6aO@`|H6]JlPT5ZѷZf zk3<}pHJU UݰEC4'#U87" j Tg},]H~PM}%k$ lN^r{vԺ&]Qƚ P1YWBeN5޹չW=`et7{r0}H+{9}T +8RHWbI ×%ux). ^.KҩASB;ͨ> -{j Q *m|xؕU^fvc谈Q,W׉vW ",B&`HkJeOj~vZQMI$!k*.ƞeͅY 0ƹ+Oe&Osǵdg*}ծ[n Ph' dJיUř9*Ya4Y54Ī:Wt7=e4zv咒=bj)_Dߔw - #/Z$@W&B48vgg\HY}ЗMCJw}=\u8!BUIh\7>SnlA eQ4˲I1{RBF9G>X 3`2bw)ExV_r(Ǽ.ZG`<P:ʩ?+ߠ6z{9d,Jn]OM7\|dгUF3S7"g&.Xj7eg?ڲn($vXdt`t]6^bZI[0v~;Vj3LPzF HA󼵲Q$`ـ(!\S)p,sJ>v:&5ױ7>b -VLSU^ک\)x>e IGI HxgHRIR%0wCȨi/#l Oj970s"}r~Rfd64.$-rp6ļְ]eK=ܱơԇ .(.L5L@[]Etnշ .ŝVȒ 揨;H(д h<xB:HedLvjbW +sK~X\zuX~E&xBBd( &ű4('N=5K|Wnd|-PFxBnYUW}jLX저Y;7P+h'Nq7f秃Bî%Z%^*-[ -_KlP$3YsAMуg~,5C$9D Ӧv׼ -T /."f 3-sqKٴyG8gP1U8K|)5CHNd~YP:~M)q\3 ,1\hhQ?3buD8qxr:/crdlU KVB"IrB€LeQ3E,ێ3zc ji[ ˪ͽ0 1ۗE ӸJ 0N?{3ѣIoӡ!C+TaQt!ۢV[%6'Cfϧ[q‰R]OC4)8kH+b#yvR#_Q)" +\UStO=C - ckU#1q -l]VΝ)NeWQJ^IR5"¿T6j%<|ICy/5_G&J`6dG0O0?n ۏ߼/yw7=Wk^6!K]`ƷX|J1n6̟c@%w"π\! |t>1$:W(Lbe`JMLs)$ 6e{wao0$8iF21 CQI%&ב=Gdkl/OPt<Į4ic?OY@`+b̢(' clY\V^ݗbk_p|ӽR*Sօ^yAmRB >[:nH`NnszܸGJgN hPlH.1OYAX Qwe 9HjoҎ^C+藷x }1{緘5rҟ5SA +-< -P6UmcbբzF=#xś>ԨydȕpŗV_岿&yEeV?-gѪh~ 8oG ah,Nt!8Vuf>#}%?TH5GQMpߋ&JZLz`,uZ c E@D&7E4wUab |s%cYZ+. YL4HҸp@~h*h;'guXSu 8 C.|mJנx3O.l D ?x{Mi{)(M6tj:5]E  -3;=Ndsȭfi%pc1VMe3yII 1TE2g֌ij;pY!J[18KwOmaKW~hSI|>KhoYN/W܌2X]< ]pڳ!,4I_T2'#*"l@k™X| SY[?6kQ71Hqh&6'ڴwV"h#:( P CލzUjpºiIs JfXBw7=7!2}eL.\#2N%_X/mG#{=SIWALWqeZg#pʝ|YLn.Yl/}VV7ng~T]I?Y#Ƕq`E#B@$cl?Xv`Y,2׵(:#Ecc/cd W$*Ogv^X{3k lZ}$_mFL==4d]rR ]1_->^/lFh 5&EWaQ\}za.3fuf$P.+퓒1w*'ّ8GEhV8'Q2)\2wiN saQ8u'~h= ufƫVBT ih'Ќuz{H^sf,ف[@Ѫ, 3Z'~)_m[䪋3z7`'{Ճ0e* 3F@]^'W6EO'#Mz6Mbs7=FX$<6RF=0'y?J><Ԃ*}Ep{8:@Hh"pxZsk{qpF%&hB\:zw͐c`qd"3uf:>Xi)Pix6 (i7m$/&ɴ\é)ҁQv6sɎVy8!l<kMLjCeԌFN ` 8| McFjF8 CETmu}vgG"dA2YñRQTe6y, K`Ab .'G -g'z|Q4$y^%fA.(ઝVPkeXdWVz͊qi^e<m84U_mv=oBY1hOr+>wh?O̼g,*,3D}Ie8k\ UI*TgB g&}/B86=МN״qJ=3Rr0V2[(IOdunǽ!1N@s\)1CdΤNd`7=}-u-cClUؔ3'0fBX٪FYc -d *YPYWJg3ɛc4\<$ vOxaW:$z! H1TD/LBDZO-/Z+)dȢ_^yXRRπ wK, Ύ~s1:B{PʵJPgOڋ# -4ֻWH~4y|-yAt_ -bvH?yKElef  0]^*b'}a&{II4ڣrb@dhZl̚ Jv]Yn?pHOzܛ-nw,u玓Fԃb.Wz]"qw^'O~*CbVJ{kjd_v/k.-?`g|Llxsrz$rl -% "5PN5+{`{̣+EO0r`6iu1 ֯>1Qx:P[an l\_;^!-'ؾ 0^hiy|Vċ&O#|,?a*^oh/ՕscAt"%}o~KUn^۪VN7ZǸkXe>Mx#EL6~xG_cbs⯴ -{9_}_kDO+rW_zq`}wH*ֻ\ooM#+7h5v+YPU*B"96AH .t G^VVck%?fն r5>Do#81g,4 Wxz1oQ::KpU[0w-7gEYR[:ΰ'yf\ &63ȩu|~SRY(Bؠ& M-ڊ%Vq{0߉}ㇾ(Z|ga`}c|VژYNd&HwWwxF -0*ybb$[A$f#RT(!dz߳ax(x$ׅE瓊UQK'`"4A裃3F" ^aTg^pW ĈRF\Y}h s3@"yɬH7[>XZ=SIdfYC.XɺS៚7t6Q(ts{!8߰RviUk"&2jеOY };XkZ -Nt5,\-A73l]]*ɺ-ЮTeu>51hKh*a4i=@m r;Kx#RVS>=jd1ݿ/"hK Xqیel#F8)OȤfk4aeJ6֞bʭyҤeO`Q"PyRN{0+9)i2%Y b(:+$1Y}pU'aLcFlG _4檙gW藾*d-u@Y@zY{ -z!Po%$M|hc]i FȧqYzh&IeDѮl{|#Tki:i"kgh̋X` "^RPGM,}SZxbLUڝĖDtbG׭w[Rށn)~o)b.[9C]g*Kʫ}jKO1&5G[㍍0ռ"כ6g]yEklc>#[G{l#x#\f^Q);{3;=N#͠ORytr z܀*&r'A{s3KH=K+)Χ.s6yܞFh 8Ǥ߿67NwWi -endstream endobj 26 0 obj <>stream -Htndd-$+]c81& FťE{2{||ȴ??~Ed%]~7a'kYN='>^N227)pVOc: #8ߏYe"1Fc)bU\v -*<02ʤi'l}M-ֲ&wd[״Zûmv-~6Sis0KW 1uUY%J=QMÑLjꕎk=P}hROn3ܿ.l58@ -(J|%U9 U,L}5 m5R+Ȩ0 -BVVj̵sfǷڽBCT{rp=g]ʭԼP|;,גu ()NpOjqSM?^3{ \@>J>R݀o=0]2MC{ !A\', (AHpu%V.G$$2TCi{V R*u<`x_elҺ9D[m ->eRyM?\-VY2;,W -#DF _ژK+OS, Yi% \ 95;*ϕq[HF˵֪-cI?*`j^Tׅ]eȳwT o5/W eC q" ՁI9:gb+ddh):G6I4ոVb̸Үj,VPҝX+o ztհ 賜3<2vו%J6:y#֢e:*mvL+VGឩw@ls[m.xexo_kTW9RMVK#7T2W&26Х+/&'?}DCڱٵ2r_J2  lo-;mJ]#0ޮy!ې#9:Xԭi"X.9Ҏ߽S4FntjD@V/ɾy~LdPUaE:~-vȢ2dM'Z/zK­杂GgXȘ|]{P՘_{ivc%hg9Ceоb`ѝ=s?_ oeL 63.:WmLC P%+@cFypj rsM(UR6kMT9zo'H#kڮlcEghm%N{}0pzpA[Ê/X8ʻe_-xR[(DPNëw ҊVN#JZKhNS<|ʞMyXHXv51b}Y@eT񉙥)Vmg.iYG$fᜮ5"gxZH^Wy}xa`/Xd+NuuFu<s&OYke>a&2 -XG9;PnRiBzJ"Ր^y?0}z<'~LCxBt~7%qjXbV$.lQm$qDoh*a׹0 -x,"lFCos2Dl"w :zg&KC5 kcݒ -h(!U;8=rJ*RܲXn&oiQ9E8U0!rOt0e'ԞUbg>@L Y]ZdDsgj6˚c}l7nTR ,wCrrhEP|r-K@¸an^tfj!=9XHYP,G@h:y$VA e Z2VHB }U=q֚d>8.`<5yvk5ǔ%oʵ4杕Fn4c" #<3lBߖxA.lfYUn%|Xi>3JQP  hլ)˗c}T3l.G[i*V}},*e:)J*띭"Ko÷eWhOyE`#(ZwwB 7Ϙpµw첽" EޱIE`&b[rW >=Vmfz_{dC -ji@Xڋn޲[h~ݱ31 :^w KۯoWn;~.:}aK[%M;2BܕS[ʹJqAU-h'-Jnj+F"mh#c֕o*1KZ~* 7麉Ν&mf )fdD.UѷihE力n}W,rSYh8i'uGea-?=nm+y~bl-AtGUx{$kNq1k"~zwv= %CYsMӽydLYﱮU7B_tlS H.+8R6cīAܭ(%6(yx0'tN66."zo;c%>"^ -Ƴ1~ 5pTM+1k&)9_{ØPu\S$>]8{%ht|oC g }wS<JN}&МL޳tK2Ω>kڈIjayrw_4lo ͹XT}jk98-Y4 RsIeVnEz[U6⦟>gm妑߱:o>Gm+y;$9퐘ǻT;\oӭT{,҃N/$. IIn,{~X`1b5D #7vg>C7,EdX>0padj07R퇤F9ŗCfk7ߥ-aTy/Rn8c35$kCͦ) rep1ɠ;XJuzYhuYc'e3J+Ph w\#M-8B.+9$j#.zv 6|ar@kՎV7P^Ǒ`7DOO%SvY̵5 sqgH>6uD&7DARŚ: -$شАyx5aQ(MO5 `Dص)䉯Dj+Fo@pH'?~VuYku)}VCvuY%e>V"Uj2n0(LJfd y(rqX:oy)M*[2VCt[mlt:FB75fZ!{2(yc ǫnUO21ÓEӪr37i)^9ZQbv(!@4!+0"Ԅ3n@^#Nj9bYZ%W7qn=B^bMc@VDOǠU|#UW#.EĜ\vu)y65oPD[?ė4 %W$~gs/@ -F@PjژMڃ ,A#w4VsڱqQ7QՔt"ykX\]E|" ӁF{kܻf! RvR/r]rl&>HM}|`-4=|V3XzԼHd1xܩ,S qG}xƍc.ep9<=1kmזm%pSS*7vTd(VTHl1}8S{;"O90$yavWT0'ZhYlF䱦7dr*kT!r@ J -HŎ$ESf1~ӠSŦ -86#86T2 Z YkLKkT{}ڤfﳊ2 ]Fì]4=ABYda J>}Բkf 7cOZ-48 })*"MZZo|wfg6vZe_awKl!Ճ|u-'\ә:N|#DuQAlb]p:ZRDPaև(wdX%6;y&jYUmF6 KZ*lDG6vC9o0-kY+:zkóTG9+W9%IJhV-p\#p(]JAog GB!QYM?cϠ wvV8i ̱+Xg/ q˰5Jn[+шfHDӫfv"mf\H{jL$7>n2^]kPn.Ů{̜j'p]<^h02siGyoԀZ87v5i_PF mt  ZVcѰ9@Ը8x.(9dg}壵yZmYתFMpdV!zV:2s/2˒J{J]c=l/T MܕXMRN+f -ELJ#2(!b -ɶzc hK||Ivaܧ({Ƚ560SS6 'A:L4:!)is,"գi޵ -.!]%lŦ^c@$7ЈݘO<}}`gFX˰Nص7S ve},bERh鉹{l>݃ĭ@-653c'OmF={Pp^b;mZoMBr7 6l9nRrg#SqEo9`&=1M>`srb)Ai!ŅJ5F"#0#h,"i`P@(9JL!HռT\-6@])GϘ5+x9PBf|hiDL=RLF/2smcA^KLB-vcr-UW[ZlV_><APy[z L]Edb*jup =/L66yY&u!S3jj:s0!ȜKUx({QƎvh3Ǣl4`\|q|2Q=;C K $quU5= x,2em =l 62VNR Hp-@gL~L`438X@4OKIK`^1ȾɾjE@-YHx+TK nrbrd[Zݦ -iN -V+~xW TrLzׅ?If<'w&u/m PL: -hȅ&iM &/sSDR7W;ik])|硖SU{=#" -`TD+y1B#M;PNjڇ$)(j :yQ?xv G O!z3# QO(~}QKolw$r+,5y _ y9G~]viܡ4kw%BCc~4Y<4*ni -`LJW94H7)Crhu=xL]`<]Fd`W.7ء3*O)@2,̛wI"ڤ -+z <ϒ-tU`$t0ؙuL*rv^O5O|'}/ Kf{)Y*nI֚ub7Q˰jUs)i5̞[Do(/&j0҈Md9!/X[3#d$=0EIm˰BPl -L\ 'K⸸HuFZ$YuVzOEY5Pb>IK!{b׆Fk˥F`eX(pa [Pl,DN$;-t_ on3¿t ͪ6xPڴ;}66r@ްTW,L>w˳.Nca^/=Z:u-/'nL ϑF3:cm"POZ@ PFhmȖ2kH+:eV>K BtwΑJiO"77XVZatL[|'G<JҴy{9t,^ rvGV6J GF|cEL (ɘQCw7E ~+,LqvVP޼ᶜ6F&.LlDd@>=ۨ2 s_ywi^Xd{Qi%33#d,^0u8[>Z5^XgI@_Aָj7 9IX-2K0(8sf\f1K2mtěi*(8H4R+&k|MWbP =ޥ*V`%+̉PyZZEJ1ffzK+4EF9ld ; g,b\ bWu,D3|'v;^ ngԤ_cfX\vt!+lUx,q0]@~ɐFmm^9]AXeCҪVwzUNgChUSB,Z/xr>ށ mrlt%5nJ#ɫ rz 7/fS3D@ZAڱhg ,&fЀ-RQb"I#R[٫$e=;<~ŽRxS]?VRĝ񽤌JRoT6E|BKZqtZ͇[63m6*HJ -asiЧUG=6r G5YsPB5&H`ۜ7702VԋL:R@L/];CDϥk=ɹq2Q+e*^U;P,w*ҋn &y"Wf(P;UE5UˢO=:U m=SƮQ/cK}+jYOI -C'&7SN)# - b$K{!7Q=ЕvIl:$]R|@,ix @h79y-{Z_;1*Wfo첽" m%V~,I+1 vĖZe[&Yh5ҥtlCEHX%R﨎OlOMX~_ Xz;ߋ[ J,;rG]/'ueotVXx!qc"'y8͗PM͉RٙBS`y"LWt {ҊabFmf݉(t fmUVM1W ~ Gg'N˿5f:^1`>90[Zw{𻱣!* v ~b[0nqAr-LfP1X1T1!`M&2+Z;[]-kCbݚs7 z듘Bg6MILֻBg\Ecoq(ZSZAe[a>uTP徽Z>`%4(mmlcpj<#އ.qda&w B/et<9 xcĴox}fs '2L"c0Ȋ0{xv3k*S~9XHLiMv:Tt]) -nDxRbȼغȭjM!7>=ٸ]y~y x,rn9U -<Ž5/bPvA%\Q,fNU -J`1sib`)rs=ij׃PsփjOwЪ*i.#xj?C7PpXtWe xբZ OngF,wI>|ZPO0W#֬=,8]?{]/wg}?[ DP?:- t-@=O>NןƪO@np]_/0m?Q)6e,2!0 `P_|B=䷵ -XƬPb@ j%G>Ŭ6ʯBVS -,` -aq<+&B|)Қr80g*'"cPkqàpgㅘ -愧;ǯؽ-{-o j~a -,2,U9U2!9/ ]c3o͜;m,gb:+;·r Dy[/KlƦΊ!eH8⹨1Mk@,ь Qm2bؽE4\:lV-yQwL DʝDsVr9(ڃj>g| @̋5&'E SoA`Z7VZ[gMEtm*UZ3/Xpfn;+߯6l[|`@XSCQm daJ"vCc胞p/^n5!&(2¬2(Z;^DZKܓQOL`E9#6\F`&5@z!0\UFpx!=n;m-DЩa4_\k't8zHڠ+uF%Zv|v%tw;.f 4QLY'%:ehTi!,,yHW*pcZt 2 \CcF"%+z:!66 hبו\y<Ť^LJXM\}Mqs/++zMx7Nm1=@MԦ6{q v~ו~ⷫڣfJp֚h+ epNưV6'f먛D6=_`2R#1}H.B8:9f ˓%?X39rZ{]h-1j-tdk2sWHK*%Jf2(_{zՁҾT8p9`ц6Vq7H=ddt0dHk x-kpo Us-Y28=.K{."i.='}L}'ݏըQ{']ͩ }q3IDZT^ڝg?Eh{5ү18H.S\  @ϘYC*M0n6iIҐ4dMjؙ,eEl9 -bYڏomܔ$ - @ou?HNߪ5n=M3Tȡْ* 9^Q,FӞf=لH؃.f_b 0ljkWW#^mQ⠣il2tP[m@yi乨Dq$w*&I8(*9=ce=|nj+?NVF[CΕ~%KX]֖!/ZTܟ@fPy1l56BbX}\ҏ'ռ(QD`6i1&FGqu^N#Y !=,*Sڢ -vY"x5k{ y40l#OKm\GB(pȴXC'񥯺i -k&"S{lHy ~^L~$MXĵ`!u^ٶl~gA[Zʒq'+}q}%K Su2kܲvk vP2JEh`0?02ms@$/-߿"_/)rXȯ0ĺ:C,s%E.H/; C,EC9+)ʥ!n|O2Ɗ^l!2^kaU*;.#`0*i~Xjgda -TT9y=^Sأ|pZX9 p-O8xrF7Po[7E|FZd/ivC6ZYj: bG5}"!@*&~*ڶ}HuAf -Ra%{xeF4$ZC*%HIّ4>BHNbWwYkte03kiսe1XlYy-hFtWMIu@xЎSLvzʪ}_x+Krp#d ,iN}.=j?AըpxP 9%7'pfwFYPY!$R_u*֏\-/ZdLg;&'~IY)Pj{Xr@ A=iMI댠&/` ;Yyae{ - c%[@NUԄ.Zh_ ǷޚX2GQK[Nj?Qz [b-^^q)VO<0GwAٚM34A"2neQ} z"IȘܓ{tatDaŬRIQ6Lـ ,(z4x66}f^1dXd)HUE@ӈCGqkKrIvX%HŠ&uo瑩 %|lTqJԒ]QmaTbƍ.AZy{y;,UﰣK`OZoS(˖+1f\tX& P@!u -KI.9J k E]2Xk P ҷ)-M jڶ{)uAŦaf[?nHxfΨhjS9YW352 |9:ԹKT֧HzdaUR`eԺ\ q3Pac\Xh&[}[l-֡Lb˧:a{%=vrپbGs~}YGƕW>5+b?skUx(AmŐM9z4_*WRL}b[8bLoMΣG+_G_V-h,1d AN0c<86V4"0 5S+JNQGF867R -Xy&&NVܦU;iO0ý2l -F.9FCs#ql ;R0Zejp1 jKªT AvH*Fҟ1kLu%0c̏> -Ֆ0n՟j92".s4v!3DW\O\f̳/QMWc;:^㱕{EVu -"G^"~dԘ.{׭S4u ;koT.מ -{Kr;ds?XedƝMr?E] -X\ -Pzl׀GPLа2xKnY.xB-0MDi(@bK$8' ~R Eo=i5;mԶd-Z53#& 5{.ۧ SU_رcAyu C-f x֬A+q{v5E%0CрQM)@ sw -Z"(su:0Npх%FX=F - Ůqji(slsLgmc'vd9MǢ901%o,58GuTn'k5A䤡5B`\@N -kĤ'WY$c"jifռե* lwRO}Y`F]Eb @v0,wn#cg+%F@f޻@zmfYV3lm;[kfo׺4QjVVcVf j򱰘-ԘYb -ւZKQ"X==mXkmcGKvWo_~ߟ?zHL4JGPLn%85??TLDU/ԜuMM1 Ďn Y& -~LԁAVG9~'X8+%&ܝ] b:`3\W+ۡ.ɭ-6%'&NǀFzo6 (UFX,'jC*Ao}.$Ν, E o{2$7eQ*귶=LbLle>ޔƱ޻G{ZհBZ /0}nxiZ5sߌ Ձ:0`ؒ|xX4b\HݬǥJajJzFp^5{ՖdziM)Jc#Z$4Ț9#m~Àڣ 8Skެ|xMuRܽ,;},榠SݳI UŹgM6l J\N7+ex|1L^*캄i%r¶Q\ɒ?)9v"dm#OZSdu;3 2_nTRt/51ޙ ~V!;sW4$Ut:YRG@ ._2[|G[2rQ- 0#dOcMfڦA,HG] V4{c@QI%;MY -)..Րfov6\vЄd4s+`5q#PL;<ެkTgPjΣpQMK[0ǝgBȳąuvwnH^H 8Ua^QPZ&'l-0֝"YmɱwfIXTVa1< 8yWX&S/Ü(*{-- Ir[XmLYLZ9I#v+QܹH9kdieJRЍ&L# -ն絤q.isM{~1I>?Ff{׭4%:vAHKc4#} C)E}2yV\[<0cPYL#g=g\y[K%?Ir@m4A8 0HBE'IhX-1 i1yt4J:ozWqҘO*&@<:K]51~@r3^ϴƜPbRxJMS{zrEp -nĘF/qeE#]L@qѠ (ָ25`uj59B4F"T߽㹞v3E 4Vvm-X%zػVoDo>4``#f ;H+L!0X?lQ=7;PJ4ٗQ¾iJHpPWX5*x{ȬC uB{ {›gP{RK/fJp(pa٥Arg˂$s Ptk.+SƳ -p3c ݬirئ-ak##" }T<*ƾSgj^+մ )(F[]?lJi"pNr(:Al$63fLzp4[I`b'#Grw$_G)$e!jj+j*`sCj>,v.SǢ|]cA ?q(gV(Rڸ"H3E휊 -.~^--8;S:Y В -%JKw MJcXaB7dcm)og БE^<6G N,wiHk g80+SјoG,mZnz"ȎC=U{|?)+@ M_nfd ҒV~ek9'kޔ}kfSVf3, 2=٭M;||n0#+#_|~$K=ϒ;lw ]ŵޟЀp`!8LxfE0y: kl:6_B^Hen8V"EUY5|K];z@넮IdXw һC+w ߱[=U!hEقJ\ Pȃn0*'fDG/Eg:yPHl#eb%\Ka |el@B |8wMm (ՕÁZCeUa} -3F9n;ux N_za/, -' qlF¬O1jX>cю]-<7"~Aٸ.QslFs[gN+YHYuTrkhN0mг -ᕨ&vgPyk%gElР%( ~Ai>>b0hR߸(B 7.BCo4KnZ'1Yl|8g1_dE.ubG?co<E}.˹cT"XGИFp^$g fsh:cO"A͎qeY9)O` @3^ySCi0#<2sP wcȓTVd<6,B}rrue7g:>RHkD,=tc |gU5ҧF2ЭƁ4@Eimߗp fjV (nv!V]fUsXf),"[3 \3C\6sb25, D]zH6 w/BR&k֕.%^ WYݣSGi*b_1%5B*o 1ylbוT@E Q*q/(*^࿣t{`,*iOn f]XyՓ*  ۪&BE+ zK ;Wc3{8Tc4VbWթ R݈5odQ=t8 >ZYYOS %"$U֦*k1@T\cIʫQ\c`aSQ;}K7-\vOKS>zg )8T9? {4X~u:ϢxrU~}GPOT` sf̢#l72@$JC, BM#&G~ZgF3i!)zqMW^7Mج7%~wʪ>~Џjgk?| g {H"h1H'!H;@dcP7Ww$K4l5+OJ &kٺ|1&tZu:۠^-(j ""ּQ -3C4'5KM -ٚi=N5CSK'Ț:/q̑e~TBn }URLr0}(@Ҡ4搏gJ tنSe AdÔ,FJIH -ޒ08d4&@Gnu -iAZ3?|E81Tfzb:0vŋ(vAW Njȡ<V]9s@j莔a7;Oђ^7^U?8UDʯ!YDi؂C]3+zSSYY)n6X-sdNHٔeY=o_Hvpr;eGfeS`D3~l MN PÅmR(p\_dQk݈Ac`-~{oB emE7 []Q8[zQ4dQ)9g@ KȌ!Zڿ`dng|[*.*e>mgxeA(,j _a՝o:>stream -HtW v0(C| 'B69X"I'm/x -?D|2墏DtBXA![p?cfB -_ؙ)i.R6_{{=VBxA" h8j\lޏoy4q7eX }qV8NPnd>㔈ujv;ҩm#cc[XBD`Eb/2RchZu1DzͅDh/FzOH6|C#;XW!2c@kwu7h'8tyu8L1Y<pWIDj$\tf=0 $ޱoߝVB: -y.}aZ4prPS|@E Su(4d -qDYoX" Q uɀA&LJ^qDݔF2iOjCT>ONd}vIdXDE?} GD  -Vطyv<}s3yJGΡqt/0JP@)1_L]$[y[w0aЅi+n5=l-kj>}aK;t?v97o|1hvcuG_Y?Ir=-|C? |u<ڥiEQ%FCť:1- ڝHvjZ_Nmn .m' -`T"l05D+t2ԬG|?QsBi}FY6lfל±0÷ *y䗂 ǐ NNmk̖wHb9%"'#3zMz͔>Qcn>R!0s6 몗34Y LϞ{eaU}SgsjsFbpnʼnyKoFSR2S:OFv3sՄ狊W6`Cp$6?"GʈGo|v\C - UM6Ls@\mܲ_.|;)vAkp1"Fi$׮Fq+|pVΕ%2 |b2yWwFߑf9vهbҤ1m?\ - 1c"/ЗiXr@!|# >ڮ͵z"]I۩H\vn=V@hUdbN7͂0w((>k@Yf6%_(v T扨qd{RNxB9ڐ|_gNbhuNm;☤K=(XvDW!6#ix (JE1)ɜ}j| cԦ7w5ؼ1+TLlhዛ>R03"BPU|1Hhx W({A>ם{/U9P]Pc<`Lf=p);(ga.G7,Cߝ6ujvՂrp1UQcr!˛6=v -8U^HNS7;}~@n9GC7Ѓ+օx - B桪A]#]xW:t22DkZ)[C\HݡifbȢDA|):C/voGg.3Fdxb')^`P:_x9LH,O[ql^#̝@hٴk }jCݹ:.&,@a4*Z؍e[/%PC*O:];deMr#Ѯ8l6;$k3Emdb0;01~s:sW՛Yװ/}4f̓ E`1ܹT$zغ:6X.|nH>>t^ σ,~@#|+⦳H_%*0!JƓSe+Z8#UeArҸvl/ojƁ}-f!zvk UIl!9y\{ :ág݁}5(W(BG$]uC1`jj,ʩ&&9j%jnbjlz!/(.LNLЮw; -!%5>JP}PbCنSKJؐBluHJCn}.UƔx:%NVF |{[=*} gDLNw69o;Ǵekv7d ]͙IPFLy)f#xqO= l8]FAYl&X-b^ jeҍHa5g'/f%gc|3BCP}:K^+<0Ws!N@~ >y10KX:)qD0Sç屖 KΊ1Q_r)gZqlhU^UV <ŝ =ikN*owP~]o=-B%|9Լ#.)tf)^I@t)%dG>RVpoFkH%ٷXe{[92}9tF C0y kS"9B1 qWiXus7]6ŊxC1 *vVqX=‚(sTBn/-.#MR EϐVI!& "ZI䋰$)gZQ4zuJOE9ܐ mAR iYfK˔2Ҷ9۱,>(Ym&wh -B^KtIDq j֊,^B3\& !uhUȥƩ5%!ɽs b"JFb : rG{5a8ǤpРT4u] ?AHrAiYiJ<ぬV֩ y#?!sD+`p7[~l hLM8k1u5e5I j}nͼux"o &7!A/v7!K1z_)Jt16Jo;#C'xv]_)%o``[/YPc}!.G#mh~?P\7!d,LHDMoC|oQ.s|ΤQG9_H/ђ,QU3  GtwUG\Lur6;F#mx< 9`腄8JdjOՑkcYҋP@Z-@6bw/OD5PAzP C녡-R'Wݔ"-/@T7)UTWb)j!+ $IL >7\"r i;¢6r5NHN׫|! {2BFHrgǥWT*|a*NJh4VA``b% CFoE- -VP -e#0LH{byiuCUߣ/܈fo`,1N?!bze.TpUMm%K%2YR7W8 d;XOqQ vORU: Ldl#%@*)R3`s[`|;|;JYۻ9?zA01<Y̱~>@˥UHϯ|&֜QD~|hFJJ@)J&nCt߬ylV'Zd&U3mSĩT@o!`1ơ@jظs$2}^*:^&9 H{̻d ^0Su=0D#ˆze盭?3TfDt2%rXf Ck5MUWQ 1a|@$ަ+؂Rtxѥ ,Yvp{n9@d6~뎦Sl-tZZ0Ǒ`A4Ԓe&7AA=xacrCb{l{]}6fsf٫:8q?VQȆVNHɒE*gK'"t6mjŮ"T_+;[|W)Ar`vy>(PgU2_Y5"OdA^D]*k\j&}}QXUs:нEp FWAЌ V6F>ֳHtc|y%.veحY$ l۬n|vP,Ey^38uNBV-,Kܤۦ,ݓ;Ȗ^sr@QZ+gUxlQ3y,9{p7'~V׺!|ib2/9^B|U3y} gbO_ -g߿n5iN.o%;(R{ipU",*gn|bmf1؛QYUe[v҂ydr?Z: D{M*Hˏ!Sken;;BFZrs -$Gĉ#4|JbHfszTW4}tPFୄÈ5ƤݤUѰ"V6?~)+ -j7|zܖSxF+s8AKvmX_Rc|!,(;)W!N=OfZ6 #&yY} iWM`CʦWcTq!9:y+Jf\B ^::-/I2oazkGx${|_,hmo4bQ]@?tH@g2MN8S`o^cyF{Y#MڀK(נ؅R PCV\&r9(!SvmVk^kjSЈ%E?7;֮OK/} Ct -tO|[fpb= `=wZ!1K.#j$Cj!F bWF x!iB#+8il;j -V a@[~QNU3NTWMwz5[δzkC,Z \Qi@ŒBJMY_U*ZOZ|̃+;!}.:fE nGVC~T<*oR=`lq%2>ok?o{הu\W 2?z/0}0@1b;l\^PG8_bݎ'"p˙vj&UZH#̮Bbvv"2:ܩdנ4m*.2+v$ -@2Ǻ/WB%47':[jlID)|h+p|^d6670Mu촍O?6⃮E0bƖ~MF-C3euh]޷E1NO:ذtƭ$ݱM6/~kc+aBow+5HƥfNLƈT[K'T^[B9V)[J"(ŻƳ!kn!Q%_.") K͞Q} ٌ -ʣ?y/RmQN آ5|6QZ41=0^Z7Jwn[z|3TGDa<b|Iy|ۊ*l9jTV (7'`Ua[@-0uQݛ_鱚X`;m](O}Ef\6J]`D_}YH;/j\kꅟ˛R}s ~- T<;>.CTiJP+|h -~=!R8$Lesr.yE8ڊMZxbBg=mNw+[X bYO\Z3Zvr~`HJ>^!Q,~_&BIfQ骚L52}|P [9 ;:er le -FpkY`eZ}rݦ3`{BďC׬Dȡ, `SDu^-sU00DR1DՊ]RdNRϊӱ X^UO26/Uo M2ً`r6CU*P|t{?^.~AiArA}NijwM$#M -%jξ^:ɩgY,$Ո2N7VynNKj;j4qvŎХDZ+j.; >qKIJlsCsRRt'vQ! 2V+/*}=q]ZlԲN -82*TT+(QWs^>, *8muUAkV&]}U`xö3f`+割.bj٘+2^<{97J}r6|AvqP%~iDMA$.R?7&kF"&$=5*NuRHxtDo^i4N "aqO>Ϣ4t j׿o0}n4G(Г-^=3t#z+(g$x,'N_p}+#N jOL h V -̮7v͵{?mDBD׾hEM]*~D1bêC} \x0vh2kqÈu̓Gl6-NAlmI>#ba%Cw(kٜD4ʗicTNEnw>;r -ZdoD`lI-%$j5͈FWLтEafG^+D>}gk'P B d6ۦ`'%,森]lEʆ;Uߡ;a`IwLq@fo:0uthe^Ҥh*oF ?ծkn]&ͅ(R@ .qϐCi=1 cI$S` dt50S~bzK>Y?3}:2{mʵ.l9TQ z$ L^N qW)5*\H#tYh* :,L>n&L[* y&"=w?m: Gg4HBVUطrjɜ>~l/$,2KJ˝#&HQ M5̯UhƯL=ufCc -ƮnNsW -E%$ ;thl, ~UJP ek:q"+z!C]PdE85qPJj7ѓ[j[Luۼ;)ǽqV~H/ EB`3lPݽ:T>E 9xc?xmNߜ(=ħ];Q- loPc{o~矛խї8b_n!ugD1$hkTVF>-O Ms&ubJ&7|~xn#xːnxJ^n$u4nd.CܛXt FO.%*V`˥anmQ7.]>[?7he2T]H3Kh+HcKECœ=/WeN!{M>s.Tmٰx?ǵ'/:Fϑу_px&DzT_&2y5pTJ<cH^2D;lf. 5racd#Di0b܅`ƅlB@9}[efBOrJ2g/ UWASl 4gIgI}Gl>IKRYzd6N 2-#toLrA&χ#ag#Nb{E@>Ij{!hKaXDꖴ$<4ut-i%- -d;V, ; - lpa%dTh潯}tWɕϹ訩w1<ݽx2Av1Z:RUzSlW*H޸zdKO݌=)@ 8.3Ԣٖlit'fZD״nk9uϐ}Rw>.( -,:3u:mei92[#2n߾'c4ob3F1C -)I6$E<77=*f -#AX\9l=sQBHwoT p6T=Bz:yV;F#3$~ߝv=.QAy[Ns+A RD)ˡ\IC΍DZ`\Y,3I>lR .nQK~rދ~!}0cn0lm5/di+k+kK_jf? bOHXMCHoDـx61>g2g=z6ۃ<rـ`(1 q!1cHx6 fIpݲ)ߎaC_s1kw ~'e.¯:1lT-NG+9aW09_jaÏa426OTa<ͽo -M%%j6 ( Fĺ݆M;͑vi/ T7q' >CaK[Iǰlxmv!5nX]uwْ L8{KHxA ˽Q+l VDb-}4]7͎-'×3pGKɍcmڴewgȒ T Glfb}V9'T,b|$\[7fH-ChV&#D~L*#Adk1keFp0!%Yd.d x_֮㤐:-gH'Coqc7nP rdf JI^AˆiF#^' )ᜍ:@\?YM(QǛҹ;td.ˤ,z"Jq1+Gs,BrD}o<`w*z=~;_-@y“;e7f~%ZbAZW"2?捅q8˼bk秢&O#Aib-{^}yoR[4 o-lP}elzq+ ^Y4s -082B625=%v% 7ڤ\kǘfcaV++}2\ŨC P{ -%KFP7I5,a 0w]Lݩ&6T];;M~>Y2٤ZaH'T l9fq6nj S3]-B.6/tMUqǔW;@ BZcY®6 6@w}ܒ XnfKIm^>7#߯_|5z6ƒ\I}Ll^$W}bPRE*z) T-[uZYq t;7rpv0{,땖wm( v0)6Jش='u{Nak´+_t%Z7hq ,iYQ datr#/@,'5$f6p1},Ci}l@.7"9܈#7t2w_"q.#SިDՖːr{" ٘4xZ~s=\gʡ09xxV)o5|)ҥB}a3ڑ.fDԺ{dkLMaJ+>nO?|pat|C}pvD 3ƅp}O!,VEh|\ Fp[bY{17S؎aX%y SNjg gVl'&5 2ꎍސMsY)C7zZTϙq^<8^)hC^Ǟ~&8GK[trtX0CPcA#7ER`L"}rlmFp M\}Jz0H^fl"?N|uZ`b9KKP/I=ʏ܇F: ckg$0nYKp oyw`{k4x\g "}R5yޥؤK"SjX~@׺7[ul^Y7D̳nm-A^te u1XeFݧem.NM5nP켒Q> -d4t_KKD{ZKg_UO'(ѽbI -tb;F$a|cnBCM2т40rxqP8xZp[Q-Yx0^jɉ 9i-%Mz͍2E.d mٺNBRO6Ġ*BMvhFR$0s%"CI)jˆih# 頋50kߏ8Zc8KJȥ<>ִQȲp,RWʑ8=TdI~?o{1},j|x -ۓmFޫhjG[:,W#а-ZIfe5K_E}nhQ>kuh kzrOt4(HP} sr(XwPvU|U6$&3"υ8̷,_1j%D?oo L!Ih:iao}G'Bj*,_S /+}w&c[_]߾AQEM h \b{1ڸ,,r r;rY2ihA \,ma,j@ rPnC]jxL ×59Ɠ[g+AQe@"`DC/W먔$ |R*P$Hr瓛o=NTr -Pl3N 11ϯߵ)}-XȈE'Dd[?sunc^;>SouF%b -$t-D jӥ=tx2e&`MܢǍKꑭ19i D皵#I6{uwhZ"3)TYU茳N<ȞC%\%vž=kh,;Z,t'"ɍst61v\.$OYh:kk-@J4#QqHZiFHA%TϦ;ualAGe+0uP@h-5hļ*d l0Kn~UG/ԜZ؟w0Ҝ2=.Omev^OO}o+/z{h[gxsZ@*w"ko -q&JV~BF0 ([)o ;@;qYȒ(I Ul>kc,%L v,Hsm<`\9zYAԘj.7LjI#RՕUBa#Xogy;5n#Q,ahژ!zcR foCjy -ۚWr |ݰNR[Exz A0N-ƕD`2q_qZz׽SR#с̠0Lz+V=QĩRlbHJٵnu"lkf,lƠF&Rٔ*Ę e`_d?.7,C[zo{puNd~ of 3 w0%rP/6Iu<9#!Q-Az"-\"n;O6$U u憻4ЅF ˠ0:(]M״`1GkGE$ -95FY0i0Bm?в2HKyCBζF3idwj"j`ti^=zx>YA끶#Xm*# -Hv!m\I݁ïKl&l-㵖vk-3rS%D612!(N/.e2[B(OO'tp^D\d돮oWZ]kD@%-Y -s8se"VSTv02>YnҊZ+CfTuXv+>կ]i#FYx4ೊ!=) -c"Ic27SV:Ӯb,54"b6'ojeqO 3 Ll9ė_lz}Zj4[4XI*hg ~}'FP4c,Fb`sޏ4,۪{88DO.s/э9Yw}焳ċV\q dؓ⨷mt=ԨKVqxBV"s7O$ņr|mPC%iI"|2R|}/1۬΋] A I5yx<\6OD+.vWDMYȒS%YV2–NȞFY՟4 >^#}}g5`ӷb:ؽn_irT>]6IHڼt̰@ܫM Jj^Ol-E6lAX[BӺC֐66L&ma$b m gl $7:lV{\IMj<>[-g#&M7o \aSA<:u!~{sz`ʟͪ#vOC6^v3(R|%/pJ՟˴E)i“\NH#eNҊ'Ƒf7)@RR*7>)i-\\ EdUW AqtvR]r1ZU )REѧXR`:AQ@l{p,e djp%m/WOD' E;V>glq@sOp"OLv-CjcG79ԽOHwnŌQkB -~rƪZRμIG2g`Y;X[{ʢjXcWBh<$Fgu0|aeSAY'Wo 2Zl 9m~]g읁9dF; "sRҨ6>,bښ!R)f^KiY%f5I5;S# RF_]ǎ[ '# pdX -33ZvkI]]]erU85fU$"9),XFmnB{oDF׋2=p`c -Uyr& ٸWբ޼x2*%e>;|6ˎpY 8U%mEyJ(@ư7[t9j؊OTAׄGU`jc;R gMm8Htu8aSX9K)(YS/g ˧z_V͙cH+eYς=en TuVg1g IpIԲUv*{oX(;iϹ׶|.}٪j [S7"#9X<}ث>wBvtŒ,M=}`l9HbRU*mK7j-?_Եז'Iam4 ~Rq.Όv_o ݽA OP'] &NHu.33TwCd`3s?H$;ݺ F8I{^sZcYu4rpR(^THD$/̇0@Np&E C0F"v;682'$5*rNko˥zͻSƓKyac+c0ĊtA ,kE -E;Bݾ7 QoRFʌr^ gO#/)~,䈠֌G}^-xj-Nj.=8j_MN]}Y - .%%D=ߖ5(KNZ jW!K|k7D\kyգ̙ -:' -oCHwJE,ƨz|D͓ܐ2f5([ԋCFȉ>m28-Ԓ0/&{㾬vݴl~qCehl B> 0$~ ):N㊱'BE78 $iYwOrnUЮĞV`#}7{ (5Pk$X\ Bn@⬱YL)G~]|F9V*>hf'.mxE3`@Xhě&92tϸ'͒t6)=BeWѤ->~ -~R|y/]e9vMGN9S 젩36O"2wXd3x2l7V#cF|c:,Y7sl"ҖQ8F,VE>wƀ-Xx70c~zQ) VSnL*kmM_֧w5:ЪNP{썥'%˼齝5b8ZR pZ$ .abcbTgITA 堧&mc/dHE`^IȯEn\% xJerj}N -ZRfcov]$,=%'j^ҙR,ւgi# sh>V|qS9Uv-q`;XmvD{㱮FP`yȦUv_VF-U98 Vlr,LQHYsD74]+]|=[δnD,j5bf\C0z8Ɋ28 9':J3 ˎ>,T{S$Ahkjyy贈:+%(H*j6+ҙ|6nQ}3)NI!ӾxQ,6ktzѾ,gyEkfsiY4,DX'Ƅm6XemMI5Èw -w7{β- V~,ϙHe{%iJ_uG҉|QYw4 ٕo3>K"_q\ʾ+Q -5QmXϚCsQ4ak8vj#gjQiiS`pbWApc;7e [`y6-0JOt -t`yOAҼ-=Rk] -3"F/ o9yU -0,Q( YSag0xo7!SaQo -Wչ -T/qUay*[aI_'l {%NsSrà?_@~K夵bZ+B}W0Qx{̸tſ8J$X -?n[4J C^+ H< F,DO ~6@r꾬/7s7ߨ J7(cˣaccY{zVF*2.ϑRc1W]M;7hs忻#/< ?U$Gþϛ|ee֥ز,D2ΠJdNe2Vr?)7!C~9\?1,~?@'E=t~D 9}t fS^Rvyў0_gߞB~/H$`ZbtId9=@ *dnw xm_* C@zTd8-~lrOFB9$d^? -yؿq -E2\d@y6Vm_;fV"K1 7tgf'4:_@2 zZVE1NC({RFaᒰX.y뇤>;e.?:'@[9#;W5Z -endstream endobj 28 0 obj <>stream -HtW\GޠAVQg V.cBUuG$hΐu<$a`|#; ɺ",-9o?BoQ&fr a:H*;x&" -*E&: $3RaAYn] )=TOA0 ~EԻ)å73mKJK -Ju"Z[o -NZM^H'C\`V2P[.zf%Bffz22^ =IxTE*K]e,j]3/uKf}d>Ԇ*R!c]杠H?7ehLeŖ?#<ջA2.<7&-nE%=];*vY> [qPIM*B~ʅbWiRĮ\/j<vKګ$U\3Y 3>^)|F"'[ހf"cL0j;SX$F Ct(8yp`;;([rd5"6q+liK||lj7ܾ&~}3?;xz m mzg933kd4xɼӦ~~fϮ_';1U#_n N6ufd(996'm6y::mcMuN *MTc~<ӹ:aN`AB^)0Q WglE'H >!̈́GocsK3F} Y_Z|at̕e $)n3TyyH硳$# ~"=qk+į5ҕ `Gr}(T|@(8}K*'ԣ8Iif@֞3ZM)e)Ll+` -磳uϑ>S?5i6Mf$-vx|VNnv*19OP"h]"#j@h$Ft-.2C ofSS -#zZ1Vg>Δ9u or['$V<Yz&o;Bqu QYىl{'Z\d~+*9laE9>-6lAk_AYaVd4Z>WPfM}²⢫dSOQE=\FeP|i- ܾ&~}3?N9N"6-XHMI菱>#V{x1m?ǒ&K Q.:s_fo$ԯy j%Dv~w&L_97dhR*=pb$>NXϤUlIlk]6y(RâuU,!({!qޖE&=+ F}}[ry i՝3D"^i1k f=eֵ`8|t2S4褵{m, #AMtA3ƩK1B5 F&h| ])!upἁ#[f'5kGAoC..L=.u"eABOdI }oiڇVOUs9ȉ5#K<%V]ٸG- W?nD1Dzt&e%$mO~@&U, -egE2{U&=Cy-YHVi h'dQ$ܑts~ E_YoĪR[o,R 7)=\NrG`9FT"5Y&dacyDfqrA D -c~R*5rh*?yc$Iv !Yb/[tQMސBBp`'J]Zy|/ K=lژzFk

ηo_As2^`19o .!8X4ðlr:J%rȨsݗuz:ʙjRx%=פwl{Sbz-G>uy*%ge_jpIX^c.빬8YwQ[d3"F>愀T1#k\,`͐V ;vχ8i]Y! v-q6_MMgې+Qtx'Lx-[dN=(Sj]HBbḰOY?7~!WmiDc+Dp_V1~ -YWoѪw$_6qC-|O@BSxQzLW:YF5&d} нt<[guMN^8Td˟6L]R70+4$ {ƖJ2*H8҈=kȌԲ`.VkNhz. kʑ0/j}c_|)yd'%8}_˘'f>? 4nB7>>Kb\?^ǍmuT\׀KUw߱z*y 1#MooOH6a15G8Wl%gbL`p"ST1IV:*>Nee$>mwNH65ah.\֣@e.RW+̵pڣK ,ӵ֐v;ׄ[gcӅ[/gFDf -UFdmԫNj8QƦI29GՐRD`T.ڹdä斡rc p;je퓿2剤w.,X冂7څ+q(H*[AttהenTiب5fi&N=mmѹQԤ=qT%zRO隊6OҎ!}}k܅s{0 3 rɬ>Wn+ RKϕەhFze^񲽥ƤVkkVJW7h)9*}SӰqmȘ{cyɬ.Oie=l{"vm_QV;3L'GP/kZXܹs5w)J]vm41 MoǨ4Bi87q}6QaW+ { "#oJģtKwwid EY7Y>N`4,ˮ!I㼎^*ؐe5$كU\sVn:\U.cR҇xt]tfQ>t@Ȏt1%Z㰖˦G|j\RWgYҋfHʌh l]ҝ6š<$nl3dnTQ .ug"l,`_k݉zq"?@K6E77ؔ -6 YlLZ_)}\ -1g~٘΋h()(+w"8WfclU/9fDb55љYHqg yS{(~z,c!ٯe7շLoѠAQ.0bB΍3Gc 'Eg[8UUs~FE8-mJڇPCQs1OŦCO2=i<2,^!PFvB> {7yKga\dH5.YtUzMUB=wmD5hPڥkڳ] 0Y ViY UVI+y.e$M؉lM-qGql0;*Vp1""`7fڈ֥1KeOB۲77DfB2nu"Zj'DVl?9+7^%9vkzj>X1EճD$}kr^D 0OQ #JһiSu%ʆ8mL)m>_XԲ!UWyR_4^IvDu! -_2=cۣ )8R)W?T(Vv(HI -誠1<,K,\ 崵mYbs2\7:dVD5-LZj $鵑kN~+ *YuH=' Iju@QW0H$.hs3ANxieq@Pn:Iw}%ڠ|_X(_*P;p r6r_wkQi$y 3|l)~?;?GNT؂ rO7C7 /PI1%pO!%ZLqjS`9,:'͜Br#[/6yAt(QS4d+tVMd 5?Cy6l=q;H't7]*}sX1iN0j<1h{2Y HuLtyJrZ) 8>>h(Eڽڠ֠@@܇rY-3 -WAQl _a_M+oCȖ Kx;BTAiaPR"[wAS>MC >h6? R)w}.fC1@]OU2<V^ 68}!0,AC-~o ߕR2:Ŧ_DIUЋ7a -'p=7` ֵU7S?@%mL@NѾ4&< H[:o'2ۍaMstDQiW~ۜ+s1K/;eY_k38[v 1P`R/FNUUǪ&i**"j'WFZgQ]ɞe_УAT~Co e!a3sk"}JKR}/m+b[/=>fV:M[2G&ӛFqk$XoK3ėϯb>r3!IwAI-M0DʤjHmM٦@DAjX[\ 2T~F -$Wҟ#s@D=^Daɸ*js4,բ%d\jHF*?GY -KavŝG](5F .\:2q}5ejxa]dž6E_\Yr ×^XiYiZ+Q/m9)uW^]͊I*5_>ߐY?W5ED1]bT/(1m.yoρb[4:fcf@ -4ijZNcR% )v, le%AheoE:ֱ̚AZ n.Ϊ)ťX+O]TK[I\7p"3v#ܣj(JhN_Y6)57Ucs3u:stFR5D9oकqj! &%Ze])"¹Ġei4mw@Q3 aC_kDZs\lLI)%y.)XKՕ֭b;l/͟+[65пB?o~oi -yE -~hf1'*ғ~5"\G_]-2np8vF%8:4H<.ĚY#dqP s-i4X"QJR H30 -s>=5XH/GV>Ц1|Nt. !P r ;Ă#'hxbQ)GSמ+GZ—p<܃4=zsH !̃nDyPVF -*5 &} }_!Ӟ)j=DY~0 ^21R1탧rN̍w K^s'}*TjvmKI"\8"0)"1r LһH$b`REHhRbY/l kk@jw'`iW|~%J'2Aze9ĊVѓn?̢ͩ{ o&sLa,hzg |`a`j|UN@›{@5"daˈ1 -r]x u5aCzŔT$1RefJ4TU=4e଺e5=¨ie-d(hcݢQI9WzLQ2A)UZO}2{2)0sdñg'm3'a57p.~ccF@_1?kz6BIU5b~}E9QP -iTtε-zeF,]Px֤LpY&jsYӈٌ, Ð1򡬐oiˆC)bXzPbH`Seϟ( YP.Ĭi`;*K- ,n}#1":ME~}EU<^/W[;!ߋyDRFL 3nkNB)Ul:!|_ŕbbW׶k=,b1|[<NٗVz4 Gaֺ7.W)j?1,$UC/ z5:z2UVv!G੮@yˀX-ꕋmOߨHbJ"K|JQ -+9Lqhv6YBx ?f!3"F ,xCrwD$C]GU%̞;JC̺61'  K#JK:9Az hb'(lFTh_'0^ċ+Zʼ)|}:)<9~k@Tyw"]RVnfp()Y0v xeUz@R ?9 r]@ '+s !1Rnrl/W΋[Ⴆ;zw; G̠, cLbnqlDp(%gV=\dp<;z2D{\0 bpE'0DpAq _ 8n_(dp<;;BX Γ5ag 꽜 .sH ;!'Taf'p'xɭ}jnQh9b8mFPAP6!ATXg/"g"p*-Ŭ{xt8"NyU=a_C# b^~y $ ڟ Oamq,E?λmꃧSQJI8nD{9X<_Ap0˗CazBpWv8:T*A j pƬyt3,3%F[ p*%&p66AT6c"pm!|:jD+7/$=NezՄ7;<i_lSAA|׽  CK݁$|lFFGn)Sh Gb!'#`[//b[Wđ ġԖOо>8TQ JV& -F"7/&Doۧ3L]͢p:r?.!"n1Uc,QbM5 Jt/3?g݆*c._2Gm^DZH9JMٗd'=(@%3>R$(@eۘQPUX%*8h[ux:.Lf ,RS:Bq`}p35ڲay[qbabe!5-We2c`-F#k"/:Ds蚀!M؊I 0 rP &'(q6IzALVWP*ŎGp+|aU?JgPx;;(I#Y3lS(/2xGtQ -ZlԶn:/E#"8 žbACh*a4| R8Qjd$nEGyv]e5/xiӆrZTmjF)gF?mRG*BYjUjWE=0z /fm͒Ԧ VS5~#y-L$BH%UC}61M 0Zl%̃6rW*umCo~:ÓBWBJ,9咊12CW?tW\UNnOөrr9oh!htl ڄ{X;(ԱK3cEb_ (4Uuq9zK]ޏ4Z"^=@\x[Cœ;=ރ}AIsrAjL|LELMJ?Sľ 5l9e%W, -w}m' u.O xk{/[?h©iX?_@1Ud ;ytʃb*;K1kG<Yk @.v͍JWtl\BP[kLgedQe-[:'6m_3*w@ȫpeiJCR2ϦAm9Yݺ0 ͦN?ЋijqRe1Us2CXgrʤn'ꏙD?Ⅽ+8qiDRۡ x J]푿ko`:/ Z,?U^eǷ~~|ǟ 4 Q"<~|ҶɆZ jן/ɀ0G}wf,.O rQ}3N8HG~B M -#SƮYVSÆH]-po(C755wyEXY#ь fK{ʞ5WB~fI=r3ZXU{v=X)F> Mk9Q,h'6.2f9(4AOXAօuޖ{ %G߹FXE_]!"R#۾9U !R5"1F]"22[\}W(:RjOEm|a/#TF6 8HwUmcRavu_씱yԌz[6?gn7dQݳ=(Zk Ĭ6#V+WEԜldZ=nV"{_e`f(8h_ll%=jX; -g7RdUncGz]-2,^dŃ_,HYvŊur;*pkکIwldi6G nOړ-u;{;)bۤ~&6G,yN0~,e.:5JwX7@G\$`Aqd[)/(& ^y K˥EXEb_qu]EMŢf2w&c86ý 2=ˆX'Yj.0*oF&ٚ,u@p".B-[}Y15)i؇m$Ock/>SE_٪6WLr! |;],fn^KOg~hc -.i1UЗy\*YV/v+7k{^H!ebtk{Fq\tPۆ%T,ҩ,Ͷ~RvxJw/+KJ|P9 Ew^?NrTTcrWBTGxO$jLnj J!JM%\CR9{GA-S{殱kS?1x?gߥ0q21)+k\e@(ÛƀkͦEBM5B溯j&i:ORg6ZKطb.^VyEj{XVʌ*nOA̰<%WO[''gύ$lx\H> ͦ*?kiBIp*R$hD1yi;¾b T1ښ#Á(SZ{u!kR>xP.3uMwuZrd=7N;8Nr-$#u0U(VZl3/J%S:7Xܽ|Hl;c7UV~9ȍ H2DF7^yE%" /:NUh_Fd|A ^ѓ<|+y gOpi ؠymn:b wΨ}{;3IՅ".f5GpY۱Jo[">uu XpTT g^"%e&I$>ctfX#V-fDAU;9I)6cl/Jy$(=I$ Uwy ]HPsmѨ^O|5?3X%\oycP^Q@*l6%yG|oHOBV`L+xR[@.GDVŇ7W{#]DzډG<VdE9Ύݧbm-'zRY-D1}; v#Z2YR{4_\`*B;bO --|çkH<)k~G) C=t*UWQR{NU l8̮ۚ+苔:;osZFY,ATrC&Z~鐷X;.̪ m_rgu@(oN_oJ2=A&FO n=ŁvFCcQ/-(tݴM>]dPpG7&u%`0ڇmVΪ6$P}e5tz>"oo-|}w${I]z|&31^&Ge!Zs(_E.BҖl@ -Ǎ -1pz8{ic[[X@P%6 V/OyNM{U;wgA!ky5?8 Z9[?K4o*)J3ulA@0Tx.o xXP9U u RǶ ./D^ݏzQњR"0V@mBXBT+&R|6KrpS^כF7kv|ԶbjE,l~O5rH8sUe׾ܓ984ĭl44] RP,+[-C)f+*(!1~N EMp{&p} Ͷ!a{n2Բm )2˴[ 95?:ReUbHnM[QFۈb " M)LfrӮhZ Z 2FHT]z?}T*-@ s-Y 6B?H6 #yy}X;3mscP#pD }Y) u͹ξT03*]T,y0[KN^$72?r?snƶLlWȉW{ٸ$"/Ĝz^ٰ%kftnX-BR{גϏ?Mw#5탳Z7Ҝ>Ҡ (TИ:q[~~w. -> ʮ_ J+_AzǾ: pեv #pAX:MNe!¼ZT؆ --)G e kxF@5beq%6*fm@ ż {|XҧH@`ٸ[4xPZ'w[X*#jVRMipRL| J7SH839Uk5TJ-!1/Gqz\h̀®Dd3d@FE?ս,`V!=4`(ow#^`=ӏΏ:'hC/EHQPFeHO.jXL!eJp6g'"U >4E"dVMCxn\eRHH`jl% 'ɬ5JnV_UcX;нx#4ZT6+fHz )LctT BڈJc:Tʴ@ҷ$ hECu_I˲ r;UYA8./:lH ֆI/DkUPȏҭftVbH]p;7E%^Ӽ:~wiik1h_Y_+<ٔx0 Ky9"*dSaQ^OzcddVrDRAg/XIe -JsK%㊫Y͒8X;*g̴DR*+me`)]l)i[ǧU REjQژWթ,vNC7cof$LtK1Y80s Ln-/]z/5^ h#2bR?̛rQpO/SZ5f6QɟH]l)0`Q\l@t簓ȼRq@+Z4g0I͖+hƬsO >BXe0XzqUUӭӑb8MOHXOw -xN2kpnpiN=XhQ>1Fa-1"֌a'xH?5N/1Sm*_f1]eK ?x.Z)7rh8Z.#{p%] -Z>Ǩ;$foh5?p+)/:yl}ՋΧX\Cq&zof%10v/NߗRQ)[$] -,8ܐ8BHc kk#Sy\]X=0kd~~3]_R7\%}۴A@٬@f/nxl oo,jgab Vk dw+35؀˂c  Z}P#+&RNK=S( *َp:v!M LY^nJG}M -@{' liv@hv<R{֘95D!P0ϗD걭ēf;Bþt'}BZZ(\[#ByNm mZ9yng%fiބJ -AB?sj.q=9hH$ܥ_̠ ] i!?d=8n)4Hx󔞮":tdK!~i<A`C^#g -v8*ŧșRLǯ qO[y|}_F;U'10t+6",j3 ϏXh":Nz5Ce`}qc;}x2[mG-[tp_5XҦlmdH $#]j4, -ԏ0\%iSnI0MЙ)d1 ppU[F c3T`:xq Be I#D0C j cH<'kϠRrevS6 z"EN3OB %Vz>Ľ0Fe7Wͱ0u$:wdQGpõel^գu)o[ikO kEk&iEA0V߫(Hz_kBPMlLavMiT3TbDnx2BV4*j= ugE_Hy?֓b r(oz7&shYnt:u 9KtڍiLZM 5 K,S*gmREt6ȒWAnG&GViz%hrҐ]XuJ: &79 Z>.F>v %~ =MO~uYO?Qw.槺ebؔ`GD9^2I2-])_m@f0QC@pU%C<x I=(7pQkHAҫ`*h]wn4dD%F30޷z%yB ,n=J&㵥^{% ^˝;ba0m\%;C&U`dtتSٚj]*"apzXˑadPXD.4:LFoɢX]:'5=JϪRڸ"& 8bUkjѥ2' LORCq|ZڏW5rEgR[zD|!L۱];E WΣiz LIe%Ɗ77(SWJ~,'DJ -b,zś\yxmᘳ"2;}H)ޜ5sT Qfcp| # K)AVi/[N=Es7EHڸ.ptD_% 6xL"B"T'JtgHR;9ui%?EdȆId4gZ(-u ;1BALNe<ߢw-` Wihꚟ&Jg Z7j$sL3+?v օQ#::nfȍt[vFd>M/2B$~TVD;gpw*\%{vmP rwB%:Nb!-r`Οz?&gr T}R՞:Ih6I6}5͸:\iFֱ,QSnqenb -X*T WbX45=͢%KbYOv̕$+s 9":B;˱Uw.iԛ;erfQ.H-j[P'ق1ࠀ>;؃완|@F/11sֺY ' 51HAB|iCvfUFt݌kTJvI7333/EYyo~ !A .]!ʵr!Xm^^XT>M$3b팬˱:sVT]l1shx_O/Ƿ8rGAZt -@sdB?*;G.>v{^;c7DV14`whp/K4ӾwP9"XaG4~@ŏQ~Q'y L_۔8_G nhj_cH\b6tw!r -}VΒFWMX 㱲<@ħA&įVfSL?ð,j s*^Ld}ާbV6B5X"ٶQ`"סQʶ 8&g!ҏvtei.{dcǥ05[DCjؼ[$%JWuhίZ`QuhkEAXF%(Պl 7DɃ5_Ow#9 ð褤: lMmU"y{F8dͶ.U 0Y=4ՌW$ND*Z rK? ^DpKVI&^bܯ|COEߨx?H\Pn g}~+XY~(dM^H\s{eHY( -_ha!z6#[ \]猥 Yԟ -&)]>o@-Op`Y&cN¬E,1+ODs(#PI:eI7}J*|h^:ƴ,iCΪaV -ˉ`w-W\֖.Ќ潋/^\l7[gu֌? +:58/Ƿ>)Q%LvKޚ_?6?8gDkG&׽ DFl -PQvZ. -e'*@j̋νsyƵA<`PJ -endstream endobj 29 0 obj <>stream -HlW; -G ZPľaKYܫx_^Ux4L=(8@Losۄyk@"d-011U8%V݀H(RNd,u9xt7fHPhčtWwV4am$B9JDb#R}"^u#$Po ep7)ΏD`Ƌ rQ;a[7òUaYt?d*:Mad:Auw"Bk_'U\V-sEsW8HԭMiJP}eL,0[dIJވSkR/Yy"KLxK2Ǭxlz+ oϐ _;ň|_o1="q@+K#[n9 Q.DKF-yvqQ\TNS:3mEu*Z#j sݾ S}/p8MA+MBtQ - e,M.n<"]<:M9sB)d:e}/Eq5;ny޾_}L5Ob!0z?<#clvA :  =D/L{\,Cm֏ߞbJ":bI> Qń,ّ )ISmTz.EI+:uqЊ 6ޚ번"9lv,;}sA|NfN@޶s5-@IG γq -Yn1mm'H.Q x'#2E.VmС,cHQ|wtī%Dd)0*nBo/4p4DzaR!|>r KLȊԳUv[ =u5{ۄ*P&:tlLcl}Ԫ(W- -<;Ȳ Jn,,-6hH2@MO.ZA6p܆qf׶,:~XTëF OnKi8U[(`HI",Ba(ٙ!hNQ#$j.&5:wMxes+Vu{:8Σ@ma~#MIcsWᢻ>dceLy3I)t`)f*%}#~LҟB -ZdD=y?ȠI2$x$¦oT=\? tL*6:pemh0 -*zļG%𥼌bYQz v `GВLG"P wo/ugR9F*^*mȎ-S*b.6-#ynȪI<13ڔEFtҴ:*ek(||gx0ckRm%̧K;C"?'QZXp̕FUc/Ctq35f_"w ekyޓhPFm꬝Q+U{W8Ye+舗"T\w@jY@֍TpöG@;4UyY_NT}iCs1T݆N(x}bsw=]mZ@Zx3{ѐ,>;w}ΙToi3pc1Ƽ7 0,SIxڪo!4D6d]W_}ㇴQZͺ+s;uO{r(ukK!DɌi1wofz̥5=iKLd]Uۥ0@.S{|-?DH08OgC#] 3~4ob".kJ+xn93t%HoN,}+#-ntWafh{;ȃLӽ.\bJv"ލI7;1)G fCg.-[jpblы"eˢAXVSec%O:"U\\0WR[DQrs@]NF^r{V]6en:/V.^D4Y"w.הoZ<1)F.ʇ -XT@UsB9Eeeغ28CZfs-f6'3=TZxT{y/e\\%)A=5@D@ y\C7oR+8SP`NTl^1[͈7(''?MY|4@!4xRW0K$xt-olק7)/Bimmj bB9-P@Z-s|ry;([lcd߁=48P$4gaꅉq:lz -/<%žґoas`/\M%Ep[/H ^ֵ#|+G]4ADVv -RHsZ^x]4V S -Yi^HP0zy9 !)l^ 5):EgXm.Ы. l-ls2G:bi<\K*Ș]Q@H!1*T38 oA8H^sDRWg ?ŐUaƌ$tcyPFgw^C"=TRX˙Jp,1hLߐHžhar Xf,kNaeahmYNܿǰW-h9〉TmqRq0&ATJ8ES,?u7l{ 'a 1 4grmtD=7aLq?]X\>Ţ-/Ֆa.=S%Ѹ"8 1O-0H"UӰc-WgӴj(B܈Xemx_uxh > _IUkOS}aC2ԣ?aUW<1l?`i#C+qtuنag|061Ӊ23ZpwpеcFXN9>CɮV 8;2Ke쎨&5J e"rs FlKy5'+jta\rB k ِ3nsṒD֨y|WsF=,ץ~"=SU{ y`fl4xp_- gHxcbz }ZУ8>Se+pM% ie &AV"x{eTDcDX/$SYt1ؗ^ d_|Mcfj.iw$bT̯.V{[䨺[.b YTg`3P]u kfR%0/N^ -~AM@>#\+|y`İ ה ,ҥc'm#]Tg.y36 ȘĒliKЬaCݐƾHZ1}cXXxXR5ƞm B($k+L6 $d4Udx)JD;?^7.fQHNl39/XcIG"áGE_7-: I"4syڙC1&#b&U=+g%Inܝ"RJLmb"( (ʷX+uˋ։Rj4]jy] ,1R-e5=_Jqbr >ۄ\ts@ L[ aYmL.yI)&qqB17h -qG'byս#cPQL+|i瞍C'f<$C vp_F'>tƵT0IFV&5Okh^UM{ojĚQ ho`^HnyE9TF#9''8'_C`F; si0H5rm7R|@J7*,'~OSUI',м}S[&%RVJ#nQQhL#a,rrsĆ n֡i1ƾ3q'p޸Nc'x gdle_7դrZ#\|Bgu#T-:˴|/)?=2Aߞbx0#_{YЁJgfOk)oN\hk2Y$F`SLLO{>8a7e/ )w">,98`Jђ񸾄 xB~m{cU.mro} RoP}|>ַf s^V9r먦ՌL{VOc:#o8Bb uʛme-VzzabO'gqT8";8ߋ1+fxKU -ctxOۂYGԠ&rsM -D.kV u%B9"] {jơH{ύ|Ě碑R`O_ö#HrGTO sN)o`n+/.KKW oY56&.*ΚShUѷraZ$$tJкЬBYn0Hәw h(&a2ʅ|>r&S"/'ZG?zI<~%Gz F謳_B^3yz|'.דSԟ7 ݷiG @f*m_nA'>[GeJ"C.{c<չ̽dJ H\شI)@-8['ZO]'-nO$>%z&lν( Gl~վ´&K t<.DQ1Pa8j{y5 -tMWq~qǑt9#&&Ϟ4 '-|neӫ'FvZ},zNLȓK|d6;2No 7qqLv}/lt.qY\ !_\9˟Pk<5/U ԨC+K"uR=CҞ GRJsWJsf`i&w ͬӑXtoWJk[+yRMH"` |ܲ&U*t>x˒"$kCbCҎVKH!9^žJz8oE[!Ms]BDຄ3Rnh$B`-Z|d\qhGGHV C/>sfN -E#'#t +V;كViVyN~:@D/m,1AKr;R~e6}VVtX'0lvz;cd -QG=9X!{@δxՉt?uP pLP*'o!koX+eE377'I&B̐3[=\\9D)=KnqW}?8 zfW#bF,eY'I>;*7:e'?Iqd1zSTS !hHZs8!y +TN aGtCL7JK3eH]7 pi ۱Tm"F+(Cdt~J5G -+G3z=I?z;L9 -hlHV4@.A6`wPoLhk`镣]-xfSWp0Ƽ5g:khD@c(TYYE;8c -M!e`$ FiK.O.x ManpT=3m JpH~lu9 d5i9~$@2.<R+.La<>Ĝk3~v7 )XyMdfeP#3[ؕ2zH1b{*;5ܤ+@z..! -f@fS MCU `k.퀈F-iGdyvzvD;0ugCqK-]gQx:\)s] 36YW8e8uO_ZX w:&)X#5CITuF/Wu@hؚ\Ojam+4\.F}(t|kv.&eR9@yHVCWhthQ[б>’L78$]iؓ5~=4]Y=$풎HcX%O!"ó~\@݂;Ԝ&q5w"[͝9kj}j105Ǹc^OͰ\Yi9f>kEMr04xv1U֡%ר.Xzrg1.Vl^aG_Y~!uuTB-VPzJZV}2SvYB)\i`4e ݣ$Pk,.Ok% JKJ׳x!{+gbCXtbpMⰯ;;`W.ʹ[/y˸bM˰6ǰhCI(tm[[Jy!ơmܪq)k tu(rTN 2)z7bN)T}}{@ox׷~~/N/m"]%Rd[+K#")s -UqEVgdRTb'recV]15-\^^uSy }稪 RZA*B!; ޮq_tU׋EÑEZggf]NL4}hDT\mWs`%SMNaQY#w*kZYl^@u%re_5+o=<[nJ ( =*zu%2jD" -ĸ1_鉢hcݳR5yX"TO+]IM@!/E=5T+H*ehUJ2.s6smm;Acm*5;wr.Cy㊙D0jޛ^݄!Cbg^y Ey{ ԑr&5W̎K J'rz%_Li27SFbVT3g!3ןw~jx.};cU?l8b~ U)"Nԙ2A%3ki+oYAD5!^` d$4f+FDvn&nm}` cM;)t#!G5Re kӃc%o$u!6kIyP5z/G}(vY] Q/dܭCq -G^9`C}.b_b*G\O/yWP-*9|8B޻x9,#[7c%^Z`mW{үRTelg,{=fHS -`yw$TcMf3{Sn[e=ϞEFJ6,^Um e}6'sf<DDގ5}\唯 R/B!C)DAo?чi~o - =E,순ۯ}'vp_R ppfY_ϘO2m}|~roo?Hurp? $ $97@8OdYԈgeRL6Oѯ|9mX%q-}u¥|)0<@dǷH%.u - -TPc"ӱϋs)]o &}}On\EN [Jc'G'uimi?qgxZqWT0@; EbV W\b*nN7vWޮc貼ކ6ө2EuS;tGKd2%kx翥F!2uɰ%O~=@Lc3=2 i9ñ MgΠ]غ.Gw](EGjf;"P!jdb7L3q?pHzѧZ:ƶcumC9׉%CjȢI ym|-EkKHʹ$?G~sN1ogjS))ĠʫDҰyDZZV/)C/66 FCpEy\\i2i\PgVvWPArla3l9qU -C@3Xu*\\"alX"r(A8v=&%3eyH$ѳV{=Eo:MD2FYUw/Q5cS&k6 V]q($2p1DCwɫ&{ч2- Uiw"=r̲UF5N:2cԚEwn]*R=ܭXga䈕PH+te{;T)JLlé.(>ru1Pyiُ;b笟1 Sִ= 8MsN@Q`MY3;V:3ؕ@͏Y٥Dl乿#;e^ Q^r!C~n%U2J~ߛ?BUзبz:3sYoo,w#3x\'lRF pXB2Eۉ[xA? ~wa}ܱzׅ?h}Wׇ J/6M -!ػH !R><H.]&7-;=U~uo -#ǜ6oWq$Fila@/Qρ4\t#!IOSqڥsL/O827W1L -z!`C4FǞc\8YS -Y?ҼJRI|ڑq(B?PLD#_G4g\8Z;/G=2`Tb;2.,"'޻ -:awƷ%ۭD+kLy, 1y!u*ȬDo^Iփ|h7 Uxl^*e8˃_4 -Tg9[& =ep7|D șvĢ^ p'z'̵^mVE-\߆pҐ)pb}5fr=@v,eXw6wZC[`nm8v8$d'BWݤX7Vrpr95b<,w:($O+}%B8 p6 uz6pz ¼1nBj@(C G -˥Jp) }M@p_y3 E9e7l+],A2˰@z߮IU[lᅋ˛Ԍ&8J8aH஑$žH0z=0t^7(}ng܆:\1|5qꧫ/5/F=<;Y>55%Ǟ.)\-c#/ -ٔé-2>v]%Z i"#x"ℕI9q؍ǿ?_wǻ,g~sC?mPqսQ^` ;7_^̶E > kn0Qgub y@Hվ&skƶf K0:zS)քHtrCq$en Kc}: -Q؟9}(}Bc _`6y#| zpɅ|T4?69wE3nų>NC2@exfFm-K Z:U )펛a;[]50 BH.RQ~%}'˵Ʋ>vM5KD흴К^E9ů|z7c=r#)?G, %{/N^[H-#cqħbmof;u4&t-ԙܞ 4 -HU|RfJԺ%`q $]a=)<1+f.{s bmǑ.hlkb!X9N/CQRtU `Oqi%,ΎF{\x'Bݶ>l7^er䯪yH\$p֊|!h_ nFh>m,z1zճ_v_`{ HTo ->Q"jથR ڃSodH2̆83v~-dUV;Sj\(rL&h*/ylVobDRЅm1pe ,r^X;Og Z2=OoYwJ%3vB1; Y#‘q16oAS]CjQ=13A׶g+5+jm)#TrȒNlv - 硫scMQKGb:l1Mcm - %# 2SȻP?jx:ِZm@]d7-Wi$rJs~iAKNt%mOP#',BiR7+H $bK9ڲGDۙ]tAw1]])ՙ|F7Ľݻ4HTQ=eiÍ>a[EPjACCEA,Ƌjrafނ +x;ye_D^rt2Yϥ\}B|C9"R"{""{Pdy).1Q#jվTZdA"$?ծ#s #Z]d{fV {bײvC>g=mdyc,.KfI#Ԅ dvZKfUdv-%dǕKfm| I-)!>˼^^#K;R9q1KWS8n_@7攔?S!ǍA1?jb*(l(8̘UHL*4c^!K,;31c.|ܘ=",M.nZ &5zqcxh ,CŬ@0#}X?o+_MB [%6r!u -Y )g)6H1:{B'>dR1ueUN+;bHo$)¢E9\j4"?le>`mxGpHѳr'rx.wgRH5S|*hvS6g= -a6 3ݎ% X0t<|!clr͏[Yᘲ|gC?AV@޸ngw`\ՌjtռsROϰ9U!cpd(F;0U{R.l 8-{=,fG놌NҬ|?GpQb.[sd} ~+6Vdr @;DUyſ=ҙ5GlY8Fr_/PޜN\{XkP"ŝʵ Emtc`ڕ/^oɆY<~r{0 ^$rH*胮[Ԑk go^Ȯ'D =gbJj.䃯"[%E'viHK3*:YQrY Bqr*Latj҉4岋J,xK[6D=A=%Lǻ,I=Oh@ʽOjUM-0Tc_ܘFPth ȼ`kwГXԢsf},)+F,~s5+nǾ :t!8rgR{yw)O(x/_llCbePMR3+.+w=Jm\)5!1mUxfL 3]X}&,MV4sF%'~4s Eupc^ԹT -/UVKh "e2NJ"3rYge7<&I9^ -/nqFC9篮md:!SfDQmqΘjk F2j{KmKټYb*dy">+ҷ'wk'9#y2VH(AqHM8~=&M#=JsUSAV(2jt)I(Yi%ybԢ 4YSM6]}6g,2ke{x -kB< yT/KfV-myg̒\}T%o úA.2[QU=f(&* 0͓Xi7JeI#^<-Z{&?\_lCd"J/I'a3+:JE=afZp}m*,$7*JJ9Fojԇ1URcTi[/MJXMhѯѧ.9c:M9/r7>~>c6ZCKނ͉/l+}a#HpdFENk2]Ǒ5I~ L1M ȀEV_ @Y#C܉_ R Ț}%slҒiCT%#ǒAZ2?J4%/BNKfk"EKd۱'Y9 8<%%4[@'/驖!5ed%=,ѹ˭Uz8p<dۖӓ5v 7m5͓5t y%Jc,>seutS˓YSH{2EvՒ g1#J1 9vҎQjcŮn̪LYǗW`owscV`1ЍYXa,ᗎHL2mn,1 ;foqn\.diǾыkM^+3 6A׏v,joﻶJo׷J9%60Gr,HN.p4vVf یay$e=LJ&Pbe8q@"Cɪm|oFUaS7f6j=Lǻ(^QƟHxY4_&%"?JE{N:As(3?9ݙ0חJ P#zd/>(p@۱f>%spM^&l-Qt9xAon6k ݡ:~ 440V}؂9϶>h t)#38-yD?MF\R#jV|Ҡ/><*z|)z+%q r$LX>V.fƷ#jUo+u% TFRқ8i%tG)'J\(wԶP~[C -y7(>KVË\@QHj泝D#bmfdzP(b̳?+2) i~)&C{MJ(O,^ \js[W_g-Q4ĖWl7=Vz z%-*=f.cd.K[)+z{+f3vEQOzlZ*;U)\\mmbSZb7mQiEd1x aA -g®PCv(7ҞkZm(av-Sd$("r:hr1Z{/C[WC97Hb|_E4KQ.*NbbH9f -Ɂ_ՃXQ^NFݠ4AFsY0|:)9â9M/|!ұ>RL24y -%h?nNpke5X-{'( f3ʜeȀ-k \G i彬mmij9M.E 8J(@$yk;Ew@(S= bG< CfO95՟ooZ4fkOCk,պ GVZᴀu)| 8{U΢D7[%°̤ gKYh(R1d? 6=^Ujw@I50 R&Q0N/UTZz["ȐL 僆b&1k#!1SI8ׄDb͟MbyEbP -E!7sI RˊXt&18s=$a/'1(LJ Š ŠX;أ\(vB1jr2(sYAYip* ZfA!BfS-Bl1j.c͋Ř -Ř4.n7A,S,uHqeb1ɻ 1{Y]moU#֛K5Y,Z0do cLabHV=07Vϵ0&0Mw7eDFIn'7& -1+a1! ZׅaԢ/f\PyLk)H\ߋ/sc?o{V\~=7m_8|ϗx#AT*e QM"H%JeFf6D5ZDЭݔ -e{)7ʭ֋Rz5NPt(JT( RoP-RS{3< VfC7ƣgVY^^j ۪TsHՅBTtFT -*2~ͧrL](m$ dK[ -YF9cR%EӘ\)Sv^xvNب(ǘLFp<0Jb"rXN@x᪋ͳtƹȰNgt}tzTxw -gq)w4 - u8_ -SmIem*3NR̢+6tߖa-)>=t[6 CS.aHV(|q=|~5#SKx$̞p=mkH%+:7zBPscRj\j\7_@x9~VpfMޭ -^Mż@⏺(,F6J~>=q!/X[G9Q?VN>stream -HWnuE -iI9W)Q 9nq ı<hݽ)P E{ӻvۋڗMҷ?CReb٭-f?ޏݵfd1Ltν{[`èXJV: SW H)7\>֯ltZheUMQLtێ֦1d2mڶeX a9!8iJ?S 5ɳ8pQ 9ayP3{D;$~ cX /hݰԺm>F$m$M8"@[c}<>!K4[^o2a &h4[(QNOK}8xk`KΠT*0[y~童dj5ry.a^Q+m\+%Ұ5 00AoZo8Fa(!/L=H.(@<&Bv0ib1"TuK5r? dOE2ݣ@a1$Y&u†-=<&0!?T}6$rA+h@\_ JSjTCA4zE -M#m^M2ʯQ -)I\_*;qG*$.\ ="0I mAc%|.YϒV|Y;1@0G)@S8q,\'o8sx&۵2Y!Y]L峰VT&PS;ԆgwX`w`061HOL; .]p==z1D Hi [Z<~I(8;P)۹t4`ЫuLL@5Dćqn3t91s#Si{^Pr% f2R{Wd0ct(prFs":=KO樨U+Is)EEsr v]ʩ(8Qح[1K,gh,d*NinF%O̯OM-_[04ݭjzW~~r}܇ A١&ѭe@ hGњzU -kb( Pg+W+sӗ?~7yFgu 6MT:1#p \X ?~oxRb %;WBգUL>ӧ0v }칉0 1i*={L=h`abۘt\%,U^j92n>ݣ%9=#hd~nQ~Ty -6{ -zŸxwcs#` ZL8{Tp3"Aej2.rbzqڻ"} *lV` X -6׏U1I/1>8'Q-7Ka`a l1rK䁶ULovs}FjUFHݛEˑAJ>ZFHP3 l|~X^.A~ԪrXrXr(n-[8iw.J(ۂD\tD^HQQ96iBtwy2EӔKra:nYZ hko;Z\G<ѰkBemBUR\[1izQx?/_o7P@PM:jU7(TlRP@f -t+K3@/Xtu;FɎ:W]oICw4!+4 V} l+"Z镦?X]AWG:R}#\qMt: hیI(沍NcGGO4{Ïn8QJ''*UƱ3Nq-Xخ_֫m -xryEɒ͔%ez@`I]P?nuL3u󒩝Q,'/k;ΏHIO = Ăv!O4# ߞ={.N&F<6M]y!||"ֶ[HsN`!l~lb>`W 訖lت ~Fpa\pwC?WeR̢00ӱsY2"57B3XLtu/ G݉;(na"52G6&"64C%'4ӰAlmi@_Gէ)=mc0j-RxUsv̟~BeA’uN`W:a3Q? f 'anC`_-[:ڮ" [~MGOBwa ?3.0ёQJ2v3A %jR*h>,A_+iy7Gsɬ -Bv}4GϹy -wXE3<َz `ڵ8yΫv®D5VO`k)x6} W+teJchY< bFgQ }nuF4Dh&l 1]@?aADհiS`dx<:$>x_ĵU -n">r{*{r i1S:mq}Mvw -nHr[ٴekm -#48}&=9˿sc/[43FDx8тJ0|}d*{vy a_sÇ?Οt^}r0SVwC3y-07*@S  Ke/.".lH\7LҚT;93vXJ ~jcG `ug\$)L \|LuMLns\ZDa7Rb6}.¨oM -ܔj(i5XR'2S=n6Rb:;f =n%!pJ" aa.06@T/Hc1LQd8ZOIzŻTBE) IrÿKGR!R$:$$ꖓM #z Ա%CZKGEṛH$R3nc,Ԁ9(D%5Ā0,53F3iSDb(A[_H{imju/ -F3lʎ@C`od:Uo -#P| -+pcD"(.BoL|ν/~uWQ.e&".޶4Qx (q%#!ղ=% ZY#Z h%dWWu ( Fl"!/NAITOF5l@v4G.y!mfVbRA,ivqi8?Xb9U*L*E2kh,al1nk@*cDꨏt{ `sJ,Ug2XQ-]YFV(HSk3çweJyǒǠj&2ބBIe ,dt0=jC`-CQm⭋ ,N,"YJE0mI%};HDGOsel* 75f"e1hWfo25b(# ,+F ն\Ws ծhK3߷ Z -iXl4w91/:P*P - r+*G@W>~ /<ܹwRq )`}~~:|'tGuo׹Ͽ> {݇;zo)}]'|ЈaJPE@KbX (;=f;*ZQ|%CY,GI2$sqˢj6Q6J۱|xQ[3<|&Ǝq]h#I0v/ߝU'q_yKgŒfAh3=4+oN -ʢk\LQA-"5_(WCNaXV J~#_'En:\=_šƤ^D_\E|VBTTjd$ Ew&=ȥdSR\d װT5Ӱ -A 𛾓Ӂn qeaZ&v$E\Z2)Gb2rpF,O{7.0!̀7`,@5k Br9wv- $ ]yDNDr'_pG\(!GE{*J6V!m -* #l˅ $Y#:h;h\`T5ۭ+ڢW24/K%v\U7rt hªj_kT.g| \~=ϯfcM\î~QT+x %(4L*bu\EݯOV>kR{fqÕijN6SΌ1}p\+ L.^&mm|~.gl:M/p)RK:c||AMN7Z09ق3{Rg-D!N ^["[Yl#bTJm1g})@[zݙYw*>gPwY{:pwh<1@6M!չ/5حݚָdV64IDhXΛ/ΗƥU s|`?̬^I|"LEFtbZ )J2 C սC"H!&q5sS,cm5s,كn3-C&UY@z GO1:e} _L\[V-}<+_lGRBHlkT* -x6+(1< u2lZߔV6sQj``ל؄i/MH ]"DXoh{`IaV_yRPELWmv\-`lS.ݼ}Mv7rL<ѽ* H}ݻ46'Yuj, pxdN3d[]Of4NR(U7,~JkrP#<6':&VKUzGk4$,Tuއscr%]AzުOuZصߌph)-v -o~86YFOZ[=`(?ϭ*c]Z} -0y$&Õ5{"dPŨv -Mݡ}䛫P/')t,S/ |Xg#1:1hqeD-<':BPG͘-3]sk,-כ]r t{ &kQ!X 2'Q߯NZ$1K̹:y%rp!@{N@ M qlA-Z̓oܛתٜi͞S>;eFjсNqPo@{Jk}Q0EBŘAnyXBr&fo0ذ^(l_ bO'ǓQ&HxENgA=tXUXCo32q.֜|kk2ZĆ}Sk3$8YX I=QL&lX/hF?45Qa0&l).Rq`4;c`g0Yq뜋H}G㛍n}>F?Ct,dHo.S;t ?]ƊϾȥC˻} /#^ɜil -VR* E~`a;Y=$UNeUV#bqߘ (+-=jolJ4<"k^W?}OvK(0o#L -ŵ\C7 6?6TVCW -9=l*Q:Evkeq@?A?ReՊ>;9 !MҚ)_`x 0~j]]oyy&sdͣU)]>M 踪spc;N VxcDfccV¢r jA0κqIY{W'Y{mLѼq$>ؼ1 G'O6FZh ,<&߸8\0q ڒ"7^_WW{+WP5cXP\~f#*1I85ky0tR8iQ2ǹB2Z\4Md[6[U -ZӋdmӉkWmxz8p2 _^UUCsT$e~XL{ LܛnR7`֏9h*qsz&/8NۈtBoc107ɆGeDWSwOng[:NZ>>IFumi;8۫7U 3U{:/G*W<@tM GF${rl>a+bhI:ga~(_/-MoNd諆{.@p|\CIz"L ?9r{ nP`ƪPVətx۰vb ˎ$VՁK*x'nt?-ҋ+h=>o$Wy8k4MY k_fXM`ra f\)mPm0ڑ Z$4:Wy&U<_X,'-D:3)g;ug-;L{_ʿʤբ2@'|z%bυ-߸;rc$'Fk@Ulhj^L -UcAF_/)#H i/$θJ j$fflU*@)#IK1X F!*WcyA1Px/~Dw*f֓O\yϼ]+pk^~cNR4;қ*\~׳߭ӳh?38U?nf5 -^&x! R*0 ֓ʈO+|}QYYrfzƲ>%ZU )GYXƕBCV5 ME|o5ZSBOQz)IB/8_5d/K#N/Mm_;>m -n9|:!ˍR; ,g'"қucL1m؆@F: sZ#m&$_ aA%/s%&;3Gδ;JqDЌZ^)䇗)Gq_澏 8&?MX{_ |Y]PP{v.&3B3imYY2A~%/$Kzyvl] %b%Vh5أXw2jygo9CnQڿ"'׮Q?a(0?|X&%Rr NTǡQLMZRəU=(S4%"+jtE%Le$''*4W3ioTe4 1wkQ}*g-8*O,}q1Gw05V<'63TbPalD5M!gT~J6~Z{!1w|e*ZQҙZI=ŧ#sOD#d.΄t9S+sݧL/ss;ڍGXH`7X^ cu=nBBm#PR Ž ={[B5]/+7伞u^J~qß`bz_z)&kcшKyЅq!"aU4PWC\BukyQT蝳l|&qo 5ws8ԼФ@ڥYGOyD'tP4K*/@GegI`Ǜ_-pMʏCj E"jXhk5[N&ŀ5GyK}^l: wm: mCZj4xR" 0׃A3T37_q_阫of[Yzg:cBƭ1~kq[OͯJ1iȯY/?7SNN8kNsit̃nJg1+ mQ֮ow6SFon@;1ʳ0\ȫ FyA9eA u7y@.<1`2&n6Mԍ@WJ?I +nlcdc*g#e`QN&YT@zGԺTp*+|:c;0B6~6ן1Z͵ٺ:2 E]F鴔?ﬗJ0"g^t}ܪduQ7K7S'tq|;bx^Րy!qeSa{s0}E#3nf/-KeOrG"9Rl1} 41 @^^ - he!%o$ܸle[z6 -CL 0d 4 uGˏ7Fӈ@]v8h]0)K E =QM"QnԐN<?%fe1^P`ѧ |r*xhJ $\?]\@ft)}`B?ә;A]叄S@ 9#'Y1Z-d'-OhЪ%@` 졣QZ\y/@7nH42@{22ĉԉ@ ̀bܔ#?k -名l5 v|UMƘF]O,&-v(x2vN\}vb7gc Eg; -C .4 ΩMPv0HoVfc3 tmMt'#gб˞qI)E'?{J?ItHN/ V߱5ƟՌeMt0RuzãQg-rVOZFC8Хx0PP/EA#0zX 3>V6ׯ,@}w8 sT=NC?7Vptv2q$'.ˠHgGMYÝuJY@?Ac`Y#@J/CqG@ -`2dAd-gXY^kŗhǯ-l54 -fȒΞKn Ӣi9Q6еLAk vPIE:@ᎅޤ1( gR5 -yC?+ݞJU6:.փbD YXָ{`ɦ,G=,o0ݦSϋ7;VI~ >} ;IA5"criBq(9z vG)I?ժl.&1cxߊTcnCl5/S?knje^*?I)MVq2wV%*igBz/תx=_ҥhZ}P^.mCjPȳdE}/k-1foV=7+P'6UWJ%hTJ̨wE>\&_\;qQc0*A|RZDO$/_@go[{`0g//c1PI?`ԕ58Qcw\_gUh?fd7O_~{}ktWyqϱu/6!e=ۛC6rUN,%!Փܥ方-ok[_›tpۣ>qL6%؛)D,;\b(/az̚ ܸ%@ބTNNo o|@s[FrCˎ;9(泡n(hS2̓ mJ2Xf|~}<^M(܆,O;YvPq"̣pZs¡;Cg$"3"7cc ndZ QxK;Ӗ49_ __Rh*9+e%wuE&%WR_jUS% ct"W -C`|0?ŴЏmW5&87B i% q<17E=R>n^M+OӨgP\q*c@zO{Ȉ-iB+G}{qHAh2_+s>o PCC 2E3O+ϼƳ[[>fLKGԧoX{A=`Ph".pDx(ߛ@ 9]׹OA# - Q=NZ2Ul6g\EҤ7ёeUΣzLg= JI\r5KtG:)vU)'s|gAN>ڻ.QODMRu 49#[urm5(kRlېrșA!ٜ$.kwl֟E[2i]~ҼȦH n;aન$k.۽}.k%;PeKsrzJw_JyIhxa ä^- RW垺6`a}@E. *w"-odg%;* Zx& <{4뽘Aay;s  oY |c/`ﴒѸFA$Es(ZY@- ; qO~\[OXjgZD..9?#-\kk'b V{wE%5h9KQl;}aPS*0 ȡ4; EgINI¢Xfo32b#d>4$ 񇰌,CG#i>?U5{S2ӄ v.4C4 -fC|9m uX=Iν Bى41glƋiFm~p64?(64Gf? -ð֟%]suDE(dFH2ck.dNh ]v?/{?.փbDG<]F6Y/%5 ?aWYY#fEEXn=`T;.WܿSkI o*0TZ["RƯMf&eyT 06muQCY Šo\@f:9_B -E.SMP`סaũ">sg^@wl$ї -endstream endobj 31 0 obj <>stream -HtW\ :4*hVo 3Gd]sF|ʄ;8h%`#Lijǟ8@?L0 i?4ջYȘ?mYcr"aFjL <9g"kYbWhi6(¡wt;6O5/)RBdi"sH@Wy -٩1Dӌ3BdVҎf*R'!YVu Ί=WVaiE+*I9Q_yE'#l41۝f+XOԯ‰茻<`y\?@-X2<;3^cHyu..Tq, 1DȿWM-cR<dɬ"eb.#f5qΌ(l͘<:Wlڃs;2kƀBj i)jH -uqt؅Ų(lj,3' -"({Vß;]7#}]תʮ!eCvD\< j=1oV: -ZelGd6[Pkjrw6kRsdq0)~ XT滤J(|'T+r/|6`Op&1gDD?''}+LaYuʜ? -TF95oUVԦ\9v1hΑa,{l$5 nLȠB|QѷٴbXQMGvb4w:8;k :«u -2 ->(|;HXjcGt:`C,ίx -bOy'kR)) "9 QŔEAn(j x;btK,NkEl-cJE֌W\6A6+Qkʹ"?p7#ʲ."cuހǢ\<Ǣ%gVh%c/puSd7 I#=-v֩4"KI,v4Rzr -fRFh7Ӫݕ}k,!:^kxo{\cĸW7_#(bLE49>7άW[iizDlEk R[K,%G&M?W9)ލtw?>K1/~%5t`9N`|=2gd[dN=vЖONoh7R"y"HH-na5:]N,%ĐW'/ܵAJpYP#2m -Qw&bkEI)b"38ܑE{Ȩ+-ߕȝF\!!0^''ҞEjo"kj )cx)vI !6_ԑ|:Dhi7#ɕvtD }}lYKεp6#Ȫ4D%@$ -s*u#Vzb2CU D@oR"}Q\%nG_5:eF=dؐ]EX=[R͑:8㪎lsb)HkTP|`^5ԎeVyL#~%=`=ڑ׸N^IN;Ԕ ;FvV]dQ|dZA"F)T_9A*L^eה5LYIaղ -%÷܏\ -`VI`fT;9T|Cy{W=#YH7I`]`ݎJuM:::ݤ(Y:tws݈SI+pժFѻǬ@LNrLI`+rW!<1}IvjבցÄvbAIpdxs;'_sbnCQ,&S_ɐʼeuNȴMHʙUYݎqخ,Rw 52.0\s=x7A>h'<ۣaʇ4v9|(&z Q:]; A ,ZM2&M㋭kd@\g*$o'b>^E -tz?_~}'ߜA$y`\%7o+[gIP?`(y7;kA|ޱŅ+bXl Y/9]}//@y5Os+k%"*ϾUmC9i'{ ->mFւL2WЉgg7nfNء|~% OUGVhZ $4 mJ` с,wڶ٣32yeI 4)y#!Bc"5Z4}ƞ=O2^fcw+ǿv6YzbSADfmxYTxe;qX-)"\wQSbZ ma]~n^`IyZJ ŪssO&kD R[!ق;6@VTY8}drgXBdX1OR.ITnXazqe}ɚZM2\UT8rߟ҂ 𮉖=l^`T.;@~-{ʷM)]/A>ijK/z~tG4?\Y̞o0xu7M=xS;?b*͋s $lM&玤\F -9p&[C(8LNuj0\<(VBHo";ܟyLbv"eVN^!5`'*DtU;wLg|>l3*^˶ĸے@_U}]gY>wu*2d8TDl`2Ic>3`E^޳05 -)x]mpɓ<ŐT .Y2w:W])UYE{j]N5:?#r$ITB&U._ZI#-߳3Zf.SJauB;! zPU$ZdtR)a1hm] W~lT mF36i5Eڟ1tt&ŒN=6JFM$;iv1VZ!lBXuy![۱r}ql%Uh -4giI֖ms'RNJ-4{V  gaYyA9@)Q&όilG{l+)AZWUA%6{Xm*x`h޶"޼)jJA_(r>XlQ[>Ǧ)\֎R^Pj^U5{Ma)c^=oJ=>[?'2zz㫦Lzw]zľ5eQ~tĵIzc wwN\BzMPUF:"Er(>-u%&?h"^)4UgR44ByJAP!hV++Ȓ zADwa2bȲv g64͑P1 upyNIרL b5c;uh -0{ Bum/H16hrY?߱Gn#`QjO񵢷H))-xN~dcZRI+a9*O5b)ֶ:çc6smA4dLOLjCwRG6R/s=AisTm=>d1 |-w|HaƱYj×WM|0{\nGAO`yh-=7So^Yr^wO|?I?׏vO46s ݿ} lC0`E(qب_NMC+8eeL 9&s{K_|!ͧfiv7NY?aN~cv;\k߀I~~'qq>5PG{# OicZ>ǯaj,g wBEcU$ 2nhM319\Xм/:Јx]/eF%[@pб㔙, Di};% 7O V2(2X|⃌#3ZrZaubDb [vJ/ob FҰvc9[f*9Fȕ$HE9oރ RB/'HQ!})Cu?2^"v ٝˋ2#{[tll9eN8Ykz>Nm;$I'7Dз*{{ _eu((>2}"\cOowL_M2:ޯ}Ut]_yzccN4RbImHBv?"{<6s-:nUv)/^B*M ֓k&s\_CƇDbٮ\Ӝcjrcv)›@tJ;E;YcЫF"MуS(sl6ޫHC;~@H<%YJ+[4,=g,%9WJWw<:ʿsEJ؊t`)&D, => n(x ~@z!i[c=)U>`FH ƞУ利q鞗<63,Aa~ "ql Ǹ;4Ts ތk4 j3N7$3|U&C4=Mr-`Ե ؄U:rTftam3l{S)39d]`9-ʔgq̗q[wz&LV}']'UiWo1rH#P9&:<}fRr:T뚍k" ˬƞ)7$ 11'+KkʾnC4M>C0o){+=GHOJǺx9O2iTs_ [=UeGî'-v[8=Y h^%h'~ >ʂ ajTaلQVfRr!8 0Lx)Z4حy9Y)3b>tvW̄QZ;ЩDQZ)ט)s(:6C^\V fG\o;YVE1dG*_>\3 Sȝ^.Z~ \?Oatkαy7.@Cyj=8\3O9`{rj~j5q@F#=!hzk $ɔC mTd ⃶: pVUD|{cϡy[ yοQxC&y4>8w"Hwӵǖ gߛI|S'A/[G檙N+:?-E -ٕa(I~=P 䋁a&1psƴp+v 5fg{jet$fiއbųwKC.XIC؃ y>_*q\҆VaPc $ݟ0lK;w|o. ss1 B ZRU O}_ž8=L肤Dd, ČnkMW?f҄Z &@Ȩ{L+_g~ښI9%BR_m ]>v\B WA`7DtkؠKcs".1u]|a7S5Cz#q om+م5< Ӡ㬬(C"7)֒k/$T5lp FAxJ(w:T\<דW{j rB'~(-T3_E[=&g~ -6I$χجQia/d5R fI!nߣSޏM0~wAJ0DRfm۟^>6/BI;>=PúF 8 -{ -Ekʃ F=+zl+#uxKڅxB:&#"uuǹXcɲѩkrcE|UW -ߕLΗ|#:U9}Fǐ&_VG٤(HI")@{[t Ǐ\2n؁{2*Cf$F{6c2CЊ/ɀF_`k}v d;3A&*chD3NZ9"-ܽfΐP:XBWsQ<ޱ> -m -Ȇ{)j3_*ꒃ ܜ$I˜sؔ-bJ/>yBX r : IMr5,g:8"O-WzVld9wt - 7C,ZM>~-&& -V~{)o]锡d A;qŜQ?C&BH'@-DZw?-31N 匌jC\r -? ۟GW"iFA9>q7QHO%}AZSj?0W/!{MCunõDEL@̰]8 `ЃQc}{cߜryks86_!-'r@ƵeBƱ5eNBEI@LGn!+~Ssaf&qtuX3rXΔ﹩.i}JQ&o^4qBJ-Cby̽pꬫWBȳmٰ[?}UeZH UGmPސQ薥y#2ۛE?0ݸj V"UQW}p kЧwӤvGuuPjtVɃ凝dd~R[V4IjуtA1>+ -TݒnRu"Z.Ks)l:X+OܯMol\SQq L8'd#:FWmh c%CBIP-3J3abtF yGt(>u m NY9ѵ]*üSwPrHWr]e 5 ic_d9p^&C"ϐV :#74lWf7nW%H2H$JrȱB,Afϑ;k]U{OqtUs9u̕uulś7V܌`(9U8fcTSt2t=$L3"Wb8,>fD8k,GVλ9EC)/D@[{\=QbF@nD4&OF6i 5 xP{cٟs_ -ą^Q׎M4 -;^ZdbPƅ,pb:"-5rՎ](r=Q&~ƦFes<5b=?d^0s\WBU -lh ZU~2'\]?OvIp0ͤ=3 -2"zglt2G08J-KnJ- -Ѽ5Ro\PT͋z =$KŮJNq^MP/)sq!%h艏s]@|(/T$+tۊR>.a0"& 'Szb[Л0Dtf'598t#U*X/]P4A\jylv*bsHd 'U%$#5W[M"2=r^f{]iCCO\$Sz&d\Ǝh춞bHGZePOjd9 .X녶%I0GUXS- ܎h몵^| iIj E}Z;"hmj]'.`pjrq?1ۏJ6C -MyDR ^@Wb/1SÆNUl86 9q.=ѷD>|ZŰfu^\%akڱ8Ȱ 3ޝ)sz"#clP2*Q*nOC2?r_z uيܰgAt6O=1_ H);{Pƭ'`g\,l='yѺH"l\n͊RGQSX;Z=$em,:59$b(h:J ,{6ϧfYds/+c{:*5;s^=J3h/DfCn^Ě>V{q5t4䴶qTZ^y^Hjx’٨%/DhxTI;8[~yj\8 [Ϛ* z3y~yQ.&3zgtUUB,3m QS0Q&8,|Yc,>"oͲ![WWUҷ~"Mٯ%A?ض|@#piV Hs&n$Lv(sDJk)n J8ANA441ۿ{P.}}瓬+%?hqdAߨ.DCLV 1XF^3?qcP!9GPƪΖ.7fΎvR1?BloƊVC뉬] .D@j ߾: SE'KQgGX=3@ %$ZFt Q&zw.`6]|!ꕇ @zF$IBn@vf,B~X1ɦ~+~`lp.R7USyE[=2nQE0z:U 9ev*J4Uܰ -[U @vZ2@^߻@΢?fUU_ï ]/Vݎ]+bjFdڌri>ÿ}$:/c)X4:) >g͍Rj_7vHLwG3ZrA*|N3H_\Ufd[z,@v_7Py{MAaAmnQڱ40`5 `.d@?i(GKS׿_&N >=eu=ĔxI逅2U2ȵFxcRb̞H:վЅӧ rǮڞ' c2ă[]g.L0'LCc)f1Ё9 gc=5bh)]܉ES qM"Ai@ky}4upt cZ}=t_İcOP'mR8\߇(j.񑼧@,I~uFΐ Q.~?M+&y$tpf賨N`f2h -v" =O) k&4ވ0h -֊UVg o$mޟsƵ?*{qv>/x72\!Ga4/NWio2/z2!~wn'Rbɑ晔37m6Q[@@P%Y`` \ ݩ3.oܹ@JKcYk'؁uLZWٰD{;,\*EцؔMRችB;FmuMk^8&<n0,{AWZlUud#̶os䍤6Clh,2Kv?ծcٍsd!z1G'g[Ň9w7̭t(HV=X~ͯWJ$NV*P^^̜!Ȣ`F>7$ -,Bǩ^P1\#1Q#w^B:߮8sCs_DV:1bg6C"3ܗ1W;;ՊetqV8L6Է^zo|o+oė,\c-p@ [(X99Ĝ]Ƶ=?;!5u i@[ض l~gq|E0M7P](YٯfJȞy[ > -7ꠝ3vCL+?t:;4wNPg3-01O-Ǜ,^iHkW`ifw+ZK9jn<`5#iG1dXYAhY~SaBѮu 2:Y ehۑaB)LDcmՈKaqr˜(Mdðcbߠa8g duy#eMz1ZNXTUcg%///E]7ɾda[Um@=4i1 f⮻=ͱv?~,2k*MY㚷erN]#:s6Z)5(q}!-4A޷%KXH7xO| 9+H*Y o):#29uwRO)_%nU%`=٠,$2̈́e|i(q[MWK*9Yv sH7ꎐIy/cZ'hY}X`?hh*"v]4ތ8 CC7J[1/HY>Aﱫv -/kRGDߴi3{NdJPHa;C'WeC e٘/^tkG S϶v4BV0MrkKH ɲ% d75!eU/T qԦ +):ύSCn k9$8 2YSbpڽD=ғH}#V"!g>HU簊dSSagtK9`YsqTL51<+4c!܁2:ܛLXtzioq1I_S.Ms9Wd%W^9䲾KKƬ}| -޷+| ތѵS(>_KbP.w6bd!J_FxK_},xCzmpun קJʦ4ZNӴ,K(̥] i"19s4^Y}_o}:czV\%*X/<:a.6|ܷ'ggzMM[e -ד@C(7_n&qKڎ̐>>Egה{;pVpZysvs/߸&ݐ4pz.3SΛ/2/CoE"CEJ1-3Cd]2\lNuVR)8-5ϱ g[(\!/hRJ?QrKꦄH(u!ie"U-jCMGuǸEeF|u:Gݹo3 k8iJ% bjf1 %6b15$2b"1.of9{\hL$ *fkfyq(hBZkJiwLkmFo,Tj>Z4ϋFaf/kD JJ:G5[Ʋ"ˑ]ˋ I.\%^' f0O\TZ% rsǃ>^?ce1pU3mv~ K?,uJxBo-|(tӬ(s>F>V,+YKV,@}I\ IVяTkh[Y4U7(wML%]K@VKVޑHotx Um/ШD/):#dxeHjӏ|y틞ti,^G4|-3qWŏS͞t˔H3LݙFpPG2押foɔe5I!mj-kH[兴4=4e!LuHMz,Y9Ӌ;0Xխ;fnIũlH37De5(pQNmuV }gqA 1#3RB!SGM3L!eU/bםg2逖߃]h6J0 fvhDִE vVFPcڨ\{F^6`YsqT\z}WmP7N"̸Z\|S -j={8˖`dmLk{j&U}Ns=NQ897Y]uFoxU|ä/»H@H-iHꃍh%9%hE/ -fRvMnB;9z+ ptX{b0S+)>\8W д7ֵ9W}1/3\[¨lɟ2j'`,x " -p.emtq(5 ^U}DH1`[~鳗Z{כԐ3EHn8DTԯ(x}9FcdA$?Uy^ ~Ʊ[E*]_[%9!נr9tU.$ǒJ9a`,Y6a$XM]I=aN^LT"bk 4h5F ?J<9w+Rqbo`uVl/U|QB<pBP\(_3thX;WU|QOU2!JP>F{UieoȩfǕ)/?=ssG*R)a/4HɄc?(+]Vܚ  oKVœR_':`3?9 Zﺠm!8_'eraD$gk$R&@gc@Jq\šI!XuKD\ sKCyb4HuTu9Xuh;~{k -mOZEffײ+ *#*>TF{Wӹڕ( gG\e+ydP9$ǃ<.^)Mp=@ӞTn -z4J4hײW.=*۰x]9ް㙷ceQ`]oAHkm[it1LY0jӰ%ESAmx0{KJzѫ@ӝ /Y_lM8{gȀ휍P2*L =fCe GQu`TEa׭~W'yߍkE0 -[-n^;wR@ G#/GZzN!Ò*id,Ȕ13d5ʻmض|)"D"_3 +fϚFWjE7UEϞ&a8a5<-gݟĮˋ.hKvFAx) -xДy.\i{H \a~ IA=X`DaWlP@Vߢw6QJu aWY)BZBή > 3 1|NO̩)ZY>)45Eą3Y]|X_/1lsJ`IrqMkYsa4Uz?D.Zx#.oZIPO yS9ݖ!SN0iI^h Z~;BvYy(;+,aoGxi| fKΚ oe)KwoxKZjQlJDIjk>'HOkG$& 8Vs#^"nYc=![6l3гcm@Zmw04N&iaVGtҲѶ]ٲ4IfK׮~?+B!B"RUQIFRQƬy >XGf&^ k+'Vm{Y{j4} 䡝9')5VI- ojX9hJh]HHcA8jq L5+`op1qjTZmǦ)kOEԒ&wcW6P=ۍSuLXjr >CHVc (Z 36!3!h!nf!\ -LDmЇnRŷY9nuۃT (fm2Ko42_ I=EODG!!-oGo`(kO6׼ѪA =J^{僌SWmb5/ѽ$4|p8/Y^? gyv@;b2D>cBCOLxy|v&޿x镮OL7c ]?*^Ec"_VIz ` XŘ6bp1 -`n?{+>Gw̮/f NEU\MAddʧ:~fp^0@ysI\6 UKFLdk)%8『v`H:ňb0\|M$*C>lX/CXtDi;lea"FQ(?D%L/pZm>oXĩ3"8BBNcXxHJg|nh=oߜy ^91~Ko,6IqG捪ݰx=4#db \{![?on|~p>۸}05߶0g~^#x ao՞bW{(IyxM4]>2ko_acaE?;*32"8ַ!t$7uGϺ 0$d1Wv;/bpI؉,,",:ua:r`v"`)AR1 Jۄ 5JΣUoI6g&ߩpK>Z^?UƮf7>|j6q itqWVW<6W= -| -` ܁ h 5MRN d( LZOo7e}p]K?5$:@u)Qz>U%Oչ Rsn :Ps([,KhB -K(,LhPX VE\{y( Ώ -KzU\-_HkGʕwx47a>1E8 vN[{N;u!H2\ Cs.2vtZU4iJE@@PlU0+ZR8Nv/WDlڱyPo Rn>] ]-/du҉Defh &f44"+cZd5#FV,JF݆N4 -ȢHC߫M3p!+MчPcqY3 $mD.4SV)Ipʉe#HsWZAy|VkU -ղxu+y00H5Z2m9(Uq*?^̲,cK"y ]*Yu -5e)tj`W61jvatajR֋k3yGX}eP%]6VN!H XEBWOwIyӱ.Sj -v8\'xT'횱(ޱ -[\jBcierRgGjaBRC9śmS6Y2[83'UZb2H@BD.Swg}s-xL"8ah}t}Jx?yCBs'bɺ :h*C`~ݝo#'%6v )/2ĵvSHY II=)TH(FGnTypEJdc";)ٍ{4 0 a|Ekx3^cr| k ȎBY#a]7Z2鑵[:ЩLk˗6:͉X2Ju9qMq,9ޯ I1e5w(2rnꠡz YaCTߣҰ̷.ߑc7R*SPRkHV%2It_rDmK^NlcS -endstream endobj 32 0 obj <>stream -HW=% 0AEJ ' Ȣu lb㣏P?V""H>~F`T}antB¬>p_DjDҮɫF!Pv"^[$Fmhz1,/k&۴jJ̪x$̌[xXcu >bLFуJsR XhW9'7;NU`f@v"Am4#P2Uhq"ŌţLjUyfdR֦dBcK&+I-xJ5)<nuҭ-MY u??!Vz$`:Arl߁绯?o)Y0aoAG]Cn'm0pGxʸ4ʊlCe QWl}+2U>o>׏?LVEi;v1/.UOE ](|nJǻ;̠;ZV"_1YaoAJ2 -D=x|7Dy.#`u0;5ea>K߁=cVZb;2ђނ׸} j$x $/+ct‘ D5Gꢖ86aYI(tR" ыg 8}JCT ETn$Ļ4m2 "th5vfvm@1hT uBD"c0G6"s - -I#~0O7@EOجۮWLk/RDQ`{>Zj\ \$|wb5m_ -{ȉM|09pm/!PXW>2V C.,cB/:G P<י'[mMlx~n7j>NۮܒY8DıBxx9_y|GNn&U_[aBMtWr[ `:uu5"s]ݝ߮S:} K?U`aĈ x;b>:2Nwf @X+,򂌍Bp n.ФW|HBC% m/npcA -Uq d69c߆\'& !]Dn;;>ARl # .Ku*cȎc'к! fDcK>tNɛ}1.ΌSAQ)"ypYFJ'́7ӐgYX^k B]Xc-B -=䦀ObC^10N[_@tCV-1Aɓ//c2ĆOQɈL8{B-(Ihv$x%I(eZ*IrlI4ZV=YITInI| 'Ig!I>vpI 1TBPrVA QZIq{8y/` $;@"f XQ$)c]ARp$DF}maBઝHTk$޺zED޻HީˢNZN U$0!I(8^)IRIъ$%}l%I*0彭4yʓrU68^8IKxP43Rr"=Zl.[8I9e3w|asۧi4ICIiCAzd{]]jC}~̮ݬ~"bHۖxQG-~! -U{[ !aEtJn-\o - Ő>#p筷W"k~~o -ӇaH<+J9#F rC=n)ws?ޝ4e^39c m\m67!ґ2PbR0V:5fcԧҸo6-^eZss1s\L贍 J@ OߘV=je9Y~^*x6Be-E&(k_,KrS}i&5aJk*ii>b\M -tcVM0z5uuQCS<\D3R?77G/3>(7b< y7>@yx3N܎Lvon6nwg7#;lvòwq;DOw(1qjwvXWYV.n?)SQVvX1rntjeJQ9ΖG;Jmnn0g7ŞngFsŜl(4̱ -9=x)Ӯ0ځl7! -ݸ~@hâUv&q.z]\ w_8]:ԛӡ(E &wINbw(u|;#Zwvg373UǸѝ2g\+g+e<<ִѝmsd }# ɋ%: /]vCTt?||eT]НѝAs;НѫyΘOe%%C0nt?LݯYNג/tgXt磍t/t粙< -]6Eܱ.xV:_s|x93:JYЬ^_ޝaE9 kmu!;& i;+RZڦ.1w˖^c3֡r"pV|ĦE).<`7^lӽbXڅc Q}U|Amafcɐ(6DE^ S{Vg#, (:;G Ш5BUd î4Rg[xn' W%=ALy,3_Xr7 ||0YTGz:[g+?W O[^ZjxS.w~Ič{D$D7szWr+zֶ]TKGlҵO - 6; lu /w.Д&`jT1/,_G\R2GCXT`3 ^d,kٸt\);?Q6T!}|Ng> ?@h}GFq4P2Z~1FD)ߗNx`R}DH`,Isg&TK?AB78Ї`tZ.gZ5Hw 38I1W[%_HZLď -Wv8LZ軺T j޽DbIh&>%֣dM#ɽqO}p{6a0/*{'2tBAۜ*ѴoNM -2/$V}[PT}[I2MK,A@FeF\,B0~O-H8LIDTvQ_`>C/n$֕}ޒP8jo1~Q+<ZuH^CdB]~Խ,msZtARj(E1GW IG:Zl]/ AjݠfƉJdMlZb 5ŸeB"Z(~I:JEd"1hlx\miYǘ:GȨVPF1(彽{Bj|_gVR Br;Mbe ݙ+1/- A@v v_& l>@ѣIXwG m8vKl`$p6{|5ict2@J+/$oO{WXVh@zL l.@5lSidMS*o[YxDҒ c"~w12F˕y N5wF ;E5(q@Bi=+.LZwWU"5ӝ< vy>ˠƮ:bQA)➳sBϻA30G҇Ms߭_-ME<)-5-S 2LԳҕIs Ѳ@te]v^-:lgcMR,QK|khx%D}RN |" l6B -TJ7f_]G[&ͅDk -r{K\3$:5 cH"9ޕER5{PRtx`RUJ ,DZg\p^D:x-ASHic3V9=˂ kaj~5Vi9V%/eF+|?nlyv+CCfັo|vU"Tqwm'vשDӂڥ"BY eUDA81PvSϛx0֕/Y}|/:VW,_쇽`NZOocIb?W~=k{Ǫca`~_ fُ5~~o;.'>ScUZb? y؏tzt* nbQf?<ُ)'5Le˖yj7_øno$ -8ٯb^{I;2jdf/o kLFɅ:( vCh@Z|lr:t|PIi2ӌ!ab[)ز2HOz@D~^3;p|^5R7 <39߂oAմܾufm\CP\}F3QbJ^JC=ߪdREWg)i6Zf>;qPDK<,p=`D)'ahEFab2bNXo˺]I4Hh3u(KU}@+f[ h-^u AFVL:=xԑpt{uK3\ @a -կZ~ya;8OHD>lǙ2_0Q>r´scYrc%vmDu ?},{Hmʣ<`j"c uXUm=7v/.}3ƴeb[`Uqiau)wU _-! O7dic\0w٢]c{JO%q$53zЧ./|x49y}>]aABMį lt-1CTqN5D8(/[f#*{̛F}/i}kK+5ɍy /|sѷp/;[gp#_531 ܫ$If&Ghq^Tzgd5ߪ ИwejdFC|ʍĜIǠ ƒ\^VLjX~W"Lf4-~`iW͵#x^HNh(g3DTT`%%=܎~jzpHr=J{-HEID -cB^& -teΘ$6 -e^oIuZ9H07>b1RkZE^jsɮ$}^9S8jPӆrײ қ?N1Sgr R$)%$I1MCS)[#=W*9^2:E{k5멵{=G< :,ى+w8Ռ͗??UAǟ_()Es)r3WBa'M i␵3SG'(7/deOfXf,L/P(AE̋( >e"@7 -&- c YeQ|#r"l9NDgc3.+@3`xZ1@?hTߧO"Hve "cͿ"xwJϰ|L| HYnĄ7ؔa2!z"fH/DF\#_J=YET 3 -8kZ-VC#IR2ȴFHQVk6;k6E;MRa'Ȃ:mN/ݓW¨+G A|ϖXi֙(~ :5fz!6Rad2ˬ +})Zx{;4MJ\NA'{kl~Xkl1q>:p5׹'َEzې_mU$ L4ojG~Ʌ)R3:2GoD?5ewt?nd3݅lB2)NXKLѾL~5g!9Ł5-4.՜vE\B5+~~o 5)|&_8 iNDBQ?y7vW7`2=ܱhIM -tA@Fp{ի HᾼZ9<Ͻ-4 -hYp/nL H!}y%])FSR0AT n 5*5(Buy,VUPP bvN1;bmtަ56l\xEZ||}}Od^220dVԹ jĄN"TTW~")&ؤS3vc'XfcI蚯0 -"J?pD=Ɍ޺||/M}(P_p~?/~3ӋԯdM!tWe &)ŝ6h3{B/tO2[-I$XOcO8OIE}&qQw2>>~WsxQ>۽uQyhuG.iQ؈yUH>^Q<ߡ;|Q?F{rQ>̧t0%9^k\׫Go(<"PIΓ;;3Iw@CJ+vᧃX~%g,i uFe2>_ *I@q_3LUEbXY:]:G;@FZHO#60KMP>_ۿjEVdJp|y푝_ϕ߀*isE갭n4;{`D=4Ba^qdO(ddRfR) ˯ekߏȉ%ޔCDxuLE8c6An>i l|k[~Fk[>S$S2:Fex_}*8d_:2p>~@ ۪i[7Zx'=H/뱱t(ݏ; *CŴC -e]ZEsC`{km0@txz{;@|{KU״Pq[}|X m'2P4Udiz8yoCF΢ؠM<@<umoL8^8 Rde/~ɝ^g3&'jtXzا9'vzyWgx,Xx"z'i>̇Fr7rUNM]hi2ax_ZV=}2k%&̹kftn6["ܷghr](wb֯P2ȫ  Fnff~ Ykxd֞a #w`l=F4 {D6kc(y@r(f!ťTio5g}og9W=_vP)B, -3Q=ߡ=Z%1C-Foe+}-EB'2ˌn~-I2-0ٴp/Sapwt@LyF$`os?>< -SkEI -Z?[a0f8z0]-\mE˪&hDkRVOg1j ޭMjՖuRxrezʰL<2#'bʍ9Ʊq yMV^43pj E!xC-.ZpU#e9wFVjxf /d ʵ>g҃PV>c1ɎݿםVwҘZjHK T/W iךj_V`-K76 ⩳xb,eK}` 'E}/?fq(929;n*khc3B2 ,$ڋ5Pdh}(Ξ*H7󏐔_ - ]@WۤZQ#Zʄ?/س=~MocK+t@[ 2[{Dy%fQֿ*2D[~M9jT7k -kcf3X3ù\jSj_>` L5#gV D/9פ܈>a]ݳ"6xsi{cؗ&ûF"c J@u~erduԩR[dQEf!]gYOH_:VߘjBBs`@5Y͟,4Qq"cZ~6V~L@[iv)N$ލнqTJ6w--Se9&6,Ë]^#0$ZFι1AjO4^)9f]4ְ羹W*:%p|8}[Ǩm>HlC[?4ɥ&Ѥ5*YM-B8rh?,Bb=%/0 ؕ)5)S>MXPGgRI-RՓ1[cˋRDzW,fdԃi=K~~㚙މ -%Y yҲf-^EljZx(0"ϨtkT@O} < 㦎7&Y4߂g+Q_Ced1hF 涳 |#YҪKL9]E -n//Qr`JX˓5ú -YC,s -4aʴUBH-Vȍ4-ظAj{Y%b}XU3}K caHF:{2zF}T -! LqQBH(uPF. #W 8oђEUoO5dSkyc$5ZFσ1fH}oFHĭ(n@ *KI2XlSXg?KQՋiEt8iMcս $xS 9zSWP|#_.uFwqQ\'@M*.$|"߾yfEC>F;n/\)˘aC -'f HxEGL_>Eԇ ^x;Dһ3G[l߅Nf!!iM8ܰ` .oDɫ5o԰>Q@eM:6 Q{ <+Hq^c x ƾH!^ -&W +Q ^1ȍe|ԥ9FN Z#ula=UX f6`gك=x8\d '56iCaŪ<7U\mX\m`T7pP绷8Kzȉ pr,ӣ;x|'_JUP6*7߂K+\ 9YȍZelg?KZwŽ=IPƦӌܨԴ6׻K_>>ݜOO_o*p?_Oo|s͛G^ݫßx?vsWU^lOEw͒O_dz-Wo& Z5<ޮMk]XnwOG[gw?~<~LJy=pwAzG_*4aV )l#,@fQ1p!i88pX6t67G -zo0>Ьޤ;+>9H\|b%T`S3^DGd? r< ux=͡F}{2*bz*L֏\@F,€ѡdx1"3O2KpPU2Ʌ>h)u6p~we⫳}nVsg9zqn/FWŲ jiG@6CKb -^@S|HZQ7FyQPaqbq UBdc -XeKj&5{bPcSM=~z~"~&)b׺YlUIo 6}THjz7Vm$Q֝\wvfk fҨ BiKOt-Pxz8 &~&ժOIo=吂, ޫbB")IF_BT1c[_)JǫYydߋ!V:7z1!3E{ LRϵ9JBƾ೾#o"#e߄H3FK hY\reYF.|Lo9}iUfhZPV%J7jtQ}>'S+E7B6WWTH!yYZNd,'{ITeBk01w)f9+Aրm) iL%ޑ=%j.ǻqbG(n-DgdR^;_,E@0ƬrGfWiƱBEOp7Mq^Osa͓\A(>)s rTB -; tZ))$<-%eGڢ1 -T4x$&+<׬`eZ!]TJ,.6-R=W=LpU.1*g=LmSll ](>hMϖ7ooi#~+ -H'e9ãZ)3[þR9*H&*e`(BޱxgD6_ǰtYcjiA#ŅoX'8+։.K}WB}K7tbОpnyMoP~]T_X;krի*!i 5uà6(LLMYh j,s5ljO\RKs)트xHuhUeikgh͓/Fj;n@F+?5Ҿ^D#NO lƁy5>|/,TeY5!Q%(6q.ؒDmf0$(W H;Wuƹ/7ۥPΕ ؙ$m15+T?6Ct* -7Mؾf(/Bŋaٳ -32\Z :!mJGD &yL"KOH/&{Jb.Y#(DZ ֍xHQ8Ļrca2;@"5-EzVR;\o{ ;W?1?d8+󊏘+w3GLm4.06fFnz!rv{2U/~s$9MĭөjKĉtH` Uً%ʄR&0iU - -(UҍP*4er$&6i9޳!)xJr/朅!qhe[!d>irتJ} C<_@dX*dP aU )@>)ѫeFkpR0Hع +!RDž:PM2DԶq@O91P'z-]`<z/ծcKnnhg(|]dt bXd9ApʳP8`dgQ>q?h#|j&1fDvoBIXY^#CQ(X="M'X tHjx\yz1ϻ%0힭'8Vs z_WI$ac@[ےu%!m٪CUޒ}6/ٚEf̻ -eLX(% -O.v~*dX_aZˋA<:9:=Hb@% Y95UqY}TjO2Hl,rYKn<Zcq z]`my* Q/Y5׾o1=եm#3?gH3iڙ9<_D.[$h0MF|d vzg5ĮQZ=,2wWdk>`EqفF@a_ż@pV$+kѝIu4Xzy|[$2ɶ)1CbO_Qg0JN -dC;X{vMPԷ -5^k퟼{ͻ7y/DA1<]ȎN#> 3ԔF)`H}"YExp]لIRx/r^rUP'NMO]0 94$öǴ"|m)}C1yfƇ>lgv*PN$: -N-0dGC} 2m)||zg;o:}tRX{N拹i-8WG'l K2$hAmZXFx -a%xp|M( - P~_w?co :x{j^zt$ jOgOQN~gIHsY  FMtx *Q@v4naC5jP A;W$D|Gaacd8-a)8܁z%Y]#$-g8jF!l"'5_7DJFe> |E󮥕{8Dn F$`JPFZW%EZG0dȀ'2m\i9n\`M -l3{|+{} P6HlEg}$OB DXze m68<^^4'4ݾĿ|3ZH7&u(|}D&5iE6 -P= XXIO-P>*rcFqd'-yך:'YAX9!oAg핈 :4Y=B,*U BߊB"߭=5=)(41MH| H/ꖲdeF6iQ>n5J&k,MϾUPneXaZ>V'QNpr{Ȳ*(L^b֚ eZ,ϋVs89B yT^ }a.(CN M]t]#ZRjױ놁d7./2.2!9YXJ:I gODW ͊O+ƺ& 2,ߗE.Y<12d#Y8Ӽorb$HXC%X~`CȊ -31"e?Q!Ƒ).%;oOӆesȸn\2l+@fW _W_z#k7+?˪h[;&4d^Ed_E5E1WaX=UaXNdPңBaQD3v,W> -=/KaD aCobYhðh_6,Zfuâ0&5g +hzßLɿ) -S>뗵HǗ.6\D׬^vחz'QҪ<0uZ@K.oSM⫙RS1PƊΜED<{X>Ol -endstream endobj 33 0 obj <>stream -HtW%( 8x1^bO8åTw]ErHQmDouSf?? ?Zmȸ -8;u -q}x%[ K(eJd`"? (um=VyHq -ulST ! ]`-FUJ'bQn~ tt3HwkpKMY[)MA -ccrucrLiWU'7B ޫ,7|7${%2\.Galdzs$ Xх~f -}Na+s!?{?@6VuDe(>?pFb稁b6 Oi*:jCM{RP3:>z6 1*jQur)0WlcG-폫{!P;p!jv9"ӥ2gKhSm$:-(9X.y*HVseIq&X>1>5 -)hfwUD9G]bIҩ5[x> O^mҎ# V &Q4~m歉bE,, -utVK`e1 fFI-fdTK@A06.6:Cl6zۇiKb`;gVtϜmu$U(s ac|+Vj@9ezʚkOJnŶ窑YbqԎDZ${]~4@>kNbXL=EѲȒZsoa`&ܸ3ƌVɥqd =jȹqf,񪟡ȪuP(䛲KK$W -P!uM#Y #Z9iq2%]w7+r~Ϗ_Kɔ۟q; V)e?86:Z_@W=)05;$]$4#>NQ(F)Ika[ -R1qEɖ8ݝ;u0p,ˋZV5^'wXEn5[( >~"_>FmfKb/lEE*سxWb[N譨'a,Ye92~W| -S/YE`*}my8[.kz.kz Jn.4dV;}Dǻո=)jW;!9@7bc[±"e.}]o,Gl9tR_.`=h*''U~wIb Z#`\ }C.fcˀiE5 ]T:gn%9Hyd$FYʰ--KF5;<*ؕTWڽ<|8BbA& h㪇H(!E=X;{i)u -QIm!v/ZJ܏ -2)"+fBW*8S]XePh a (DyY͸{5HU*qފɛQS&Zn&X(K?Ŋ$ ObU*pW)^g"1)oQI(Ű#uOHlm΂Zd ";!ۢ^5KW$ЧUCfSn_rop4piŭ)kf<, -pJT`릂@f~C%l%&APZ$_8uyzH)&5*VWWzp ,dQW(H>W)QNEl^TIh>Mm'1/捂@֫o q{ V2; E+3|{UYznihAmM ½=AJ){nRKCuQ 5$Мj<]*S_2V'y -V@ɑ7NDyQ%U'2w.&|+G'\pU>} ֆ$=uoBU;p MUo osuIO EQoLgEq{[/% (ZQrZK~d{%z]b!>_bB!VsGY1?H߱&? K+bq*q~9K^t -g纀 PҽV>t۸ -3 -`r. -ⓖ -"Z/>+*t vrA%n;e[6hKonNդrʀq9zU3#w~n}ڿ -[>.cwG6zz@#7н] /g),Ȥq:?fDr?9L;Ɠ,t E;7lPGl 9AaaZg16oPbI6yV͵+9<ϦEse9,kep-lL7DO{փJx :LsT%A 3{w&Y g}ӫ2t=@mSCG o]:;Vrj פ: Cr1N]LJ۩+`qeW4nԇ,w8fTԫuW1'*rԛmܧ5qjrZQ3)%yTTqX vƐ^k SJUH56hӚ/FNe9l|^B2سcb+aKhd/q.%= v WVpGtZ[t敏Ci.2e{a\ʳ6e%,ڶĹ`.ͣ`isyF@¾e s_75mt>ozt~mȲvɾ>ʟ6CFέ'5b6V6l:ޱ7Ge翰qB86%NkZI{fgYWlrCTǚɩ~w;R꾧}:keP\ld֠3޹.tW;ݼʬ"%չev1u^m3JF%>@`vE+= -u{Ԭb4;zB!f_YdU5Mi\:GgEmMK;X<_hEPcm=i -Qâ5k:ZѐJ7(("1q~ hyEƝ2!+ӤA{+E^hAM ԇ4vr`+vLy?xܷ=xex/G^QSO^Q/^"z -tT/ZVޕv -zʁh^ҊD8hOhZѴIMOZA+'̸VPmʒV Z9V.,iŎa[VNZ8jE+xX}ҊZ'X++l+ bץ)JBw/7lߟE(#O]}SϻW}qϘgV>hPb W -ڈ+t ҞclCI MZ ʊYG'y -:w΋ɦ=v(c8W :cڊ ;B:WgU0AV6͡Gn*l (Hl=X݁o)<_{,}yث7z1NL Rxg#egJ>/Q}T*i,1xآoXxE@:[cHa}ayErm *=~-l-[bI+õ1!MНVWQ5sU}vvrHX:S 3b_BڋvTKzQڥk\e%vG#. e7%].9zeyT{xڨ^N \D K0hH\škc, ޸ -smHY&=nYKĮQTeGb8j>aS -$E֚L`|qc11܊ -N{Ta_<֏9>O˿ϒN @NsFuŮf6u\d☖ҋ -ұyCd3j=h$?dr TF;EZG㗹YxT7X"Y#HZ#Gw_Y)>nObw Ǖ,h0}E>c5|߹t+^i#/2a-:GΧsZFw6ݚ́F&W*cDa1У> C$8F'eQs0եsϚ5jX#H|.2Į4C*mz:9m`҄K)fK'gGsS}]sXFMǠi"+ XfR@塠MUbT"vXB {aGW7w`=}ƍG蟱b-|Bsl'?E>@ߔ3|8gF"0ha3̚|b( 33.]}Ɖϰ} LaX92qa@Oa!d$ȋs |{RcQ4EFX-͑)mӌ ѸEa5I.ֻS4/#l[RVgօֈ.&F(+u -eDZûpF `t@e;@%6չɑEb18jG=`X3{bL64MXkkP'b皭wM(>%bm1CG̶yZ ٍ=>5GFzF]lA&UQ5` :9kLZK,N w) -T\* kD5Mnʑ6I7#P*|w*1o-F\}+bmL\5F/j>pYEQF*sw#4&=WoOxol_jBF-퉏N1Cs1Q?BWSքY,u^1{,Xw P^K -Eq.^,jzŮzBc>dcfapu~d1۶x61xRŅ0M}ۍ1rCئ 2)O4o-m2)E_6P^>{P۹&-]r0R#w9%;܁Nn22ٻB tfi]ݴrzZ uw5n vkʓYgcT-e`Ow$W㰫 ~hֵ-z]6@)峽pO#I99YқF@W>kCO'0Mz9 -n1xE$ir ]}<Ln +Lj4B[VuLsJD]^UJN[@/cJժ@[FȮyF,gvQpl\jg7UߑΌz+`zRnÄ"mb jllnGo7YJJwcMf7[P -iodIW_OC-7xx1=I]eIq_ˬG2MU+^'}V2Fy#|cK_h` f6SA!|<-fƎ~5P+҇0O5',C4iM$"tD_9۽]z;#{ ~[ev˫l+ڋ%* Aؘ4~zWԅ}ůdr -.zsq|Ã^9 ]^Vp3{kAcl B=BR'}$?d?~N}y9CHkP"BbV꽔,`v2efպZb?/رZ7fVˮ/c^))E,y-bz-E5ޛ iV2Eǡ٠Jfݗ l%k*fn }VG?`ˠ |>W{ohU{3 +>Ո~cqP >^YT;}0t4ߍ0`v dq~ ȯ?Kz o4ig5ݝZ^,d%,T'.`(neOTYyQpdfym~sQԨlc:#Nd`ADܠ-.s/.kO:ٷHm[_~1|E; tB``TR Us_>O?!51(nR\T<^I Sʬ`4T8[q!C9Bέ,] Rp̸ȭzQQypǗPY5GsQ@Wp[6;G#?s_Ү"%H Ԝ9~F$D;"dۚ!`/Xșk7"j;:]7vM}R3ýD wwQlfVJΊWg*d.o[^݊@ -UN)iS+`#(vWY,Yȡp |ڋfElz6V7vu7,=;v:ozu*?cq{wX7dICkYLME]Z&h-Ei~JylGv0Z@1h}k]nmv0X Z1jմ^ϖ3Toh靾 YuP-o=HC z7؟|b_@%;֒GyiVߧaxtU%S&f0ϩ8rE$(5*A:[,3s;!YhUbU*J`W>k]̸J8dd&o!{a ->(`_$w - @eI5Mޓ#`xTԖ|T&tn Tlŝ^lj&f*\,ܧ<i?-I*R򡢀e&YtD¨ 3e,T.2I"$MEY4iusk%4@7,KU$l^TQ (-fME}+KEv]o1TVoE̘]ME9PQbľ oƁ0RK@6)6;4Qe I(ltЍ+ͅXAXj03%SO;0u߁?fvnMk((m`g?3+J2Ǘ\ĵwJ ?=My%?IԚۺS#\9J1~ C>,F>̓ISY4 Dn$vtN/; ^; 0՟JՕVJl]ol@4@5K(9oЙvΞ]D͒f"r" JOu:kK]D+s+v1O38ˈ& +owbG~P,Aes*/B|ĨJs\[2b&Er {cQgEM紵i_vkiJQ̡mi-\:5mMBnUr7dtbD)Bz 7pƉ$a@rX6= 2 ǤƛNnuXVBfW\^zԻaHe&H٦WI4-_W?o4`qFqҒH;e[/! -wс{!i./>Eg -ۏ5;,ĐߪReSڣUYGD?H1-%;=ܟDwBVe]cߠ9@ -ݝYH6Zz@5ڴ=#]`dr[46*@>{B\vJn)9 hMAt%9BHJK;6!=$yqҠ 3Sag9#V\t|+7Yd 2ێ`6NF9G~w\GA 25$2צ]к*MU8Mdž`{ `OA?BaS؃n\lݷb -.ٍtݓ\eXx)EsBƎ@nu2Y 2n{Nd4MҫC;wF SUEKDR0W˚r20ti眫7:kҬ1|FehTmGV*]T2)OzEƣvhqd5mu -RXc7LQMϒ\_8+3 gv4+5wAYrĪnDl.723JΑhe/+|@F=N #Uz4 S g+ ǗN:U0gھObJ<)*&1}I^B\X:=*E&MRVNT5SZd.IzcI -'ƅJ-p??EymJ-o6PT<}`wҨb`Dȶj7RJ.O_4xo-UvL$L6Uy᫙o%iF6-OJ|x ތywUˤ:ICl-.  -e`ӵ,:çȮr. -p(z˦^j?6zu~^GzmK\Mud7^6bH]>ixT ->ՑpJJzSup`ײ)vH78UP瘷~ &1 | {P*ifՑP Rqo`̟o&ǜy%M͍СkR0^s|-a0P (|W~BKw s:2?+,5-dN}?GbZ1.#΍06鼗mϾ,wu3r) "Yd3s5$cs0qa5.QW)0?sz ND8(Ft}ǩy$X.Q]z#s:6{^ <2hJG̍* ޱ [R}#d^ -'j3<ѓi ={r?ߣQ/[vfZ$p͕;U\b6 }S +jr)V;*HV](?buǻ'}&?K[=oid Y;71ȹd\]bߘ?Haz\`hYWf>Bzm3AiPf-L@40׌V9%ł(%hL70Mbg]BܬnO#(VP+('@PmL"ky*E>JIso/}ׂ:7'~q"mZPJkIOlwϩzL%X44t6dF,3ěc-*Ɍ>'5fZ')嚾O |#n xO-r}ɺo쪌ꯠn~䅙7'Ѓ:_w{_ ;J1bγC_cpJ &fV vg_ty,Eo1>LZ; k66LyAU5cT8Zg9N@N`)%)0\|cT`wG!?Lf&IaI j<.K:O?Cx˘y,@Fj @]*Ʈ䚿M޳$#o^16vDAEэzqQ:wjEilzukFo%l`ZF0l F]Xghf8HldWɯOOkhФ47E9>)ՙLBdP T'YncZYJ\boE;aɀ;l CgTF吼z_#k[s((RVphy .zAIiV?/9r֥^:ŊnT>r90dLJDo$hL gbddB¼@;ҸNDbýxX$PuLy-6d*I1ݬ^Ģ k)yԓӫSLeԄYMV^>HVOR(9;+T#~mǽ,kc~cƴ}ʱaU~(R'-$X_՞J:XZ]kejGV$t@V=$P *#%B2OS#6<,mBBz6tz)J51NQd.jTh>I߯AEs˸^-)߱l'Lv{$4g,x97cDUQ(͔K`Ye2aQ@Ǵ_m ܄s@7'YG)skyZK蘰×w]IMm|g=؈9SuÑ\0>JrTșD aTCEKIL3O~k$7JCd"sf RJ5Y_2WS]RCyʺv%keoD. c:QP-=Z叫O[~cUQNhH4~^ci،)t hWQtQؘ#J.x˝zL eNQ(Hn -IKZ/%;y&.3Cĺupeu*‘"!5ݔkߘݒ$j/N݃RUK)2&:gh KaGzG wlhqC[?@:Z|] e,iqPᠱi墾rbH;=JJZ2_q=zgm[Td1W˯jI ߊ`FdK@.]"f)]8 _3vͰ_A#u:t$7NiR=N^8| r\ ,8ƶ:a,2CfX6 Kd4`yYO-n`o=3!!Ec;ށM90±3nk=b] 􄿳t"*8 -GOZHrkg kҮYIs>yk' StzgbMg`B~ĮHzaW w\[**±R 1ρ:L!Ct"kK?'QGq5,t/JmŏqFa6P\-o5lr7Ͽ;Y4~ەKz)&ȅY9^bByC(Cmp,[. †ag.f6f3uҦkKAXvs~^xFP 2o@ҁ]/tQ0TGAh3 Nh̡z`u*,a3<+O|_HTTaM;w,& -'d1"GX4#m&TONmso.4]V@*jPX~@/ab@Lm]pHip?Kf_4kk2ѳVt B-#}T^+dԥV(̒5&|ESbmoc f>j @W(4Z/kz?3AOF@ yMQN_0 Wuz-r-&3k6*>$?<웇Nj]t^ zp Po{{tx>=v/ۡOX,.2[6W@gR"÷]€Fp5ġ+xI W'0ڄ|1Q6Epea҅勵9[D!i,q1곫k3 `2eøxg^>rD)`>Q^];|$⍻VUbRX]-7VLTql! ld;tWeEi!Y^I3X@>Š[PD%Α|hLY7#^,6œ*ik -pxl/j4 ].Qs3Y["=KS"dyO`іSȝǶ泏lys佼pY)`2aiwڏeJZ[ߘ`4e,vYy tI8$E&1ƃ3ڏ?i\?Ptziڋ|)}maSMJAtlʤ5PΫf1 8f=V.zؗwI~S|2p8khsKt"s*jRZ^;M$)l2G4K3ݵB)^;_S PK]qpq7Ԓ3V I}tJ#f%n_zF"f 6?sl-,MQ4샽UICxb"1 c3nR@5tUvA8 SZeM&= ShENekBVdwv؇j񵅅@ӽ4ta!Ii.%ڹ6l:pmȽ2 b6nƖ3*27O*Ig= -rWaѣ*ߘ 2D7%98 U]vi Qkgҕ~rͪ^cJ5"eߛh3uvxχ{˞JmHA3r2UlsLШ7p.Ӓ;h^QnU6[ij!S@(yg^˞'l-ݗ JrlQH3]\.ɿ1;4!r:IiF[RX\2zO+]'%ysLP`8]ǨȺkXRLQW>2Lmy%X6xVΪ7vϥLGW#f -WWٔ~ ϿxHM 8`* ^BU <lNH4bԚ9IE,Xmqi?#_X&弗`UlԞ'f|9NMNO}k#E+IY$НAFM^nF/͏hev*(}guHEP< ɕGʾrmzÓM̺k++?CH$go2Htp2Zx#:HU)ȡSb 瞀p{b0J'$ꢆ'VgP8n$dTε(۽MX0[(b2o<*z>QN{oEH:܂hzS8Qΐ˭.LlS(3"7 XE -3̆Kjn3 4 <HO+"% -endstream endobj 34 0 obj <>stream -HtW^= -*@H>6sEG:3vﴅ. 4!Y}v:+@,'gB3W1IB:߃ݯ0j%q$K`0ZMsٕʤIbS`ߛE}p 5Eh63٨Vn}lY Yj O{Y{0 sӼr_Mb@rQ>ڋz[u*^cQMd+bD|#% N9j9lߡ! Z/1AZf -H0PZԵoPe5#|J߭$Ͼ{q|F[R9m0;2z0^|[ ƫqY-2t$0&vuQ,t-+xdst}Z&܋>aVczY٪Tʝ+cR{6xvb AJoˌvK<ibXȲ1lf)#nR]v1d' 掳hyF`w'V MJ+IըJFk(e1VUЬgT 2>n__kߒ>^*qaJ#'ڭ/o`k-DB/M |ӊ8_2ң4:2q}o.(D"3ԪboplO!~Y7Eϡr pp+;i;\~7+G>|f|FkpڨݖVs/%:*-jch8W"wʳv|>>D++qx~2y^0۬>?KΝ^hq /S*cʑ{}cgf(i|ڬ>4Z.ohȩhZ0./u&(Rx1* QvN(RHW&SB,)*q[JK6N6ki ~T)vJ{r2u;'_e]9ݤKSգ]ꚋL׸yu)'dܥ)kNr^iWֹErN:D$ -TnNy*Pqp8okCyק골(tx;[&?>N>9{ִ9s jkw;84R+i}Rtl@k6%="k .+_ g2l`^(=ߠ]o˯LN s&(oeYb*us' -6d֤EA֕װ-If o hmo!gNبs_Ϡ&ԈcZRtbHGגDN1XSΑJ6|ؕ$k|.%)֕QPWJ*zcGkJ#KIj30<~^_6myX -FC, I10ݶZVV5S)4+"<#7Ҵ^Z(&O9~qu,/#K ǜj璕nWDf]Ԃh`] *Hh1,7_p >o LHIa4f".kO)6t\ףfz -y1_|.X_.o$O뛤'7o(M|뼈Oϴ5k`+$dd*f | -&3߁?x&7M6lpΖ8mQ)Z;,!7e8ҨkqQqc*‡t1KzSϰ#B9!=zG6"T4fB$v#'a㘈0U:qm=g׬Lʈ7`fbZHM 'Vj A:q'NL]0ۦO79C?eR6֔Dfm&+ƕh 삯GZ[Et.(~F=TE~-Z9cB'|_f@>)FLG¯vh#~jZت٧w`<  la~PH^<ˑ.T/*1tRUZǬPYK0k K,v('5IG=KN FXllyθAaHg_G -9ŒRގUhOcl[&;< Z/i&8v~l " DZGYe6>Qo;;1U}R2B{ 5R1[uӎ mϮ=me6KƓ@TBPtlR(TZ/7FtLp”Q.]U0$gu-9GY99]Fh{-R+rE.AE,ELm-):ّ C_FMGThgIW驔>g@fD),vŠg`8Z7*[[= JN 9m ?1Dn:ϙ">XQ@-h=j8zU5<nzb/c<\\Vz&]}ֵQɰnZE;LV+ ̇@'2e3$/̛ -8yHH[؊AjC VB2Vf>P d;V[>gV8AJNICvd0[TsRm#)Ȃ",ڔfk6!u.dCnu@8L"ҵ'kd RvKlKCNYa9͡`-Ӭݫ( 7=F3 -]m?qG`/TE MXXËfB9~]2cfbzURG[G#w~Q^ˍp*:ALedms_(E{GDl<tD-uuY2|rYdB@R0V0E'k@'6ǛZ<;.RjަLG4T3Xmb7&qވGv9S+L/r/l9N28mLzYVʃ#FP . E+`?:q(4Q ^ #+ :E"c~yY[UI.ϝ1])ɼ#SƉցnͥ59" $'{ݥms\4|gh-o\=VԞW֪UeWD(}V":T'ɾ6s5YxDne~3ZV>DȓN*ώ* ad TQꎖFb3"svz2 -9V VyBħxd*+z`Km\] d6/Ί6LNwDEA)gGozt=R^? bzKm/)/-IQFyu3 , ƒ^&} fd/@/ yS@`?b激9cg^.߇7JrxI GrWYpe1uA"g /'R4[K KAz|˷q?Ep۽[fɽpZr/@|2wnW"fgd%5/ -/*˼$1/ŏl^ -\#yٗټ'XJvw6/^ҹۼ[Xşl^$FJ6/͋cmm^Z0/wC&7*=/(EamWIh6izZ݌ ^*q ~x$*nR;x/ .\7ބb/wչ`PCmO,G l.>.NUۯfc~)^ `!@qU=-8ע{:M)@`|գxr"{d>QA<- Q{7 m{w&]04NQ퍵5r#9Mn6922}Y zlݲr]<1pFJ!ojgW9&cP[ YV\O0Gh ݴ≦{?@F\c#M;ʑ&SY&Kր]2Us)+U4s*_46ab.AizU9Ga$ejmƋ*L7sb#86n*[MXfL"b)YVw~U~Nr -Gƴ(twM&"M`sRE,72i6kܡɅ#*ִUmsmW#ٻ;Jn4 yyw^ -YW/$vH(ϲ Рz~X1N*3yz._&$C5֋N07جhk.jǍ'΍4Ƅ֬ՃLaq6FZF.:̾/XƙYqR2SWՃqۑ#] Ɖ%Ual_Q)]mOX#i_Vƭq.a.?Z៿%ѓ_n͉++n/ߟ^`? Q4r f9 -Iw~6c8f'c -'QEu$nop'2|@JL7ZiZײw=:v%NH .݆G 鞂Fsiz=2̛/64J RJUIK`sřIqcY5j9Z1akv҉T~Z--?zt4#$>beiesq ٩x!Fgag '›Ң`ux l=^6GÉmڢq|J2g^!mܐ,0蒬x]I#ZZ֊iƆ*FF0tYc&YLUń(1$LEO Qĥ -EJsMHdQܟ0]>˫ĢY -&Ք@De"&vOq=iD̫fMNN/IZ篹GQ}i!eIDM 䣉 g@VĄ<{DܫT˚ȆMb/[J4ϋe>lDz}L vsdwMӀ2΅N"e!ӛ9j|fK"nX6z¨#ܶt ϯhB3YjF?9B+놝}jр¹'I+T~b:ʲj"a |<~O$2?^l@4 cv߷We~ވĢenʔCY|vk6bx?VGWVŋ]ܗ-F3Bjj& d?F\*'AR3-t@LzI8}zċ(E1YZ-~ν/f-Ueb -$=3\y8Ty Y5܍ԁģqB9zI WY_u>njDk4鬜ƼaTW\]s!7̲ X |; {;|lT=\0G+ -/buCpyŮ ʭ4*IX۷|lsnN$%ll sj8I6g}9TYq6`mgʦ[@B2/F?}zn(xkpz;^W𠩗( -'("Y $]eS5,#A#V\1hTV2 qDeH[hS7 -~iveHu֋K_5(<ߤY/q: 9K\"6|Y/}q 7!ĨխժU籉Hô.ԧ iw -4^ -ks^iW_ies1ekHgki8Uj!%p *cUqFYyo[ۿ_C{  B;Gk0}G, qgv5T6{~?bKULE)f|p8؋a*t*. j: :Q|P,L^ڬ@1튢drzQ >Qȣ<4{T^bpHԫKP~ۦF. Ju{4q42#%R)a/dLH?:?RRJmB/苬;̮#(-מl(UEɎ췢^D"e(~;#kmHeEIB~}V!|W^1|׌HoqO{F=c0?dbou4^5{k|R~tՙ?m͎L;n.Ow]iܚ$Y0}Eky]%}U}[L5sUL6bP|hω)6S>diҸ狄F]H['|Hd!DYD # /ݞVeF#"G;kwv`2m}"1\9 -(f|`{+iKޑ%jLۉ"(+RB?=]f Fc:K7A\uĮxz{]*TPJ!VRMoˡ _.5$ܒΨ^@owhm%^.2,2[ߋND[c^*~Yx*8C`nRi@.)t"ʣ@zwj&yGˢ+1; 7u)\D؂^0"U1^#,{zgr)!nL%';jRⲣF_U}+8b=Ugvb[Ƽʓ^>2\ )͈,ۣDW.u%-VًڧmvHe`r7USKFՅQ%שєq#Z2^3XۿubQfӂآI=XRdP]5#Y ڹ̦'V(J>hz9rﰡuWeV7nrfVU &Y# {mܠ .kBXQjwаf;{sbcdN89#氵KO -ye cWRFmN,CCl~Z٣] QRDO+-s(G6+|e}uV,z/,3C%FH]֨Yms]1JQhq#j=U_n..[ yKݛ?n:*|g$UkoȊY7nPULh_"u}Zllw XgEi[E4[=c۶\0]["'=V3/$2/Ui#ʹB]fE'2 z_cވ꘬epj7So_=PH}"^=ː5:]b\Jn036ibÞΫ5Փ<xe |ľ>hmW} ı$Ơ;GĄ秦0:V`RIzV9=mٟ 4W*'27blL o3וuЭYw۠`2nmXDO.i\U~G2߇ݝ-tWݖ@XE{:/ 'H4Tĵ_6K?.|sYr B ӖfB3vR-G&|es$JuBЊdT,Í}#KMvpEEM< ܥ7:=@*PtĶ/&7 F[΃IHfrN{M*'@w t_Dҥ-S{_`e׏+<{[ip4?~hZ\L3;8+b:7Og"QWZ*);wøӉm'}/̾?,>hG$@P@,wdtaZ"o3%ePRc2FV|[-Q#ZO$O$PM-i1:4fz׽"t$i=Z&EPyi8>Y af|2< l=5q/uh"!^㊡Afl=Z5N Mȇcɐw1}NW>Sůuu@j ԙf+^AѤHIdR0q㰅JS|7믣z(Q_<^i,R:}+'2tVHVE猾E[a Dܓi^3MDa !_pE~dMD.?Q:9wA\e?1nc~_8gJ$$7znFZUZ"TTsfڲ1.ڰ On;ζp"/ķZGD_,y aËLwM$z횅g@{'z=DX4`WMD(G.Q$ ^ݼ]9{똸QDjG;vG<#Io`Cn[|*'Jb!ၒB=̺̐U"JQKeRl3iHt w]+|63W8#!+c@d*fPLN(Τe,FR tLDeM8[E}PI/UAh+uܗ냜,YGwSgWI{"8n$&NP":Qk;C ԄddMHc'EEQRsbՐ $撱=|4 b/;$+ ~DVm(loW;ɫ!7 ˚)cYSӮM U&AQ7DfEݴGu#Uѱ<^G)?8u K/'C?p~e᥇wg.:z6z79A93WfT7е=ؚ^_ROg7o/?խbȨK=ͳٕ_ƈ(&@4]bUC.)k"HdEoȂXEhķp=lΞ«d.,6tG7.a?WtV\(S2HVzSK.ssEr+H/o5|55#͠e{03Yk#92m,fx.aqtλ-o;'g߮q +zaeIhpRJjϽ -Oa4?=N a,bV <hsYkr DbLdڇ ffKF2yŠ<&Jan0o@ݍQFAٟ{:2ң -ۧ{A`_¦N9^GR'@YJ}.[l#BjVdڕT{Td3Jzpnc</t Ku 7wƠYn^hvD[oXA Yǻ |n^brzn2i }b)HNC{ݻb{gEI -x?:~eV Qgi7qZ O}'/-M~q 64ܘ/@wo -F8A -t .`]g_ Xp -ݑO/kp%H#7elɕ 0L-Gf5n9D\ inH;lF 9?]#iBjQ #+} e@ :Jh\57hÕ)5Bd)`S+kv 0VJ\V1d%x#/tƪօ2x/?+XREϟ@Oϒ:`ܧ$ ^Nƍ:꾵LKk%6(7IQ1IK^@Mͥ{-h%W`'i1#C)Ufj\D'8f]b9f&yأ(k+69դ4k*Z=.%*uu׏ޤ"WU>Y;'OuVӜ~TeQȏf71#hKb@M,\S5Hmf%jA@Fi a?e-6N\7wat7d7΁1U\sA[ﰰQ -<͐^EV&Sϙm?Td|NmN5^ʊeeB Nꅞ; [yLke?Ȣrp#JM-6jaj V5jf;k>LsV`a驃.\Ԅ$oh\t 7(>ʭ>2!Xٺ?(i} -/f@/˦6LN&J:LuQL);(Zoi Dnu|1>+mtː/C Fw&kZsC$Z#/2ThפZl&o{_pHjˤ(F8+j*a w_d]:=7NI1b=Ey\.$wq>}U/+eόx$ճ|0NYD -TM1G~dcƱćF)e62,|ܦߑ|gU:+f mn]^|g1\rAR;$FM -F2J|]r:\X`2UѦ=p8b@Zm<l;959뙛l۵G>)ZVo%ͭ"o̕jN̻̂rwKA ^ ; τ|Dݢx$!?6it@= D+vAȊe8b7pX׬Ei.j; R/夥Lz 77;IǚEm|8jKi_:vqS* 24^x;D 4Z>z+|"W% -'JϐݞodUUq(&`֜_LeJ&vE@ - -\>,֕5A*}2׾6njv A9๗^{_§]Ÿu '1"仪*+ڵ[Gp0'Rά-.|"P@dd٥֞D`s"(J-.b8"ط9ftи0=/0Rr@23eh[Iq]彔Is['F5nȤvjNIu6]՛lb{>iڶYvY+x0p՚֌loO7!Y erY3mc%e a|6o: J7Zy"٢nf5ӐԬ3UMx L7sxWOo%bT0+8Z*QWVF-0@S@ 2gce\ޑ5lڹ Rĭo>5 wj } dfp:B1F/-Kt ^?^ejKGUt~ ^i';uC!K'`Lu:x`?e/cݞ_/7k8߬ީpM6 -\Y/꜁e?\67]|q4k|(q&0i (2RfEf?cw:g/ZL3vރ1`+oG=n?ղ"C w3`[1$xLf& ܒnGGI,z97B @4u C)HS7P!,#tjhR7 酳(*viW>jzQj?u\z1ɸ"0oı5]y9l*H72 SS@kRSD:2@ŪZ m2Oїɑ F,WȺ2T|-:M5 دC+X$sT!0e8RH`>Q%ε~pQ1T̮Cըoqsٛ{Hٯ - - -8P䘁o:rZ+J3Qu67E2 - rSXcx#GH($ -v0~<ȯѸ5t7)A/La@cĂXMb;B{*3OcU(!nBEaCVrQzvflK,1r/_Ηy;===^r~y}?4Zwwx_|8 -endstream endobj 35 0 obj <>stream -HWiW";8@#ptwoޒ%gzJ2jm;ҷ\FOroESoS)u4?7&i[mscBnhsTJd/*\P"rP;clxeb bZ5V!t&9\I!AyWL 7,fx7aH"m"ܔ _Ydo |&JK-llYrG{L'S5sAjb}F1VQ# cCͯZzNrS\h_qFI(&Ny^Ir(rtb'(zQ2^bNR V={60 uϺ7$9֦k̴)oxS˰v\ғ9`tb@T SUNk -ɾnl%'6sIr*VM*Z^a.kAX`h}C#J D&LiI$c2\r88'.|'Z U}`?Y1'tX(&iRcbKuhy0T(&Dc!R]* - 'QXOj{O%l*FkMLxaAh;D-{{v861jZ7,g#w1!X4[Y>NӐ=D Ohx#Ъ`gͭFZ8wQ~/M?.] =ΣʘZhG[:Da6!杵w^q2CYNmFu44NݎB `ZH'mra6+y,B!GhK`C{^ ,̰4)Sv$ɭM1i<ֺ3%9H{ޞv]$Nb+O1):h W 8 #lp(Pc[܀` kcW앀2.X!x,d ֌xK+:WyQjxZ -:xᆻ.xMl,F6uz^1=Mx]4KQf[?]ݗcٍRk FS)G0lc -4Mý> ZꝾc.P-r -0za70hlCѳvʧǹX^Wq`yAzCtZ^Oc^u8z]GiDzU.{^q"ik.7.K%a +gɕ5Gx=yK*O+q"1׫hr򊤺 3+]׫?{oc?9^ϛ::t=߫ed] @C >]m3,)\M6K|+X aޟj7k#'W!^tZGUn].yԎP9 dLhnj+nX{v`8RQ:V UbBEm]k]K[iwD6a2݇TN_!r'~\07al!pt5POjKĜR)DS5*gHheC{P5\_kIɸ/K">Ehaq* -'aT"9lW/KIrH*wn:,qwX;c ]2*%%x&Jj3 B eU\k\S=k.n"J& EXv$Z.ux*WSIcl8ŀ P~Ξ©/2tT'ʍ 4on oh|gLmA%tÚ)R3 -|pw+^uXgM9$9vtd_lr[YlxT;+D7&g߼fg+\1X1y:-=NᖱRZHDH(A)tp4QVT ̤Ld_")sM[:|?hcշk3Y)%i\7;OA{K4]F #)hX燣<Ơ+g௺5No*rǥ`V\qf /3[dul$M/Gar^z~I,Au,48D2& M8oRyu;j1s@;' " A%7vg=%(BHM#V:ȴQTfQ%n3'UA׾E _B=aCpa)Qf㏪g,n͡r.Bi,՚qQg`"Y9& fe^ @[⺍YE?ǵrȒLB|(F|-j->mJZ3-JQ ʏ:H#f:apS-PX R !~TJtl[ k`B8H{˪E,A˭/g_ֵ ojc%MCqv2GK7զi([}(1v`VAWфTkY'r`IAar5&: i־"1.B{>g0EP2 Mq 6p)7аP7AJ76@K%5Bw9*FbPZ)$k>2,QΓh cߏR3ADh<@Uuzf;]d5'E@oذ̟U\ a[mD?=`1`&!},a]T׵R9lη?㞧~rͩowbhu41uZ,`]=}rF ۩oR*K~柳?x!ۤZNk$}ZPridz><9۲Ɩ(ΒxT[LZ,D1JuCi&2Fҋxxg>K$74yl}ɟLW4㮂wF*^(_ƒ|]돻[dJ~>~}z^3¤T» [[+uW,zZ[ΤsZnF9(*+U>eJț9WDڅ mKw_>LCGZ`|`~HDIN#A߄In&#80j"[)5թDVU.XO1uJ.y/BR}ѿxIŮ?ӽ+@g=r|ֿx/@Z/BXHWI>plත_`|a%HVN[FNXf0rmtǴc!CT$ -5Wn17B{?]kָW=Z(4=8ӏ53S&PnVqcXw'oqbV%W;g8JuZ1}6 ߷ p |L_ucD[KPE%W܎%"%M[%'3*?02*M6ߣYTH5]G5U*kybjzvVRahc[?A.TuB fӹ]?MO}ugWdRJIFKf(`soB |Cƣa`-MQKzѓc5f/g5@eCo(WLVVҿoDnə/^rO(RR AFe,4$bLؙBHχ&.IA*/k%,T՚Mj}Ͻ7 Y);w̜sHV̹X1!Jr*|:r5:aּb/ N0~(H 0vx+ -}'W6 zLʧXr|ڐJUTS`tobdO1Z{*a(C*z=(_֗+)'Dt„-"}7?ByM>>W/v,2W -*|ZңJ~r< 5VM4F+L^./~d!ukyStWpO$>Ml W - ؃~v1o4K+;{w|LXb5AZpA_}iG[Qg.9!u;dŸ4Ts,NQ("|3^)c S5OSm1aO5ԕ% b]8eld<|:RF zw(0`b^Z93Pfe=G| ug1֡a6dv._ "SQר3o AoWx2;Ʀײ>q٦xKQccջ_:kI2"}du(JG[tbGVIH޸r{֙x =$qR(3Wʮ"?}t6d3 vu>OYgtruvO7XNԑ*Gg 7$Mq(9s9dL,9CY'Ӭe 9s9d;z YnN|-`ix] kɑg,WYVnzmx(Uz6]֛a9^ ?O 0ZDi@Id(Xc5gyaب*r, lT'(׾͕]иbqBc!î̌0W,t\LU&-N~_-(4Ces?pg-' ר9~~#eDG^n+VÜaRdA:aig)u yl0t6g)u¨F]+,a :kDjBn0Jcow;kl_ _h =,LyI08w4 -  F+ >8Lj{Fp(R倔7C%c;w ?v!|s۩7<9 {@BV=*ȘJ^=/#ڌ2 ì7(&&4=g~Yzڪ+lsFN ? ->}CĮjaD==ݱڧ^y@wh H_mhA1ŋꍌ]ͷ8t8DIrT!q`}xddgd>-*A+# dlp^[,!C[JЇA砇X# u ` 9c5 yi_"e2/GZ_u"_)@H%ظh".[K;˳i(|Dz5!09G3p{$.ȃ8 0*$u %hSIu4VdΈN2]4وᨹB-tSX320(.B"^ƟV|ᓝfWEhbS2X0n-~͍lnKH)G~hH)Qu/X"R|ʹ2{"ͽw/N%޿I%"}sYk. WYM$Җ$6LHhwڰT-A.9y(nrYJ0.ޓ+R <t ~~++,A9zl c,J> xOm-(gWV}: 2!ȠH+2Z~:I"ש~JRIU}%ܱH|<68 ?2(p'uVy߾2Jmt mr# 6HnJ(.xޝutλ SmlH~O^dsKv6y(5%1 -k*6qjJb<Ԁa^Q)9 /w܋8 fjRf.Y@."HRUF1~j\~դ75R6:^OqC*NA}?? %E:-KB>AT7u$k588{ -X4*Ļ} -x FEKJ[پsUzh:!!?FuLfasȔި\X])s䃖$IBmC&@qsBTﴃ0fhX,Ԯay?zCD8to⅐ W-(Xԑfw,@^Ok:e3KRkG9| @cdHMgUW(KO7;Ѭ'>ΥV2=-IӐ:j!L1 ؼܳ4h@&"W~?ˎm;mUz*cC%@M& ]ڑΛ'x.=^<"rbs!T'HDբ_Rk27Oӧ/ӟ?lYQڋ񲸙L.'嗣|z 'x?ߛe5!Xs5i!dE1VG0(wRU咭ߌufacja-1T1& LQ)8`t.5ۜ(F&q&Ûa -FXQG,'Ljjf)hvAP[샷u-̌\++)GMi @̢+C&`)p>ä!{``E%8X;m_)t; =ܦ 8O+mq`9j:vx$(h_^W=G]&Bq髥u,$*8w\E;Daiw|(t`o'`T9cI"c&uG,2K" RD] -7q6ӱ#=j8 Znd 3sG[O_,=쳝>SťGGXkw(ޞ,wQp; 溔<96u-]zyzaA@{yjsΨߐc(nֳ[Iڮk8ǭ;&.f76;0\'%. ǣ5iKCw9OtϜylzc̼z_^|vQO5AN^_fl0*\Riq^vXۙA紆1 ?/z S,ЧD{ߴ0E^1èȻd|%ەl==;ʩFD*i"Uv*BRc`>VxVNox?2XJ,0wa' -u#%/q)"E)dP k0F=9?j+@0LX-)BX)N35Am|j5/Oׇ uF~c |YP.tYlGX4sB\"Js#MnlgQ;rTi+z%8( YjB= ap(Sm ͪDNh< -,)=)0G}"(2m=Qh|0rj񢡠Xn aV - J, XsEXm|0XKD[jkD[6I(0^miM<Y{tcM"(niJu [ί} ޜzUMV17Fk'P]hh}25˚i]ɋyL>1y a%UT3dk&;Mp;Ȋf.4Eo)Kq1>Y'hl,N3O9:F+Ԙگ~uw&lߝSebDH>"JjdM4\R}I^W9cz}\ @.Y,L,m4QZ1b1O;Kh5E4°a<@x}m˚a88H褔U<#++ _9ڊf5 TƊ"58ex`9gǶI+*r]nMv.7&dr]nMv.'_4 -endstream endobj 36 0 obj <>stream -HW]}?K@ac?A!Doscc ѿONtH Mf}4gtU*J`̒Ǐ|Ml鼁v% -fL% qƝn3NK-n[>Nge??ߟ=}<}6p]L6@ROzVGBڎibͲ2 x±3#4Ef@Ltw,S31}ۭv,xN)~G{/o^x/oO_lX>=ӛӓoo?|ۗ۟Ǐ*ל\_Q:=yzzǏ~ou_lVTჳԻSDo]q7y>z\XrȲ% jSXJN(b :=SA[, -w˟3 (2Vr \W|9 -"O:LVƯ%bƟTdQM?iJG=(rM.7]v]b.\ -/׋V}r=i<3З@ &m ,i e p il K) N9$s;{";0K"0LFD~[{xPY i`k&1O'3^_|!mu3ުNwӺ4:DdN*Et%tWV|ٹnO_pV{B8k$*Y?)¥32z@2U3ҐL(ƴ p{SaX -Cacr`{UM,cSqcodk@ -GX@N}=кmbsb_pNɷ(.M>h[#)n+L"OOӪQdV{XL1³ 0g9ȍ0Lvi[.+>jau)gՀΖn8V;uL4SJG=?ɺ%w 0 -ۺĊF3 -{\χdv@wI,N: -݈MTy#7&vcVz]c{|igr<2~-RodQM?iJG=(rM.7]ntrM.Y\i:kְV[(RkKFI."/z}MQӜ,0g?1QcօZsioP{%- <_Q0G;i}9W5~^8}qzr_o],fqwӓ^ZsW!w+.bG -`ȬA}䘳7&P)Y~Sr]jᚪI:|Kv.ŭ}umm_BitOo<7t|i40X&?4(eh' -rUgھ;v܃w}bsadXjW0_|I -+4bӴ Nn{'@i7kEd~ 4+g:q`ϯ%bi?ɖ5}r*TC_;w%7]ntrM.7]ntrM.7]ntrSrMKX_Jj͞^}];A ږ7-< 0@DWAy/o`!ًM"fJ - ߾ȈҊKd򑮂#e|Yd򁮂#e y̓1[Yvg DM~Uo* HwBGo6\AXg&DԄ@ -%D:W!VYIĺ3B6bGmĎڈݝ9M+%njtJwH9"isUp(!9"isD戤ݙ:/8Ȉ -< Ј]~Bv{B򘑮# zDʌL o_=.^>A3Up !4Ąp0%&:(UpD!rދ\"ׁA Gb7DF#g:qa?z"#BN\~`/#IeD -}!laBXCAt$8BdBJ/_8QnͺG ak,H]~BUz6` sD^82h $ !x DвzA -3Z0[ -QXŘ5G ?EF(FQehÏf'+J *h1k $Dф(4D4 -J#V+A9YM *Hqyߚd* ĐDGgn''KZ -;(Ƭ>Y) *Upa"fHBPgm0uD}!=r7wcâv }s d(d. -M;!|[cL wWud%)#CaI&~$etI -t~X5ޓ$rI -t~X0>7KRGÒqzdG9|8-2gE9|8=0l@$86,%L1N;^ -]>%8ṠwORAb>d?wS|ztP1Nr;{|蠞c>~GuBt)I50΀qm>XK2Ʃ90'ƙb>d 3l@O 3|88.gp-2N`y?,-2gE9|8=0N[|8瘏&8`y?,8.gp90N+q]>90$k`g|j`)Ie}Y}ח_?򗿾|u?^ל5,9x۾A^)[r۹=N!z#Yg,."!򾔓 6XByǕїkC˟H5@'Ķ.Y^2+=XY:!>ůeM="@T=ǰ?K -z@"0=g}hP_j^SEWc8p1/"eu@z1 =3-Ӏ,3YO,W\)B38r S k֢ˢQQ[cKSc̯nZNwf,Wa|cw,&0h}2E1ZY[-K6~41<>}ru{?q~r?n܏[ҷwveI5ѕig54H| +ni!ӔFB-\߸Z x:p,YHiS71&>۝1"q,DͷI'(uQ8q -M4~]\ AX.D(&q -,6X&5_xX5= ^nr9~[8]| -pv_4q¡wV'PA),:Yl8 &Um(d`CBlx 'AN pR`8iy84q帜EW8vF4#vV)֥͎;为.nq(z> p36=?% 6W8MnʹGW8F̗%3:Y8~_8Ʉwrqn^.%R5,I\qQp" ĎJy4qϨPLFʦlƥ ȪS|18BMDkJ8nsH19!pB8 7I : H <f-ѣXu8G9ɀ$ķ@0(\ D4NiWN<9]2u8,EE4H| -$4.UMq|C.k؝XG pumu<}3GV8q[{)st[suR㺅'gwj>iTx0e XLsF 3wd1iq$ۛ6e˔ -L`N2npDK ᛃEJR+iy4HF0&ϴv#He-H|Y)܀q_Qvmm] jqQP ppb|Nj\pETKr6T(nlƊiMg[6[ŧk3[I4 lHUlj3f W ݦBƁ@1"M47SZEd=id(Nj\pal*oO7 c :4h5_d嶙=wV W;{W<};c x~L -;{D9I *AU7@v#Ȧn^qI1n~mcd6αl5hR㲅[_:6ʦ[\I'0+mf.wpR|]8Uբ`oLYB(#vPp osbyc 23`X<r+ſ>s -endstream endobj 37 0 obj <>stream -Hԗ_] `p[J5CK[pRSrmM߾gk֬N I/ N4Y?}>}޺ӋWwg?oo'>q'r|_??I9={~znb^qn!oov[eN-gqV,խb7Ο~a=ElXvn J簹|ys}*x.K'pgWD˶p{Ⱥ:Q&[Q?pcQ%~q:]6otdMrw.r$Љ -%0يx${ܶjذ/׆25^!I+Hs1=PZMvM׆mjqV |6zGZ 'd͡zHZj.PJUg'V}cIMҵS~ {-Xv͕N4lM}s ~9c_ِKi@uXn;ɲUd$[ő^l`'4T*o5hGY;AG+igxspܨa2n!`ǭxLn??HtGi n Cv -YD`Gr: (G*B=؉vCsdq#iB&I6q049nT{|&GcY@Ys{Ge8qĐD-GҌabwS.?̚լĵYUAYeȸu;:*AܨNKD`:8JNׇPC& -5*gAXrAqǬZrsw(@{Uo&J|&GXlZ1d\1m}<}:PrRZ {\ ܥbo݈e+A]Lyy7c0l%mlpqH:u2h`b/>p+n6$375Qrq#L\ gUL Wv ->e+iFoaʀ0c ah&r ";'[4amгA4~dx?~퇻w>%[ӳ^y/|D/Fٍ/VܵCGhYWPAl"ɔ H% ئ(&zJTD C,7LohB5 ICIT0Ͳ >F9T-F$,YV:)VܰM1DaND-GҌ"TlPjV -rd߉C)T#kW@A$Zi2qߦ zu"!&? -jፅP`A(@r:aI0AXȽΒ䨁FMS%يh>^v4OGpۘ"g wZSۉ~"wԂɔwD *g%ń:Q4TZ%*{'D'Rs63Fm:!ƭ$ٜgFNf!luY2ä'bNPD-9^ 6]F5YCk96 +DU֮EKh9Fu^"LsЬAPru|֬B8 4g5P!DU/j:'/LC1PJ:;*59f31(vX'qQ+ZBuνGdAI"̣UJ.zS8 dŸNrAsDJ`RqdY5_ uS -[I3o(d@/0LʌF;$gG|B!j4amг|QpH2K*f7mnG͗d+ڣxYݦ6}Jx=VEojA}d9X݉ -1w쇁W}ӇG'$l߻$Q96n'Qfjěje$:0ZCduڙY BPN<"Z|#Py7&4fUqJɛjڜITI[Vj JdLˬN ،śDԚ,։^%p̣z -_)HoCV͊1 u$!з2zM&~_!]Grꢜ8Q@(9I߂;M}#}}Png(SkHc YelJ,xuy;KC U6odF9ݝ65"dN}'\hGGBLLɓ#Rξk |!`,PA -m@6UA KV u#h s,kjF j#JIODmrG-'wy#- -e$9DalVo * Ujs nԤܛ5vAG(9M[ d$i`Є9΄PA*Tn MK`΂Ƚț 7 $z_ldj,N";z5 /+/O׆"F%'LUV~Q U]l8 'l%PK- %NL 5Xܰ71wNҷNF%L<+?}Cz߰ y0i ss͗d+}iYwCPAlF$H`q;I;$ DT$ Cmnxd>PG -PGr29̓D Cvds,oFvRށ@U rɵǁl}lyKqM{+Ƈr'Ш^, 2x"DNu4fEJt4[ {~]( 0\@RB;@ǑCȑtBeUTVrP"!=R% Dz2`p/gt4HjӡEXNx778!&oDQVڼ4$ܒ@NL9ŭnM}^xȲ<&Pj(!e&%)g{{"6f͜hri*\Fw70 "RQjC˒:2NqEU `lmusur_ 8U r;1f-F<곜‰oFdH Gf$FI(pŲ -T'ՕU;L]E>cr!/CY;aJVT=ԛW#vo?x%h_5 8vЯ }0U9|yGtHN!j-0űXdI7J ʻ#_D꾳$)AZVܷ_j?ŧ>q<bPGT=>\c~p -clSUPA4T%IG\^=,'CFsݓҿ4_-}Gؿ&;)wl0O.[u&s3+!gyzB 93~;$f*V t|o:(;JD 5XWΑHJ.@5bP_~aG|q *p{J^ݱʱ͎7CyPCJtN$ƬtJA.~wi,kHM".MR0Иđ<:Hͮ[ -WNc/&5^DK_Ҏ7:6I:69L.MEVZKGdYu~.MS\IScٓHqV@+JEe * -F˅KDC]wT*B]ɩradR8QZ쮿~?j͋TЂbD 'B}pGQFtP2P@!u.$ɉ#4:Uݻ#>GB1A q}逦Bqu@:4* z~VMJITQM$%ԣwuQ@2 Tug6aYbvD NVTE\@ƝTy -AT(͕ ,:G`Zfo`(k_Z|T窮͈\'\SU܉t!pH M?0Ɉ@1[ ^4s++1\$&D u%= 6"8I &-[tޭ1-0y&ny"E3%:QYqڪNԒ,$[\O\ȚfRSFIJ -t]>HiAO2 Is4"Ս+ٍȄv(YQu3"U;;7dHr\Ҫ51MBʰl' -k-'VG'(0(WhT^h -RXh+o'/}T*o׽.ۍݯ,"Aևe% T} TO_ClAh;`a;MRL$=< &LlL$I-@*f-a ucsn $A~~7xF)baGm+u~n{~Gfj* 4B\5MB;joun %ʻQq]Xԣ:FF ^`HZ^7t l ;W;j9CP) ߐ")y7J[Ql^|nCh*neEwt%QO XC>sneAHgךjL}B²dږӥ:3HoiRA.&C=޼^/{')'ibx^ɹEf)O8\'IĜra{6(q+UحD[NO2bh<&E!X3OjFl+fo֜$;bu<ܷ 1[IkU`uC"{s6/$q^e ,i]ugcj"4 Hm -Ѭ y:R 2B%J Y>fG%9\-*ϱPd;Yd?C᳠>B kGd1wĢz$jKVI,FISA#9dql%lWV #AYOrgC: &͝cz9*5OHZ$K#ե'kG-z8{RUUMDP:9媶=c=fy}"L Ez6 3Bhw l#Pm|2;MʁS",P-6B!|Zl蜖W mjlMD48e9F-rH,+֌tAZnIf ;h!4r~nQ4cyn) V.? n"#r& $-t;,Dsidi|ڵ4R]znw$dž_5k˖$fJU "Tp#F/kV~53Rd%N ]jr[Ko -ٷN֒ӤE7,MTFh~?[ 5~/W}&T5GC1.2+g #FcD`jR䜬_Y|es%T"KX`e[,vLBm  -BʱI - BP$=9ϱTtYg?ꔭ97?AűЏd[dNYAxhsy+~,%HMǿ!7>{bQ;S_CICܧTܑy"56<INYͺ(+Bs`sl%HxCNyz3Ykhɱ Qޮ96X>'YPiS딋'40f+~.pyC\{4.K5ӽKhf5ȋ"/ґYKCq32"THo$0 ~whVfKVG -1"T#)_$6; ,)c-jyA6B!/W=~c ^P.5 H?-1.2+gduDcD8e_ {K#$!g+o⋏i: :V QH @{dY4gP-Bj[r]%Q_ګ/bEw/o11'M9JZjJ8 -.2oD&_$z=ƪd6Qbhm=x 7Ќ;R\5P]XJJtINM'#*jy'St??#JN}co0-Q^J$ ϹsGm0*u~3/LØm17c"$Z x1ꈫ?s7vR" 8Ih [߲^ߺ} Nf0rwߘVb;#{X G\exg?E"%ɕqO+}7?WM-fc+ɕ# c^J95Tuzˡy /V2<'!*p^^WbQ7##`RqGb[L'UC^$t=Nrȱ0fi9=q ֿ(13#BTZtNYȬ1~uzFW:)xSt[=i{ mٮ~3mZ9fR*k"J/>6,E$s]WkVC7l|jx/W%96llMǤ=c s=cr679]y*#, ;+k6S/ 9ĶwBګ#:m^ƶN!:#TL_>* 29D9 -1YS{q+i^S,rJv5tZa$fOӤ7>8&3xGnX?!&H[2I[(__2O- 뇘Htr 2J!+c+a mhNq~@-h9'UsqҒ\H*OH<]eOg==4Ǭgtt<]4i-=#dM:D [ `f&]Z==j=#THO2[{ 9[s#|?Y#\5Ib9<}IWG8Fp9]*J邴#2O.|%$}fѾI9EԽBi:bj ;B4atʞNH3atqբ[uG~R.J]uhBuY]$>T 1R=Y̠tڝl!'l%$Tf+eG3UMM") V.NLtM`ȡAl *-ە9=f>M"cc{3OR߳3NSJy$J0??'~[X.*炯HNJnы*kl껋.B/\;m _bw-m1 -B'+w*B4T|Eޙo%Q+*PiE9ls7hXj͍UrL+}0z"׻RQ#x?6~6k?@B"OMulCe_j+,!YU!+VB o_,Pgx(98Z1>G1 suKC aT.d ѱDFY5 -)+_B)`Gd~#c-ckK*FD蜞U+aIZu~FW}NSa{5HW##rH _e#*dj AK $_0R27V/T NrHrj-N^% - ̂oUfH`dP-B5#TcO+Q{xf.> i~c "]`K}$ @J$R\(Ot7U*DA˝/"|rCVc@՚(/,$# O^PAF8JC ͎aD`ЄB T -;eAUPFۏ55Thӛt/E/R=.q܀r*L|}EyryoQnޓZYI:${S'j@(s5 w-_dΥS`ka)wꓞ'D0q48Db;So %ia&<}Kokwu:12Uu>fAKnzFkz! _C4J`5aywME77y.w iQQL1{|MN|G}1yu(Fxl00WPa`_tؙ\rK$/. ,E9'-Q;#4gP0hU2_v>΃xm.S}QA`lҬvΤUve7*UengҨBO0L>ӈs>lcL7${$>D5$gZD$ Dvp&UIS'#5ؐ>i cEB|DAFgH$enEU0 q!/CֿjȾ=+Jj[tqTʠu;*_jYƃI١hOt5OTAIk2 U`p7Y&\PgorHrGz1K 1 /fD -vrVrr,f:..b77+Ey[ -S![#Կpl2&{}ًbL_l|ih"Cc' =jU jrt军 L?D@ hݼkr x]-Ifp; YѬ"0WtY)V>m;~鷼 8i 3A5c9ς -t1}dNw/ou `cDp?W -T&5hHe@T/2gZ5{=J}R-0Q`_l!1y@#؏΁8\ gK7v8}ߢ!_r˥oqZNN/Y & -endstream endobj 38 0 obj <>stream -Hԗͫw!TIGF:)d#@TKϮjl&^.|O`,>z0!uaAC@ -Ovjs 5Xg=/|ח޿ïo.\^|}Nok| STzqu'Ѩe+Fa䁚-[t+Oխle(ܲC|4WG ]7/i`Ibf',a`@``@LN bIbppV4ͅ*5j*B4Wzh_,C;'Q}Xl,tչ+i$>Ϊ3iBZ>l(D ]kmw Aﵨ%XQaeXm m_mb]@I4$ `|&ȭ%C&/N>#j# t}rl;rP ϮFKxHBNM]ѦvjE*6-Zr3iQ16gWaA@ -k9d:Sg˷d#ZNiL 3z{4[M,:h6IbXi ndn[;?L<@#slYҋ}Q]qV9+wA ]Ȯ"0)Gvb':Iޮrޜ$8>ʍW9 U}hSV -PA*m'Yt x?H:x<]A`h XXP̚󴽜8*'Hn ֟iu2pq,i ћtSLbDթ BrL%'&3a[v-s6r>S:; tJrsX-9j!^DD9Z[&9%U3]Dw׻Ө栍I6GS턽}ؘM7"+/`+F ɤC 1L&O.TdDwI'Iʲɩ4mvr*cMDnUt۪/dMEa'@Ӑj9 9Y~2@UU;#]brO y#j-Gm3gڠy|Gu9324olRe3%pB$\Je 0QEc`%'3n3 -oNɉeJ$mI'Ĥ%Ӑ7Ja0L2j^rZOxL 'F*C~!aUa  $/ڄXKUb~|3$QAr=@DFye[ Z}H|wؘ7%0ɑqY_تlUYHVvĀ3FD`2e{Yv -vAxf_BC4ѱOK.V_d5gmi²˝,.L%_C(`1Qd',Iw~nV69|-Vzպ/V;ndh&vj'` "Ց`P3QB-M޽S"s,+A0,ՊVd,2 -i[v -.֙ jfn` gx& x X:%ײ j'&-b&3.U v#?SՈ@ؒAl&CcpŢ=LHN&*]vų+vNY+*]4D_e=SpQ`Y;4Gaj~[at -+;ě -x3ZZZ23}[*H [ 'RL& U@&SV7U)fD9O۪"(qΖi+u0j,j[ΨRA1t|'_96WGBk",C{u.Zl(|7C Y,Pڠ0 -lSu;DVjB_s@sނ2U,x~ŏevZMDg%٪e3AH0CJ.& eXE~S-t;B'?Ct AOUf w.ldӡ(DF~sUۦm_,L`/uzAk HC, f'\Qe3k`@cvk%S4D"E0dW_&Ú,xAZ-TBId -$99fu'{kxd UHPEb2n -wXLvRusEoA 1_I*-#u"P|Q,cQy&./|!B)s9ş̡Sgsh6<9ݬ @a:@x"? zw&\V)du\G9O}@t+YE8^|I@A.@),iF5<mVLQSne+ah2k44_Ơa&2Pnrnc)v%ۜU3g+-9-)⍜`qkyek|5r$5,[=c).m1wYtM1ŧV 9U9o|őUXx=t\LC:N!Z`!hdu,!{6Q~]ړH lK(!UYS:v -!kF@:Qt}SƩy){RL97w!&T|gKLYG ?:eĀlt%TVBz]pOI` j8%֔`d'5"vǫt"#[dm +gH`HSjP"Bj$ywR*?ekە)ڲpnIدIef"Wn{/iZ i~%iVǭFHXrZR KM:ƭA/ͮ]"l%6WvDYM'OvE}OP/BuN`UjۿQIR1})H^Edem_w.mj.mzT݈L!G|'̦!j0"?v?_LHdݒ<f - A!naibaUFʼn~Pi"B*/ -(PhL2u.m.V 1$},kIEWAwf+] fSQl%\i5I hTPȏ3zCuV YME!ŦKCĕ\&[I6C, n"Me+a^<B҆Nt(y_Ů^ erBENCX7Fq$bb)wTqU$y__h !TP!M!W!+w=[؇>E -# -PGqoC26-:dSB갥nwQWȘuY_:afa8f(1M"!kf^}.Ȉ fRiGޥZB;*wGwaNw@zIaävY֒P]wKVN{2Cڗ$WKwa.Hq${ 7膒(匟*d _ q+!ϋUG3Vm~J*2u& 2QAz˲ܙsop1to(TJnʹV92IYQZ -uJ.TS oGbb)wLkEV>lY>*)TԇP!ZPl2[l 2˯$k`/l2ȋSlm -~4xd]q$uîP?ê݌ecf|es2L97wi&Tވ--3uCd1 eeĀlte -:6Z&JqS{ě6 -PXXGNxB5Fs®cK`!T'%Bً`-i*l;JtڲPfODٚ${V]ʸIrmosՃde2D_oͦ|T9-9ܴ 9 >Cn͖U3wol%(sXڐ?b,!!9#F\,kbؒbPVuvp7:6#T[*-ri7wUD&INח?ZC!T57wLbG VN!d}gܭ F6ٰ>dG Cܖ'{v(T)F - l$XzPu -urSY%q4*4BzJCp. -bUU9]C|a/Jw3f0 BpE*,[ywٻьr PS(B[:m*2gwJPo=fe+lKدIe7-R$C"EdBӬ[ Q/6wG>sn%oD4<e.n_a9lR-9 0e >!w۝K!M8pϖ!ÝB]$T^3"AGw<-sׇ TlFRQ.r%Q%W,f"Z?۟lx'_=&_Կ,[IO6{8@ʈ$_aŌ/S#C߈*敬ƈbTt KTCSrkYǒ?eY]e+/Z(q?&cJÁ JcV }*\rիX,@BݡR>ڏ?}Ȇ*e(|P(\t!>c0ZdQ -]lwÞBŷ+TIa=`}%.ʖe]'ڧQD |FwQ -#p~i삌~bMVRұ}nMmfk`+!t[|+q_x))jD ׎-@hv4A\Aw0 DOaW3X9L#LCi<#*yST &4=d#r3ҋѰ5jVkFYŠpg3@ٌlbC”Z! ًaU$]P4qF"qAT7nRGM賗$㝟V -n)D `q㟽ȏ:Ӑ)^H /BCo+ >{)2|%x秕a=5A[350rc+q.}ECmp6ܜlxl&n&r賗$;K˺ض~0bzX. % `w] L?s/մK'  ?!е$]޶ćHh9};u0Öߔr++tSGaWl=$_G=r[ Ǒz!č|Zc+:[G@eQRE=zXJɆVb\O>~`@‘qM9mg(w;B eK+O u.H?xBDq -4+7Px -8t3M]`qgV!hg7r{>} {#ơ Ġ`|]\%) M&;MrA>^w@6^Yވ&/ iR?L;F||oxtze>UF]l-k UrL\͋vذEA/csHC?AzU^ģɵH3PlxS|>` %_UԪG0 hQ$yn!U:_հ~Ul2Um(r9}W?Y G*^wSmˌXs衬qXhU)9UBMV}1rʤtܧ>%O`,N12;WVv  fyu#18ZPY+/J8:_{x{}}Æ)6 -e7jWg?Qq4F`h: c"gtL={0tNS I0aՉiXqt9j-͟šo 4r#ul3ohGr -vxz |IB|@Vapg@ `1L"nË*%^<@Rjp- =wKɑbg5~ 97( Apu'*Ckۇ@! 8^$@p$A<3s*ͻT'x6: T!ͥ'P[(8*Fjh7Uukl|f6u"Q@`5la1V}"äAos^\t Ni't38f0Y$pʘ/8b\d5[-ed3H1 S% ;o饢bfs.3&+HvaS0kwA@l.RqA>Jj\^~4hrlg?{7_&08GrC:2} <mI3&W({Q S0 /ʖu n,l-.F3M u%`8B69&Ad 1 zϰ1~ X`#Me`ޙiAIxAk yq8=:lrGc O&6ptUI&&6w 'vf z'-Oiݯ%#v9A itTҔiIa\&=dFcD^^a~ ƴLjT`,I``0 M!v`eK`J%&֯ - 7YU* P$qz1ަQr"!eez4LES7c}6$'#+1pq1@2(8N Ụ̀BÈ3!gEB+c2;PwKo^!NNm1#_|S@eV]BV6(Hˌsit L_1k6BشYgdW {ԩk7/q)Y4xKq>{hރ/! L=sF$>,cc2Lvc#(zB8$]$/ZFO&/A>9WR9>D3%/=i̋2|j>9 Hm~_96uF;ȼT?,ZXA9/UFa@(n)%n qK,ޘrK=W4[ŬkBڒ0/&,7KpW^`L8M^IN!ȩ>o`l|9jCˊ+{xҐ?*>&<ơ]**w1{g -@Ԯ /::XmýxH,x?k`f?[b-LA<>ހ(k)cIP6I9qǤ:03Ev@癕T)k]AT!H@v2r#tDʀg0L5@Rƛ-o nH CmXH@x&pS5xObo?@'d*8NKyM)dN+>stream -HW݊_w-?3U! ʘ1ac>3UNuϊ +=UNUא^K-w)KP.7;Z ܑ@D5u ۛw77?__~w}_}_??Wwmw݇?w_~u?no~߱7%lw.Q:=:P<^P:ԝ8FA܆ԃ I;GaWݑlw XY;[6;N,{A^ތ؁]"\}LZ qCV5~ BXB6SѼ äpu'/nLKPKf?QaA);:&%>؍@W:WD%unl5 '͑ E Ju!plUSHw'}ҍ݈ŗŘDЕMPq嬏Zs]Gpyy`Vց<2",qU@$%' E/Z  !c"=Z)™O1NGPV"}׾E r~s4"E@<"iax{ۑW' `R} dzCƮbݠ@ <1?]:\@Ѐ>b"疒GNF\,M6H2kITdqI!\26t)WD < .5* -nYxC$8&apLM1P:l> Cւ%n cap>tQFBX@m :t #e*ya==;XRlqBHU竑0ۍ]*QLY[0 l(x9XMc{xzޥO$6ޢM\]U+LME ö5UmG=&;l2S;%K UݎzñcHp -0臸{ (JoPc <^i%盏|>6P."bL! rN XeLr`_EPAYf?YFil'r 1V*j`/ -=}ZL"ط \B$ɪbE3)-d 'd"$g$W6>UejS9{pUf]m`Q@pり!?cmG8i!dm|Nk@&,J<h! X 0P*EuΤ _xrTpSñMB׆\Q*>aab1Xζ2љ'@ _->sJަ^d0hr):- ;%jOo=xr;zv2S;S>"Ⓢ݃'|0AjWzeH1&YHD -+VݨEdvŵKShK*2l$b*7FwMgd޷|8 wszmw HjyplpKhOT -  FZH!=<({xO9ťޅ/=`ŠHT8+/5Y~V A`:2U@Ac$@rXC+Au`͚ZT'{=dkB -db0wG 0d(4P& 3,7Au=#z"3|~njݎz*CAxQB SxFy\y@NvjЄm^7:E,vL{L sHuBst%5z!]U@3=3@.xey͒Gֵ (N )Qu8-xFKF} -2% f_Ci2@mU*`jiypci]mZlҖ/PQ6y^I}{pe6=IArvݰ):PTNAԝJh.YRA#@kk708K7XPmT!2eʸف~&$ф8!/I{{I3sv"Vg$IUpGZ>im lmx2:L]'7ȎE)ҫ\Z&;}K_F1qr7c(TL܉+e|,`Ll1Շv襭a6/J>gVL͝!'VQUMa} ЍR9IiDud :7X_Yq8k@7rp Ɓ|2#beJ$ `;OϦ2Ey6!kӠ)m(KxW&9{7]/ ;&޸}uY){0)QeKDэ4:EG0^%t8!%wzi^1?}5]#Rωm>BJ\z;H0gwkQyzkzҿ=\>ㅄ܏`&aXPP!d&+iqQa:~C"}W -u;o_/;J'Dƒj"~&fG}"ߤoࠧ t`gD0?CMHHp55I4ܸcÍ;:qzbPjH R!o&Y*(灵Qe~i^9߷4<F|[tSoۗuQoE: aTNaM<v ajv0#( V)VMlL :#HڌiDܑ4gHX\9B L#*) GZYr'$z0?&k]B$KN ->m,@~K߲]VCryovT!fT.FcvFq1Vڏ` Qm+ZU6K{!)]Yt/=01Ȧ%Dy7tc֜ rK@1;^[`UA?OIĦc<8jF*ߨǢMyڦ<,8*\!&=H%u],#+/9%#a;@5^n Qe+-KI"W(%ށk@F%7{nF䵍':>|ȋƭ6n'rm{z X` aOnh`/_> /vi ƢGQq/Ƅ7e"qT cHQNKjR=vʱmT`d@owLxUnFB@Z@~ȁ*$!GE<# C w",5#yl"]WZNZOD13zHLa:^!]v)0bk(#>$bQ; JμU*aڍ=0BBJFv i2evip2i+NC@|P8:Հ1'>{mcE E$`)o(3D}lDFWERۃkvFWjǏ,Y'߿V_\b_i?_j)>6a}H% #X$D^X Yj,#HA@N>"B03BlF/͜Zi,e2'ڦiQ4NN;\}Y@؞=#@_nüX bԚZLDUdtgb_D1޲2mCՙE$^[H|1L8j4VdWavx[Mă*FT3R$>i{)Q#Z8:1DtR <:_4z -VnlS ^* H{h{`<c" TvotVq#hU~X@F'' @ M7HM -~"DuZܐ7r^}ĻȋZE;'$0S *vq>35.!}ꁵ3x$jkmy`UGBǬ7iu i4Hg -?3_=H3R,> -h sm8*7~#_櫞ǒОHj}us.^g 7wdHin~k`1`jZU$->_-xB0;){B|߮|Wx DBj]ɬs@օUN-NA8_ %XVE]DDW«$(3L/X#w@$FN5:" ^u2u2uec 5~u# y7jG048e$\i2jy2?/Q̪+8e+ #"#X/i8+2 T fdB|J=AyemOqLI~v"Y؉l!, ec! OP?x5l]%~">Y09ԀC`Z l\;s6)' Ht?ڃA{n2cå@c֭y#3ƬFҌT9q Fƨ80#zLzcWRfԃ=r4BVA" b8t+ Gr7W2fiWZv~_ xPY2kf ܹKt7RL t:5ʷRHo`+4Uwj3mj֍@ij% l0`@<_2 I#\l5ծdWM% i8JdV'ў {PQ =d')aE v[f6䱘 -ijuVUA#75 -Ot۴0{Rˆܱ>Ϡ Nd0|Z3򼣳ʘ&Txq6o$TC3ՂD:cplfW#f ,~8sFvgw8MgU#(6_] -Hq16Me&8 ߤA.qΪg(yj,ychza([8f׼ndp?(UA >[a #jn. YΈoPznOV5 ɜ}nXfGin[UEU{|q;M FimEҪ&2ɪ*G -ɪ꭪"3ZUt) U6|ժ}]Kx02T8{:U]XT6Nĉb{SdD##Yv7魱U#$~<ٜRBOrXׅRnd)_}ewΝG?x'\J}(O9W'B'8ɻA%ĞEkAg <&_t8pu)߾R!"x&p<!6Ln@K@9P!v]? H Q?Z݉:-0O<#2*l#X2٬mC%vѸtaa!@F<[z!x aWVYR0рgy*[:"@ @jWh"v+g5);$߹W-1 bpM7gt=(se_eîpFCk[QT\e\FF (*kpA&qڗ| f c$/?*6sU$TDK, \tM ͔nwl"`٦ψH!x & Veuv '(lT*tx%O!KO~-Dj5U7?&'rئԍڃB& QToR1V@ʼDb@ qSnwe#kF$TQ?#CgBRIot_]nӅC -1T4W a<9=. bZ>*'pQ2 -C훻Fq&7641?6{wɝn /[uj*Ta7^;5Au#BjT[ lxf(?ޫt~KA04㊍LٛjzSϲ~kO?D'dV'ў/TyGce~РivG  'S$)A.C BhV]];(ѣ2TarIo]nP-ٹa3+:U;Ow , -paD6&&u[} Љ}eddʼOɧu~ >m8 -sC]!<4R -D$='o&7"DBj \L Te}E'3AZYA_Vj<%@~"'TwA,+X==! y jqw pf9E>N[L"eVC!ۜMd[F$5[@Nn>`-7A:n|= u=NEH?@<=.A:듦Gmj#@JxBe㶢(}6kX.~OЉl[e3jL73Ҷ\-x rG] -%٪Z%C¨-v -wL[r9RYda$5;0 8pЌX5 [aD)D,D$)5Y9 6’T*RY!yq-ý`s+YՍ3OtŲ -]dvu-Ji 1_;WWш/?az\䫻0ݗ7[gϘ*E/1 a'bO"H@'3B>9LhI \ -8Vl8%&UH3]@yjPnm?>C6j|";LfkB^,3xDel?]k_It'eIT:ؙt@~d^ [c[f@n:\xD ԁ xH»"hwBUXiTNje81qvHbK(Gh_ۊl -V >vlձFznd4J )* gy9Yl'B)W?xn، Ĺ@J{BlT5[ | P'p-6N  Fj^Ԑ?XΜvJ- "F@0w(G>u,9CI:eW -{ /v`vWSn~LHrש{G+c~[7\[=j}r4&R+:t7^W'R]:"-|aNcr1SPnŽޜḼ's DE-TwlW,C4UOPm4'NT+Ǝ-:T0+0cP1Ux@Й5V PzUv ׎+ԁU#u`?.<f -.~P $Y'}ksBz^NTn2{WP@uuwo`m mMC#KijN^4Լ>zP{PL b͙d Q%<3**;BAz+yx"W3CIZQ}l. :RQF/gǎýgT_6>(}U><}'*c:Չ~Y-Eec?d}\Tf;zs217LL^+푅JԟH[i0'/@U -i# (QNqÃp 6=*1d"L '.LE'gZ`OaB)!I_]:CH <\DUf -uu QaW٦&_Nl64G`i|S2}9#6ufz(8k` d˦w [>A a0]pˆ||)+ti@8R`$lP4[kPhx؁$S/>QZ]Ī:RQFǎ@3g 2_opm'o@BR]Ent ֦}y_bCU>ҼkO˖-{ T +h!?bN$/He`C=x UqPebb-kUE`+j}|?TS;ahτ,3 ]6W2mZ@PnMl|I–$nCH;Ė>ZpBi2F3 -}*s37D7,3hWW!B̊XU׽\HPBm.+CP-nv\iy信lvƝO:RplMݱxTBh &:~jV% $BPd\5(P `Nuq["P-骞jLg'L4pB!B:HARh?AtR`m2EM 4/̾!] yf}J, x%"p;o NT DM-,GvP4 RMhmZ!6KAEyXd@6HA w Zhuh B2KA3)t2QQucd,Kr!37qymG0CcHc>ɞФp^C|1jU;m'T#ah)ﭟ0{e)r$/u7U/ېPhL&Ҁ6e_V.AG Uil-% o:ѱ -endstream endobj 40 0 obj <>stream -H]7?ۄu{jò0U,dC/WݪzZ>^ cTzCէg7oo|uS8OK;; epKNAⶬ!vc8TO,d˶ltzY O%U^ĺ-MjJN7u<Ӭ!e@ĉ"**<جTrB`N8dG;5UC7寏~o?׍__oۏ,Ar rqk0R#d2Ʉ#Y,D|)"3I|Ȓf]%ڇV4P^B -_)4!'Ƴ ݑ rq9Gzb1iGsڟ:Gu}ݓ+܆p: -7RO%6ngijBnV2Shr ?;ڬ<)h=4eꯆS]!P@ܗ` bbb'ĩB&{~_֤(/@󖟭{:E)'JzHQ5d#"emLQB<A2]|u 'GLImO$ 6V2LFoIN `Q8ODm칳dyWȤa$Y'bX83%eL>$KasU"FќSNQŚd*WvbЋ'c0y"vb0 E`z4c5u[xt(|w#H}$'ilCj.5F$v͚ǚa샤&$`_ˇ<\DWHpxo5"JyqpAprV!8W.ZJnhEZKnap(bjE28Sr"bDrp>\v"A4hhFS ԍ؇mF@6R \N1YMCp$;B5ʜD `9|GSXV{ಊc&ڴ:iG|et^I4{b8}AgpOjs' el&^oEA]z*ҙ{(F ϖbcm\^?Jlj}1t8qg@[ӍB]헍c*0UgwaW+, n-12ID)`֓ל/L$RD0ZR9 י5[g@Ig)Ԕi w -ZxpZ/Ȼ0Z_K_nƋ -4鎩Ed%.:7{IFZ%A-iED4RMXFj/QUWk0)a2HoPpJ-7lOiCh6pZg!tx]W}u'M,FC  ;4ni0$#lb} Af/%x]&@ 7BdQȃ!;x\paWN(0]'7 V) j|?[{#1Dt -'ͷ02Y!3N@$~ATϫˢ5Y1gLǒ5b#8QUW?YkDguL-"D4Za d!$bGȣE5|_t5z|:Oۿno7778sKY{4)?=ޫYLҗE'kJ2^>Cga0 @14`W% nho(:f(^/ЍfzNK*yx Fc<+O@푀0^t rXة9 zA`XYS(zaB$SqM!vL>y&TXƳ -LbȆe@qRĐSW:V].j܉uqm F\ P"U:hI;,SY N؂ !KTHˌ.SOIP~ZBa8\qp~1Cj@BSݘ;ܱ+O꺪:SҗҠOYIebVE :Vuؤ* -F(j1u[vS -H($*.ǧknm;YbQ#."@5ɔ/: )Vb_DD^✂SD)TȤ h*a&%ew}[;~G\c  uQGL!b/=B8k ^V"CO7y]$(kS&`mDEq TT6;g/ǂ[jT //PNŹ ?ԧ~Vʲ`1Bzf7on9bӮg"TgVXу&ru;)#!z\ H/#!WkR]#xFE9&e؏y̩4BDɥEAdU5F8.HPqaݛ͌\ -`0sEEU-Em"KC݌R~y׫LIJ܀/GcυDEtWI"U`&’_E׶E@r%Ј7^-ǂ)4P-w#$XnEm],1 kkD *7GoI t!P0mU|"EFZ^T))ӶXm3N/dT)o阑+On(H$:Ad -kmh#_"_.Œ$Y}"0%\I(OB"M--6'> :1BGA+'rnjq'TSyeJ#`ʨ*UHJK] Ȫx\lCU7UTk5R.V8XWbX0SsTɵۇ?ZL ϐ[7VK9$ɍv_Q -BDIrEA\ԍkHHt34rڕZtAi_2|f{SuPwnf>ӍGm߳zVDxן{T\'xzD[CM1虷DE_dA>W]o~}AjO$G!.$2 -յA=ˀ-gzşho`כLj _O49kO#ӳ9vv/CR(]J{D@uZA1ΐ$K}"z!S \HF(}L(5L 9 1{9юnc,k`:WМHL9_H -'Cel@ԧreoRMv ieim-\ t!4eJ,;i/#_&D\u,$DP:3/㑐0|t:BvzhyeJU<*K x^d)58f,ȔbF_5XaF o-1,6yQs7[rZ#͋^!xAF/$>9^H]kS8R 3NRQh%*fraGPԠqhj[V 5JGs 0quQKSg1)r= 6rIr`Pjzls[nl,5NzXFeIӃRQ[|'.C =h3Ko\JoAoV9+YFx$Y a7 Y3"/Vђnl%U궑$]x@DdGρGdECEсu)lCBZEx@bhr|-btC.5k: 5;6[4\+E(,Mˊ Y(2)6(Mb%Nl4 f33! C\.(6ʕ-C4lљ 6&!-X2(7ws9Ģ6a (0*6A[6xhŖkhg EВ!bY%* |.UjNI!QQ$e,M" (;7`\"VP bђkd] :/!Kـ)6pxd(m5gf62eX,Q[W R-TP)~TV\LU$C4 l%ĘɆbX 0䜫T׾䩨w-p~!a!٧ـⳟ؀2k6$GaTHlT"EmsJfN -1E020*ܪA*]֮ -D&SSҦJr&mDFnoMrn1U'OE҃eCVl\{B`&VfAc+%QqwAcI2@c;K |\7k:lB!k mYy.EAw6Fh(!]R"PْdHIJB4MdpI S\D vJDh$y3džܥhJaER7p |09 AWkn|͏!*4=6C}ht0i%pȰBv :mSc(˰ Xj7U%KbKXP8'%_41,iɀyj%4 !!j6Ԩf l1 ]'8l8BurT8mq c,(h&&ڨ׀CQAtҢ-^{p\{`pd|1-8g2$v<0}h9 ɗf/X:l%;"9 -9rsHԯ ~oR(NTD!TCxj2+:@d-`@S a!bu3t  -Zt뀓OfԬ{l/Y4N,['K+jݺc߽ _A:@"ijID+#c:?{q{}Q/w~}~ssu|vӛ_^n^&ݳקOƾ1jy``/^{-#z߯o~N>/G؎g>|w>ǫXy~?o=.qGon 7qJp4Ǥ@KCw8rQcfwpzYY.FhC[bK.!Ł9reFL{_Km~NJVt#]y(-%/0ךlɻ#lu{@\o%o+y[{9"(ynY=g^vf^EQ/~~T=JͻFuO.!#%ߖ @Cpml78Z,`(oP~aPJs{ȷ@ t>̴Oؕ5%\J{H{wW\iBEɫJeŕF՚S˵)4S{gܐ]cD"zl%Y?Դ̵1vJ/_CL-(%O\<#-GvѶFGXbVPrB˓ɑ@irϞ¸"[ZK&sl=z#6@-C\Zˀ1$P V`@qEk`VrGCk`@Z"#Vy mFoP8%KhJd\Pd{%9o@$Kl@8bсWÅykP,rg9xJip Rq:T /. :B'TR\=E$!vA(^w ~c>[.&m0_j -bpk.bą S2S\2ر`@$. - 0 xBv aDc ^t`4u %1463 s M !^6=rFKVd{sR Dvd ci9[f4kY؋lMCVWs-ňpV>Z^ߴb^`Wlb1E%yx1"rkN/"+(Ĉ[J1Z)1 [q DyaiکD!f`&ZNaFvpݤLUmF|hB p*16FQpQPbRIUJfT6a&fU0݈-h7xOq 7@Y.x5TIAY Bث"@@^%k9 5fn[CJ4j 8Ȉ{4iqͦ*52gAjH2$(5c] cjd$<J)p!|U -F >N5{ﮦ^.H5xI52K0jtXXQh'y -KVdT3I5:ZΚTgB+Ƚf7jY`qc&uQY%$ƀӍRorUQpwcVƀ{2 73 D)&ޮE'kAf3nQ :L-v)E!GPr0!*Z>;**,؛i9MRj mG9k;7vcv9m*"A V?N!>5oBmrtZ<^[jr5R7fr[>r5ظB^k- ޛ{cvC Bb:^oj~xlQBU^%pcz 5 -. 5 -Nnxbz v 5n6 -od/X. µX10yl[`j U)tw 3 dmK"F_e6:[[([9@|%c~3L j34"jf`Pwǫ!*1kMf6`6!J 5iR C p5pR r)7Ԥ< B ޸VW~Qï7TcUA1Pj 8 Tpɨa|TfAy4ep\AwkQQfǺbPbfkDO^PIpI{>~/݋GϾg/h.2~s<_Y=Oww_?|8˫.?gĢ-Ͼ>ܝ>W݋WG:.??˘UOykM> ׇ+Kpor{@Mw{I|w||Xvoq/{5XܫŹHz%8^s|pĨ# 7Gz֧bq-UPR^s{2`{Ÿ4!VOm%5i"߹p+qaHPJp %fFcPǪؗjr:Uŏ -aI:Z*7^ 7׳>p ?d2 8Urľ -pfl"ek@ M+hUqP[3ehXe1*Õ(9]FCO1\ǪH& - 8X>߸@K RX:|m5Vg:mJ ƒb560 -^LgKjʫl?e$щCU~w].?-!6N{6Y7H - lQ]E6+ۦ6FBX{<[6hF݅Y6e+aps' G3f>ckI"-"AlH_ᱶ(՗b6h teքJQfgdW?e@$ -'FY]ٲaDIӁlQ*Ml@9T6{>_pk5B8[nh_͍lFx3*s=2[h1p2wwvl8g&Ё1bY=nZӚ_ͭnVU-jͯ r׷˭k\ wZ+itaU'TXb;)єxfns;mv3;| >+Y?eb kAkܷ{wx],w(Ş/V}UOP] Qyup - /h, -aW,.֘sˉ"'nWhEpp޽^1cb_`0 -W@F^_I ^q&Lx9Pu0Tv߶}.4H q$PbRmPQw=rrQx[{ 8,)GkS$JnMDQ(ڶ}.6 -%S-%+!1lM~O>; i6Z120B]lӰcYզaF 4PD_񹼙琺c-cF>ߎKJLBDߧd{m8ɣZ,ݝbSY*RW}o#7v5ȔD|~XB:&^-蛹qAߌ;%pЧķ_qJ{geb<0ՠ߹u.?*I1uKq:|ա/ - ?73 oS#/@ -qC[!)Y ZE qU 3 `"&FQ;e o=H)-Dl!&'eG6^[> -W-r1|(6u@\ i\5l~YLsJΘc̕ ((SUf~rk_A68_AW0{ĺPi0(6Bp'EuB bд֘&inhdI`GUxEZ:Y-"^Y pXc sS;7N]# y8h*Ȉ~sgCo@+(wI詔AzIلt`gA)Z*ilKV)$vT30:{Ex̌VҲI+#wOJem..cj$Tw6FSUAs!FtPf{2H# 8$((﹬0P$4fxBHQɑhrSB)N f6 AoS0X -endstream endobj 41 0 obj <>stream -HW;] -?L8,#rDir]sm)|6oFL[!-AoPIv p4i)_?M0_ CC>WK"(4m @n"B|]~,@? -za ?8"o us~}G 'Xگ/I.LZm))ڋᅅ0?ѓ-~S ,b]LK/hNbn{B-KU_ sD[#QmPn1q:Qo\OdfEaҮ.]!FY| șM刡5ъt=C۪o5} -*y!k * ֨BtC#J-btt\qXO`Hlݥe v -|5*|x%aM]`-Qh<#45B?їHۢhk,m :y;ۭxU9 oRQК|u¶-gnrGp!Fo%cM=V8P'Ni7DЏօEõH|ͦlB tep012ʈD8]M׸s'yb4l݀|p!ؒ\M2/K1AI,hJ^yXӽ^Gi9t+pxIčׁ>,7|ǟ?[c+b TEeհʑJAFs uhM}f{襣0_bTNQg6 -'EL!"c͝s*$R菃BEQ@) @vrGjBl bZGҁd@bv?\ K/$kK.ʘu'% ޑYEw1)q4_sKƯCACamkU=Oˮu>j{"RI=F;rY*c A?D>gިOFqofbQJV c0_mqLt#6&rg)f!E1#F0YhP +U]Mkz_ۭ&Z]qR|E̮=pjoA>5_?6Y^IֶNAZdYъ|2BYǸ\gseӸƱiTqG}ul)NE/v!҅C}I/Ү76}E/wfkjuWC]dѫp -GN-P'jx5)ծM455hWe3{ -^oʉw29OU{+DO[*\M;`>@vd~w`-&<GF{U$%E`3}UL_Z1UEy(2e.3>%JxrSҞ"8{{j9н{MA43,T:L4]>݊!DiBUgCg^i%zQPt{;_:* גC v\ 1rǏ7u>n$o -ȞU i~QN]n-vh -`X3/{=! i$yk{C5}h P=HSCF%{(b: $Jv+Ro/P1@9XfeXe& z -Z_g~l֏nb{mbFC4[iCv }dHJ=i;>UOИ@Hr uԄn$ZJPF8& ~ y&{L}T2^oyz΁ -O{|o`|Aa7o V8vtEa{-B8Җ\dDƸ.${$2GG\ބ[8.*7Y6stmQ@2ŢvP.ٖTm=}Qv|ߊqv6w[q - ^sGe )p]"P΁jtiԿSz'H],V;R"8XD%p6fJ :3-ozDEr*@XE R -6@+,ъF:`2 W0R sF:gF:x@ttu~U׌n>RqgF -f>QȨ5hMڭZi@-黎#Jy>D], gz+ibZ#ۮnfE=2xΡ1K-Gʖ)j9*<&RH*F1N6Ž}]ocݩl3!0à1AB. -6':FwVL8`cЙ_w ;_Q:}=@C@P!k*apt z`'A7AeXF{G>ġ?JHvNޏM׮R&דߗMtYHkt$#}cZ X^fD;b*PyiŽZkB1 Iw_u1G7KG(YD ̜8sJCʴ^P[3XĈJ厴:׆yUwQQ-aZ={RzY3v}sfu`aXmk%S%^)_Q&eX<|OkTNg*p/y*}ΫL".w^ _fY>]Oy<63WBF{K:#{3u$̋D48{bDtN;=;NcIW7nUN*_y 4s(+O3.`|3#ɛ2Ii^?(qܠ#OuL%AUˠ{b+*0jDHg\9MbUa7MY:*B9C*fyLK0M/lxo:Ʋ:bA[yڍX aˤ1kTo 0#$i$|sb(y£M4o5vL/p#" }`"w/[6#+)zJTXE RϮA %6^g Wl1^վ6ҫx |2De䵰1~E96O՛NZ.J_o15Cg[6EPT90 -`k}</ڜ2Oѝx&\3V>v|ךi[+D MGueۼPϟ5% 经'rU&ށXRe,mgJ7|ꞣPSZJvotQrZmz)$"9z-&9{ |9l믉;^v[L؇iXgslG O ,CS76"%e21XMm@>څs ^_آ.k3,:^WQO G%m;Ğج3N;ivvQ( p]1cgfAL|J̵.5|K]n|fy2d.dý=WMbWEKSPD,r^Q5)eq 7$}E;bտ9&d!Z2'5 ìrg-&_ԣYeQ%hݼ08ϵ0+9dø,3L%~L9nW,a'"e"Y}]v@W\徬>Uy&KdpQs_oxXr6$<}{ٯ+.\ l\M=2gJxXF -\UK9G"Zo䰭gM>leWkt-ڸGˀ7̾mwwE =v#?+d_?Yp>.oR ܷfc"V.D%7> h#%\[Mh~6YJPC#6]{-u*ZO7?8K66dJdH- t#|_/ N";R/8%jZ}7xT,gp}Qy/)٫9ilJLQ$6iY&f6.H =(兤I>1'-D%+5 >0fekU͟7C},kKRȈqqmܗRd[~xkW@ E1n |lL8fŮfѮfҘe {QU@ӧyU{?^CWk6x! 5a4f/k0o|NZGhvIe@.f~}_eU(e>=>EjYFkE!:[od.(8vw܈YX92a^?}1b/=3ǯiT>_2??| Ƭ)Z>&/64, $!]D}1L|=_~wWgj7K+>(74{~J%J H+(@(A D0?3.Uo|i\vǢԜtYms v-Wĸs&6EEJQ.7Rэ컰xR9Z#3?h+נX,FIC͏Уx w68 -[\g -QL2F s"DZw'ꛙ{w"|Mhߨ(}\6Qj3|zl/U^kO EDv'-KHO]v>(U(SF2uّGO F􅿗ar5xT%ye(M -1S[|b[g.nxC~ңaav/<Q )Q#/D DTGFmE8]7pj*_^|g~ˢ`yR5s Jt5{~G_ -k[x74nP,0F;ቤM$x;7U:豎iGC?56&@کZd@n{moVװOd֮|L.3#gVN"r}5^68 d' \R}=,} -*)v~cyqD7q-#[U~#uGF{Q WL1[UuƊI.l8 -c$c/墍yBBwY?w T?;?sGS=A@?<1~s:VQT~GKG)$a`qeC\,<}=6PwUEǗ?Z9|;M- CU{./w|>lKVZ8*3Dej24IhjeD16YŠYwaF<6xf[t-9qIPFZT_܇Ұ"3]>(V'ã -A, P&h0g|y/_a(ڣ^^GwX܀aB;Ѓx:7*>;{jIG\ijegN z*2q; 4̆w`9jrlR@G2uΙenJ:K$Q weไ5;)'Cr^[pzN7g,ӑ-L .d'ZL>zU^rq]^i) F̡“{c?{+>ޙĮc  ۱}4,fqFUXroz%w6Û8߁O|} Poxv?;3fuKû|!os(B$D!G&|=T"Ԉg zhy_wLGYO|}!R 0ׂUE kLp֔^kJ?cyT2px!Ki21~&o,7Mz]<H[YA!@ =\. ~1;YS{ DzbSQuXlNM_Lqn 9PyI&Ȁ10 ̬Sz$ظj, k"*/LoəA,CDڐR9R"xsJY|>jyKC Jإ'6/"_ΗiqE@!u\O(Jr E@ӳC+\R -I=ͼݭ}ZJi ,ŸE-] h5b}DW{5 -i,< G#TYM+g-V!=$ޅuvBİ{vj'3dSvQ/vco[Mzs()SW$Mr/T̽Y-dZlL@~oâ̒*"IU~$Rҭҽݯ9fP`2E˝k;Zn/0AP@VQlL>iIi5hSM;@sjH*y'y z7y)g_7]P^r8y$5MCZ4j :cR8" 1hWTݕUy@9ZETT5h(eQf#1֔>^3 볓 -C_\|-xO-</QY_n눪cNyf }vuZQm`LJ D/M46d -ԳnV,]L(fo)\[?~XT5,СKf4< -:E͉hE -4ȣk~Mxq!SyLj.bRr d)'ԇxd|̎k -C _Zm=j 3H3k+,prU,TyzPA۫}O8W<]@HzU ` -SsS`RhُY8qQP0[+Zn(ƪA߮g^Xh?{k]14+vFJ ׷@v۶krވ@wy15~w.١(Q{uB,CU_՗Dvd)UG=GJT7Vnqݨ6%{!ufk7LRlpcNu&+RΤ]rW; )ܖ)߹hUEݮm՝iŝu)#N1 D?4&vȵ<~Z8ʤY{żQ=IЮyTGW@{dZkgBٮ:f([!1}IaV+ <$*IT\H5X'AV`/biH M$u -@dۀhxg߭v{A͑tVGZAΑ0{ >8vqdUe#mX8v/{ɬŽ(OEeOwXVwv#!6_2 sA+-vۑzXBFtHyI!9\HkS`dHeeaEsR8sܰjspi^k`HY\Y໎)%i)PWn~ wOmڢدVoȈMX1U䳰,lS]S w:Wqk33NGj?Ȧ79Hj~5o!%۷?~a۷In`s̯&e>bЁə~<@s}uG:Ѽ_mH2 4h=p -xB&g b>Njr;?shd_ "'"tEvȮz?f!^E4zyBlY|[$ː3(VJbn(˞r);W2[Q(bl9cCh5T@2rt`\U?Hghlr:U ᙾҜHYߙL%&E yU( ̌Dp5dv+| "mt::Z\XulCeV5[wLF}:xl$SsTp=㔗"V+LI"૎%Kf5'?Y$_O -~|O]-5M>Jx#HN>"e$b=c+6P7| <8%ƎjfOF; m*%O ʩ\}oڍ Dܗ\5^>dkx_'>k,iXa /䝱_nPY"sLl}ߧ[lqYύ/L >.(^=z.O*d J՜}BQ\1KNU/K!BCF,=C2\ -f4 yAa}RaG[~H=՟9{PQ@䤇b\`uÈ-ш=(xrnUzQH!:8l`g ĥ, <SZcG/BMcw*%Mq8>$qB6+I]3)×+CS@ /߱k[T1g!֭il^I8z3^[$?m\ʽu9A,$wD鍏WZ|ƚ3M+De1 -ܚUe -/wUz~d^Yۮ@,)wx%U4bP) %mTӥCz·jZJzώXX $;u ]Btz]kW= 6cMC3ۿ+Ztn:_V"Y%U-$W-&f %ƙ}fGoehVf^C}Ԇࣈb1"!آB9QW)`ͼG-1BVe>SYǫ}K |]@HzU&g`*Sڐ]J2%m -:rɉ@h -y K%WjjΗλRdrG)WX(3SbO"*30ei|^#>eB8h<6Mc#cN]UYsmhJwUcB07 % VjJ^iYKӊX6Sf> nLMw?naW/v;u%EQ@wc:̃ %=#:JS0WZ{6jGIMoV!oW$qz~6%3:2kj-o?\,}Ϩsbd"\P̅@JeC_jL(sY+ }k1IFRf!gBzcZ"9h6fڤ0`֝:CsR?n(y'ͻb@K=f9G*TZ)%E!2l Q`v)~bK[hamc nfѦ NG/ڷ2r# cS7/vLy9KeOƌ`]4' -%v,2tWPmfk'ү0@70 ʎ+^;Bݷ1htt,$h4! + : +8v5'vٖZ -,Bf3(5Ċ -šH+&Э?~@`AӶ Nl8'.fsJzBY?{C}WwԃN81(~XKT(?(49{;?Ӯ@bE@h0EfeZP`F ff"ַZx;K@Z6r♳0Xw{"!dwaƛrsA `P s1'f$ÄvrHP:ϙ}EV3Z""ʹiX6As͊cih" GdU/5' ;kF-B‹(9ՔGW}#~;SdVODsߢdÒp_yzd nmkla:#1S"1gp +H*ɅIhP$m:1u ch}PN)w&U}@&Л➝ţR ̅yb? JƿQT||YnQ÷yginp5mXᔀdZgZӂ&czH1$Lk|IukC 65n /'O5RRGUh9]wLg{5sE Vm{h_ܷ~/Ypk8mw>2(T5I:Fԃ}Lj€۬bꩦg̪6$-Ƈwta!l*" ,~Q &Փ'7:d: <}:I6{Bm9өݥpn:yNɜVYM|n Ae*tYv[dJSo?kLfMlB4+F1rrI a\Y/bs@Fb}QT-1xU>ًZ#f)PZn=o<{s^dՌex:/f5Ts©8=¼WXOgoaF,[KH(ۧtYv.UO )z8sX~Ma͔3VmP,$R>IQJvN]¬:k(1ԯ,ڰkigwvJnZ3H&JSP/ I=.I[=NBOu:{nb4s&ь񂬼w 8y9b/.z}X,S-!Y'vZ{$eE|lpw~W~1onlgn4ryX*cMΛKIlhv 7Y,t5hM HdM2Ji4Z#N+:mtWEs<]::ȪtBGGMkUjB~) HdD>n[F0aHeؖ3nM##З`SiKF,rˈD-#@0KFCFL52[FRٸU$b^^*"ڷ :_*$4ё y%A}it~j .f.-R}yDŸ%T2gZ]GK,rk[K6Z4և*Q̝xyZ?Zׇ"wKkeZⱗO--o/-O>D@ bL)GJ.R")%)%*/)YO)mCJQ%%8KJ^R"-%)%@J{I )%xv*WcD"8oo% ۸GZRIju)R'rKIç~Op ~^ZcB  w -x#D1gf}-1}o~vw\{|?ugTY-~uC%ࠃUۊzbR])T4PK|BEz@^e3¦x'זkztרxt''.g# xŲҼ%y7Tn<`7̣yT (Č/F%*Si(khČaڹ2p>mY#ʬ>P5,XY]x K[aJ@0[Z{_wi$Ж[xq-NuCgh\V+O2DɾDIãAHI 0|2Zp:rY*("܈2\\A EZOZ ̵,0\~ -F>nϰȬRf2ХGhAJ\?֓ȺQƊ,]ed- -goY_1js1hћ#Zke=s(+W536[ *+}MzGMe'}bVϲ4C q ~sc]AQo u 9 EaAdy@GvִH4@dl#4 -)I d;!bW"@sYQHf!qݓ :umpXaGwر܀aC;Gw.oU=gfwNX D{!PY[V޾+ޥȌ̓ MQOwo2?>2̠yaL.r,tP>e7@[d_Q8i1﫣:d^b$u5P03YJo v.-JGk069*o쥆KPH޻G@=՟ѓy]SP# ݛf؏l8e5C2R~*zPL=ȞPW$13dfU5- -/x)f@P߱T 9HL]ߡKsԃmf5eFmt g9hxT IGev8ѢwWQ8 -c1c4/G3qn>=1c9n](dVQi)%-ql=TY!(ev6XWWa "Э'B+j΁0Zɫ]24z9Xg, w߼Gߑ+X 2=gZgeeVS0ή\ybalCq/ 75د*R{$pͰup~F:o&FP'G.цE]az6 |C;[~IrA"2TI V -{(w.v F$d5rP"SfS-[ଞ|Ҳ2afl'dMV -^f$lJtqdl*2^?mfҏnHuEn*׋P τ+ -'25J7wL&Ÿ -:Inv,<9R}ž(BlL&I5UU K҃p?CJh n]dyzoFs-3r9 -$LP{t e[ҶBjNб\XʬV -ȸ#,V 'o8)ץ@b8?[E B8Ιތ͖wo"̞n>Q2uPKZ`-Xͮq#<cʴ̖`ͣg2D8ŋ+F"}5cbJ -fX6~vh-`.t vaTyZq@"k㓫pF'QRnLBlK[>ཁ" })1zk}w0N&wwwld4ٍ.qⵞf>d")-VjHEEt\IĮA!UO+̏9bHEw)+]rԾ~>^W4e@;F+]YV}e?ixF -9OLj~^fHGf,wP kU/h^Ttdw1b< @Um76f*:.(O)XkN -ΈUk/PWNR)+Aؖ,2|N~-F['bկ -eU -?gMZ.0t {^69[( 0p%]ipBFc oͱ٥b&&J0u'"sRSNq)n+:g}É;4r]la-;ӭE[tW$ ]wNTH_zU\V.g~7͙ٽϥtGrHh4v -ìԇFnA&zw)F'(:p(@nX}qߖL0hc[Ci]^35d"-f0.va$u|qy6b)RQvj3;suD,{>[e<:beb/~}z, )dOԨ6N85 u=O!|OsnH -'rKᲈy!3q#ֵѧɺ`j^dOO<~3h]qb佼(DuWJ8 F~-(/C}f7Uj%:4MVݥ\"1Mi9ue\ #;5pC1MSW:0 )BJC3r"Jse%H*C|q -J$@jv#rc)mY ]L۩Jt1 Not{`$Њ $Y]v ٦^6v8at󹥉Z`FspȖ9SE\Sde@hn"`b I5.?2(Dƙ&c{QD59I).߂{@ )8ur&RG@CY}UbL gȃE>$bz6u)KҦPȌGQ"my޳ʾ 2> X֧$$ǜTkɊq3)x:@ўsUZV+޾fB*AFqx t'nI(3Sܢ >.E{TrH,M_VmGA Fz_'7q'-2[]@GJDo ^f ^yES@M -3!y׹ltQջ?>/^,A@V!¹'誨~WAAHXTs%'B=0VcFVPҜBlZu-%c|hUB1{竖T& h&[!N?fb`E|b1l =|, Ļ#;BWӡZxR:Ѷ`qMZ1mUJ2[.^B,*7t\؋BTO iK5F}Fe4=BF۸/ީJҏoa) Xj=oPy95xȕ-lc0o!ẓVQ3] M妌Wi3nZ"!ɾ5$e]Q -k\fDۍBB^Ooೂ|Y1ZdkA$eX1;C] 2OE86?\ޱw1-ͤ&;& -k#5x,+~BDF=Nh)s_Ȓ'j6Xupl6hé}Y=W-=_pOLfg=F%ԶsEkc0mV ׮:ԥN>}IɓN~%؟OKd4jCam:i -mY|m3LVOڼڊeÔ#nުR/bj$v /* \ɥ*FRѠZLSj M^Ǽ(u9F*HU$7WxBx.C{Rp'܂U}qr(oq2Q`9|~oHoUF# 7nרvF6bLuiz1(ͦm炢M$82EV}[ڌq-VTi~`2HeG o_ecjIo_~0̳- -#YųO8efuRU Ǽk2X}s_/JB@9Stu-=u+9oz5Q4"Dp):\qӻ>XM Ч)^q4MDxG Gxyǣ%v%_blbr{y=Dq2BV(OJ -7vM[Z}߮">`,(FdGKiۙ:_ zkM6#q`ncN׃`J=t -.}ZƁ-24tT7VwN]02i QOv@ %m?Y_Àa$H:k%`|=> j}P-F`ب9tP"_5[rN딶DL RNU=0r|tYZޫxk_K0WϦ]>n$D[1?I2З\Z"f0瓷 -lX)@xr xչ.R}E|P<@-9ސ.?/lJD(Rp49n& Kգ3kjHBM8WMם&US_!k_G5\OuC\_` Rj'MZU M%!b3* U#4:D-T\֞X`Nm7 w@3Zoy&O>Xld!MqXjʽό-yOd.k:Vi{ T -F?汯tӇ޷vk -+_l*g_^NwKSS.*dTc[Fd++$ -endstream endobj 6 0 obj [5 0 R] endobj 42 0 obj <> endobj xref -0 43 -0000000000 65535 f -0000000016 00000 n -0000000144 00000 n -0000023786 00000 n -0000000000 00000 f -0000208653 00000 n -0000628752 00000 n -0000023837 00000 n -0000024188 00000 n -0000209067 00000 n -0000208843 00000 n -0000208956 00000 n -0000207402 00000 n -0000208091 00000 n -0000208139 00000 n -0000208727 00000 n -0000208758 00000 n -0000209140 00000 n -0000209838 00000 n -0000210923 00000 n -0000219644 00000 n -0000241768 00000 n -0000263556 00000 n -0000285525 00000 n -0000307775 00000 n -0000329835 00000 n -0000352217 00000 n -0000374014 00000 n -0000396383 00000 n -0000418773 00000 n -0000440931 00000 n -0000457306 00000 n -0000478998 00000 n -0000500055 00000 n -0000521812 00000 n -0000539294 00000 n -0000553151 00000 n -0000559478 00000 n -0000570324 00000 n -0000580890 00000 n -0000592729 00000 n -0000606074 00000 n -0000628775 00000 n -trailer -<<156E777B4E91384C80A841D33552FBAC>]>> -startxref -628992 -%%EOF diff --git a/Datasheet/ESP32-Pinout_V3.0.pdf b/Datasheet/ESP32-Pinout_V3.0.pdf deleted file mode 100644 index be8ef79..0000000 --- a/Datasheet/ESP32-Pinout_V3.0.pdf +++ /dev/null @@ -1,2387 +0,0 @@ -%PDF-1.5 % -1 0 obj <>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream - - - - - Adobe Illustrator CS6 (Windows) - 2024-03-29T10:15:23+09:00 - 2024-03-29T10:15:23+08:00 - 2024-03-29T10:15:23+08:00 - - - - 256 - 92 - JPEG - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAXAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8APtW/5xq1u40i0W2ls11J bjUL29bjFGWeSdZLZEnSH1eRRSPVPxxk/DttiqrcfkN5kl0+4tpNOs5nuPMR1m7Yz2n+kW3+n+nH +80+U8kF6lfX9b9rhw2xVdJ+Q3nka3rF6txZ3GlahNfXSaJNM6xN9Z1y2v3tGkWJisNxZ2gR/hNH rsQxxVbc/wDOPvm6awurRJLG2sNRs9RkuNIjkkaGC9K36aVDFIY1Jit01IKzcR/dJQUGKpxqX5N6 xN5V8m6XFptq48v3dzc3tk01kqyeqG4EMNP+rfaO9LYNT9rn8eKpbqX5BebNe1fUINVls7TRL7V5 NQ+sJMb++WOSzuoSfUnt4eRSSeP0efJot6OeKYqmGq/lF5wEuuCxs7Ke11S/sJYUlv5kniWzDiS9 iljt4ljupFZQCUdlerc2CouKrfzK/JTzj5m88Taxpt7BbaTdxxC8tGdgXe4hFhfcgFIalkg9Pxbw xVKtN/IHzZps1xPLDp2sWlzfQ393ok8zW9rcqjXymGf04WEhX61DMrurVK8CPhU4qtuv+cevOb6R c6ZLe217bmwhkt4nkan6Vk+qQ3bcpY5fgFtZFUZlbkXPIYqn/lH8mtc0b8y9M81+ha22n2kC2jWU MkYkUDT1t/UZoLe3ST96rViConxc1UFaYqoeWPyM8yeXrLTmsNSa31C6MK669u8cPoxrNAJBaNHE G5tAsvNyasaVyNNnEEfaeT/zyg1tL5tbSe2ggti1tJeP6Vx9W+rFrcxehSKSV4JjJOCeSyUpscd0 WGXflx5d806MdTfzDItzd6k1vdSXS3MswEqW0dvJF6bqirxMPL1FHxBgCBxGEIkQzTCxdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirxvXv+cqfy90XXdT0W407WJrrSbmW0upILeBo/UhdkYqTOp41U0qBimkuP/OYv5ZCISnTNbET fZf6tb0O9Ov1nFaXv/zl/wDlvGpZ9J11VX7RNrbgCn/RzitPZdD1e11rRNP1i0Dra6lbQ3lusgAc RzxiRAwBYBuLb74oRuKuxV2KuxV2KuxV2KuxV2KuxV8z6JqP5jjQrsvoOvK374iK+W+a7NI1/uWS 0Yb1+AFvtA5rf5OI24/x83qMvb+OcxPwYRroNgfeKZLp93rv+FNCa8s/PdlqDW1x6y6asMrL/pko C3C3a19UrRlPp/YpQ5mYsXhxEbunS6/VDUZpZBGMOKthyFABlum+QbnWdN/SH+J/NuljUBV7C7uo opoQsoY/CsbNEW4bcX+y1KU2ywBwyUa35WzNF6J86eZhGPsUvogw+MPX1BBzbpx+Jj8JphpeJmGm 2b2WnWtm9xJdvbQxwtdTnlLKY1CmSRu7NSrHxwsUTirsVdirsVdirsVdirsVdirsVY7qP5heUNO1 w6Fd3xTVQATarBcSGjJ6g+JI2X7O/XMaerxxlwk7+4u1wdiarLh8aMf3XfxRHWupvmpW/wCZnkWb UpNM/S0cN7EvKSO5SW2AGx+3MkaV+IbVw49VjmeEHf4sdR2PqcOIZpxrGTV8UT9xJ6MT80f85G+R PL+qajYS299qC6Wsb3F7Yray27eoiPSN2uI2cqJRyou2/hl3ELp13Aat8t675E8/+cPMWs+bPL/l y7udI1rVLq+sXkEYJjaeUFXCybMCaGh698RIFJFID/lS/wCbfOp8ozFAgRYq/CAG5Vr6vKtffDxB FJFofkzzVr+o3em6Zp011qcK3D3FtGo+HjIkbbsQKB2od8eJNPqbyJ/zkf5N03yXoum3Gl6vz0mz sdPvZ1htvSWVbZByBNwGKEDkDx6dsj4gXgL0/wAxfm3+XHl6KGXVNet0jnYpGbfndmqip5C2WYr/ ALKmTAtjRQ2qfnV+W2lGEajqklqbhikHqWV8ORFK0/cf5QxG68JZvih2KuxV2KuxV2KuxV2KvLbL REt7JYIUARjydXjikK8qB6SPGzbUqKH8c1n+iCct/R8z/wAU4UdNkArhPy/Yl+t+U47iDS4IPJ93 5hEVqyPNBrbab6am6kcIYVng5nkeXPj4Cu22bi1JzxGQ1Z7vLZy8MDCIB2Sm58v3EkVtdx/lpqS3 VzI6cf8AE7wuhkIbbhct0kZwylRxoNt6LOm2/NSg/LzU7XjX8vNVvJAgKTSeaaMsjVYtVJY+LAtw YqKcV771aTfmzPQ/yf8AK155fgbUtM1PSNRljZZ7c61ezyxNUryMkVwYWZlox4rTenbDTEyelZJi 7FXYq7FXYql+pasbKWOMQ+oXVmqWCD4SBSpFK75gavW+DIDhux305ODT+ICbpBp5mJnSJrRhzdEB Vg/22C7cRQ0rU75iw7XuYiYcyBzvma7m+WhqJPF0P2ICLz20kLSjTZF4kj03cLJs3GvHjX3+WdId LXV0Q1di+FRuvNk95Ephtp7f0rgRs4J4ODGX+2OBA2p880nbeGcYw4ZEb719xohvwa0C7jfT9vJR l1y8LScPVVUQCvqSkFiD9kltyKb9s0U/FJNTkNu+fPv+r9jeNfH+Z93/ABKV3kNjfakk95YrNIba CSSS7gSr8ol+HnTkSK4MmhyTnGRyH6Y2COfpHXieh0eoyeADCRiJE7CXLfuXWNtbWerVsLaa0kaM kTaVbQO4WoBQtKkgoaV6Zl9naOePUGRnca5Vt062WGuy5J4fVIy9XUn7nzL+d0ck35j+c5Xvo4Z1 tbbn+lJRbXs6fVrb91HDAiRO3dVoAQN96Zv79TpOj6O/JMk/lppRPKvqXteQIb/e6fqGLH7zkMP0 D3Ll+os5y1g8ZsP+cbdMGrX1zrOqrrOnXUs1xBps1vJAIZZpA3P1re5jkfig4UJ4+2BlxPm23ZPQ ji9S2RfrVtJ9XlmljuCy28IV1gJMbAcjwbqamnw7ZUDt8T95bOr641awOrvGdYi1DUYPrrel+lbO 3FvxX92fTRQskNOHBzsGI9RVCuMq1kpDhokbud2dGJ4rAPp/FIW98n+V44keHRrNZvUWjwWqyN9r +Vz+JzDlknXM/b+t2GLHAncDl1ofoZTPFrTXl8o1C5AM7enz9ZGVCSQqBJkTbx4/RmRLLLiI35ul HaeMADwvpFfw7+f039q1P0vHezP9fujHFbXDGNTK8bMUqh5PK5HCm1N/fvlumyGWUAtOftGE8coD HUv523T3RHNDPqOqiSGl1MFCFmHrTsrdRxYiXZ+/htm+4I933fqdKZysbn7f1pnD5yn0y1061uLe S6kuxcubyVikaiOYhVZyJCTRgB8sws9CRp33ZmiObEZGX0n3k3fm1Z/mUbi8sLZtJmQ306wHi/Jo uRpzkXiKL9OVOxydj8MZS4x6Rfv927NsXSuxV2KvNdP81x/UIhJDGEINTCJWj4uajgTOK1rXNRj7 HMYcHh0N9uI/8W7vKMRkSJH4/wDSDFfO+mWmt2uk3N1ZeVHaC1uC36Zvrm1lUpcSIUjCPX0+W5Ls fiqPh2zM0ul8DGMdcNdLvmb7z97gasx8Q8JJG33e5BRaR5RivVCeX/KAutPuXuIbgeZZRGbocWeX 0/QZlpJEFMbA713oKtkbOPuzXTvzM10alDb6nP5X+oySfvL621peSwiVgzLBJH8bemV/bG+/fiDb Hhehadq2l6nA0+m3kF9ArcGltpElQOAG4lkLCtGBpkmKKxV2KuxV2KuxVA6ho9pfSpJOKlFKAFY3 WjEE7SK4/ZzC1Ohx5pAy6CuQP3guRh1MsYIH6f0EIVPKumJIJE5KQ6SUQRoKxsGFOCLx3H7NMxod j4Yy4hfMHlEcjfSP3N0u0MhFHuI69fi85s7A/UHUtbIpZqITBLv6tdpvU5V/65OddKe/X7XlYw9P T7O/vV7CwYLKjekT9cBMjSxM1fq7dYfUK17far3zQdvDiEPj+N6ttxQ2P9by7kWunO001XirIsfK iwsxHxBfhMnFR4EdfoznRiNnl9n623g3WQ2b/XgUESN9Qtl+F4bkkCJBSjuvEf5Q28MzIw5f1I9x 6B6/QzA0mMH9I+0DdclpImsIzGAkQsA7Xp0s05D9q1MkjfSKZk6aNZPh5J1kwcG1/UO8/aQ+afzm kvo/zG82pA8oie2jE/1YSarGV/R8R+O8mUScTShJ+x22zYGuJ038L6N/JAEfljpAJBIe83UKo/3t n6BSyj6DkcX0D3IyfUWdZYwdir4DtVmEvwSyrG8lqDElsGiakERYtOteBXkvvvyNDlI5fE/eW/r+ O59bmwQzyJHHbev9e/eA6u99cfZHBplnIVyUoY2rzMfBWAKnMfXRsR97suyp8Jnz+nu/VyR2sWEj RwsxjkpMuz+hbeO/JZDX2GYWSH42H6XY6fKLPMbf0pfoc+g37eYNUukhSJHmYLMJIp+XJif23VlP 451Q1uIQA4uXveEMPWSustHurfzDc3M0UZjNnKPXMsUBI9OlPSjd/CnhidXjlEREvVfJHD6j/VKb QvF6cUbTRoypXgvBiBTv8QqPfEgsQNqZR5ZAGiWwAAp6mysGH943cVzGzfUXM049ATPK292KuxV2 KvONO0+1fTHMMtrwjqQ0MEvpLwHdPQHQZqBDtOvVkjxfj+h+lzP5T0cjxREjH3H9bE/P+qaRZWWk LcX/AJXhrbXMiPrGnS3LB3mkPqQkR/CpcfGCoJozb9czsAzCAGYiWTqR9nTupplmx5Tx4r4Dytjw 17y5JeES3n5c2988rcGj0qdpXl/aSX1KMBIdi3XuMutjT1vynoP5R+Y9DjvNG0bRb+yDNHI8NlDw EwCmReMkYYfs/aFemSDE2y3S9F0fSLd7fSrG30+3dzK8NrEkKNIwALlYwoLEKN8LFGYq7FXYq7FX YqwT8wfMmtaXrej2unXnoR3STGaALADJw40pJOrKpFfpzL0+OMokkN+KAINpDb+dPNH1zTEkv5US 4vbWGTmLKXlHK9GUxwxLKOfiCKdOuWnDCjt0PezOONFnSaDpKRNCkAWFq8ohDchDU8t150+1v88w /HnztwBp4VVJRr9jaWC2n1NBA81wS7JGYnYiFxtJOXAoPvG2artXLIiNnr+hpzY4xrh23/Qko+sG Wb4pKMqg1kt1ru2xkK0b/V7f7LNLvv8Ari4+/wCKahZWvF43CBvqFsaIEtjT0k3LOhDA9gDmdHpv /BHy6B7DQf4pDb7z9gOyjqV01pcvO15bRelbszPe2raiioDu37j0/TH+UxKjuDmTpv7z4J1f9xsP 4h5fZb5l/OiW8Tzz5hZfX4tBapJI1dLapsYAfUsjx+NlqHAHFtyoAzYbcTpuj6c/JEg/llpJFKep e9CpH+9s/dAF+7IYfoHuRl+os5y1g7FXwPa+sYzx9UqZ7XiEnRYgFt4fULRK6l9zHt6e/Qtyykcv ifvLf1+X6H1D5yHmTULaxg8n6lYaU0F5KnrnSJbOKR2Ys/pyXAukqk7SBx8JV+VcGeWMVxi+5yNJ DKeLgNbb+5LNf0n8z2+rm28x20UCSAzpcm2vA1WAXiI7GOhrXMc5MHUfj5uXjxagn0nf5foetya/ 5VW4uVFuxlSVkmAKIzSKSGpG0isen8vvlx8Ozs4A7KmQJberfr+qln+IPKDPJzgct6E5c7Sn0olL Sj4Hcrt8sswCBmOEero1ajs44sZySHpA359fesGo+TnSFxayFJgBG/qD7JHIAn1fhG/em/vmz4Mn f+Pk6rjxbbfj5sh8v3Wm3WkwT6apWycyemrVrUSMH6k/tg5j5YyEqlzcnDKMogx5Jhlba7FXYq7F XlFn5i8uSadcyslxzj+z6tvAkp2/3XH9Y+LI/nYc6cyXstkiRHigb670PsQ17rWs3CWJ0PUPMNja m0mkK2WjRXUPOOZ2qzn1VEjcOPpgmoI6VOJyie4FNWTRHTHw5ESI7uW6SNrHnK4uIn/TnnD1FkWa Qr5WaD1ETpDssaDZdy435D5YN2vZ635FttRg8uQG/wBSvNUeYmWGbUrcWl3HE9OMM0YVDzTuSN/l TJBiWQYUOxV2KuxVA66s7aHqKwK7TtbTCJYjSQuYzxCEA0avTFv0xAyxvlxDny5vKrGy85C3smew uQYrdhJ60l8zF29IATKsXxSABiGX4R8VdyuB6rLk01yqUd5dBDz5erl5Hfl3FGaWNSg0+yGrRXUE xurhil3OwHD1FpsyrJ6dOgp0y/ENi4OrliOQ8JiRwx5Ad3vq0zSeFtU08RMrEzoONvNT9taVDqK1 7b5YQaLhkx4JcuXkgnub8+nIDxYV5obi4qAVr8YKEEgrx+Hua9NxlAD8APIGUvwSimnu5YVYoSiz qCVmm9E/un+1yX1Kk06bVpmh7aFCFd5+7ybgSR8fPuW85/ULcY+PBQP3s3EkM/RQnKtCKk7EU8Dm is+XzP6k7/i1qtdx3imRJADY24H1qV3Xl6SV4iNT8Xucy4k7f1Y8/cHrdCAdLDv+F/Ekqc8mqfWJ ns1vwwtZKnSHiaTr/JeKBX3T4vDfMjTX4nwTrABh8+IcwL+x8v8A5yTRwfmD5hivfRS4NlbJGuoK NQuN9OhCKl1H8J2/u5j8R2L/ABE5sSPU6bantP5X/nD+Wmh+RtO03VfMNvBfRNctLGTJKQJbqWVK uiUNUcH9e+QxAiIC5N5Esq/5X7+T/wD1M1v/AMBP/wBU8mxpsfn3+UJ6eZbenjwmp/ybxWnyDHJF 6kak2T0uIYxM0by3BdIYE4x3Cj0+KspCiux8V3ysAgfE/eW2932BqFxf6b6c2onU4oZLxhG+r3lu FkEfwEmOKrIBx40T4XQK4PJmynWCR4aBO7n9myh6uIgbfirU9Q8w6ayIIb62d2kRaW10UcCpJPxq BTtmHOE+4/C/1Ofhnjvcjl14f0FF3un6/LeazELC5CSTymCeQzmQq2y+i8cTxqN9q1p8sy5RlZ2Z 4suIQxnijtEWPT/srNlq3sPMIvZC2n3catp91vbvKqiVoyqofUjWr/D8JWvXvl2lBGWJPJxO054z pZiMgZdOV/CiVePT9e9K0P1CSqUMhJueVOBFJQYvi3P7G9d+lc3ZnDff7v1vGCE6G33/AG7Jnpet eYdH0LTrRdFubmZlmaR7h5yVImYhWaK3nerKfh5KO3bfNdrMtZDwix5fgu47M00ZYvXLhI76v7TF cvnrzUqt63leQON1ET3rg9O5sU33zE8aX837/wBTsvyOLpk/3P8AxaK0/wA3+Yrq7tY5dANvBO4S Vma8EkYLULUaySKgB5fFKvf2rKOWR6ff+phk0mKIJE7I/q/8Xf2Mty91zsVef2mlSraNWxuyYlVf 3ocyPQUqPg6nvkP5Smd+A/j4OtjjNcikXmOyuhNYQBPOtuJUYs2gvCtshed9phJxYMOVdlpwph8Y 5PURw+TnaYVD9aShbuQ/VPS/M9WKvWT1LZd924+pz41XoCDQ+Jxb/k9F8g6C8arrzX/mIPdQm2fS NfuFcxGFxH6phXkqu/o8gyvRg1e+xAYksywodirsVdiqB1+7uLLQtRvLZkW4trWaaFpamMPHGzKX pvxqN8MTEG5fT19zKMTIgDmXith+an5kT+XZ9TlnsTIhk9GaG1ka0KooPxyMwYFTy5UU7UzKObR3 sZcPx/U5R7N1IPCYji7rH611p5l1bzHDoGp6rPZTaiGvIy1j63L0xw2SOoDf5XLLsc8UhLwiTHbm n8vkw3HIKkjkTleaO0tDEl/ZcRcRzQw1D7UIdhyofhDAinXJHlL3FB5H3JgstyttZxSVWZpR6KLF KUKBSv7puXJm9LlSopmm/O5Pn5Ob/I+n3oHhiP53Lpui4DIZOT8fWFwrIzRyLPT0JOREXIgitf2q UzB12aUxG+h7vJ1XaWkx4eHg63e9/L9KKBkaZxycH0owQsUnqUDSUrRh8O5oa1ryzXb31+R8/wAf N1fVDWgVb6tuY0Y2Fsp+qerIxHpJ9r4lou3z8cyYdK/mR5X3B6vRf4pjvl51XwS/XUsZZpG1CKxn /cN6KanczaeOQNF4yDmK16AUr498yNN/e/Bnq9sFD+cO6nzR+bl4sfnLXmsGK2j29sv+4qiWJV9O iRqJKDIikt8UP+6/s1JWubCvU6bo8ubS9QRI3eBkWVRJGW+HkjdGFexyy2uit+oXf8n4j+uNpovT vIGsWdl+XWuaJLfNbapf3SNZ2gkuAH4mH4ikUUsZ+wftGu3TpWicSZX02bIckC+pNdi6eO7v7iOT UeIjSImxCoqgM0srBubKQrL6IIVa1I2BmOSYnm94/N7RrLzRbWFl5d0zy691aTt68dpdOSwkQcCP Ris+S125AsK1GxByc80YfUatnh088l8Iuki85fl95qvZdPkks47hIZjV9RL24Xlxpw9G4fkTwPXw yv8AMwjzNfD9jbHR5JchfxD6abzDpC+p++JWElZHWORlBXr8SqRtTInV4xe/LyP6nWHLFafMuiqh d7jggR5eTxyKCkY5OQWUVoPDJYtRDJIRidzy2KPGj3rR5n0UiIiZ6T/3J9Gb49uXw/BvsK5meBL8 Uj8xD5+RQ8vnnyvGLat6XN2rtbrHFNIzCJuD/CiMRRvHD4E99uTdi/eR4o7h0fnjy089tCLiVZLu VYLf1LW5jV5XrxXk8arXY9Tj4Evl5hn4ck9ylg7FXYq8P0/yl5Pi0q6hjv440uaq8JvLOTnxHw0k KkrU7bHCZ47+oPZZe09QZgmO8f6Mh9lqsvk+yaDQodO8pv5jSGKf07uPXvqfoRTzOkp4RSIJRRz8 QB8OuRlRO27z/aeollzGUue3SuijD5NguLr0J/y71ESXMa+sT5oeSN+BCseP13m8SE/aKV3Hw1Jp GvJwL83rHle4KaBpcF1bDTJzEIYLF7oXjcIQVXjcElp6xqH5H4iDVt65IMSmcd7ZylRHPG5ckIFd TUqKkCh7A4UK2KrY5YpATG6uFNGKkGhpWm3zxVdiqyaGGeGSGaNZYZVKSxOAysrCjKynYgjqMSEx kQbHNJx5G8khPTHl/TQm/wAAs4Kb9duGQ8KPcHJ/PZ/58/8ATFJ9d/wfoNzp2nf4btpEl9V7Zora BIYSKc6kqFQv+NMysGM0eE8KOPJkuUpEnzJQUOv+VReWBXyxGJZrmCOKWKK1keGR2qshCVccDvyH T55acc6Pq6eaDGVHdWOseWVeML5aiLTVUkR2vwru1ZT0QVX9rvTvmp44/wA12v5fOQf3p285fZ3o uHVfL5QxrocYX1QPhjgMXL02bnzHwVoCPHfKc2XGALhe/k6rtGMo8PGeO+/p81RtT0SnD9CRlFAc fBBwqSRRSduQ47j3GY51GL/Ux/sXW8cf5v3POPM/lTX9W87SanZapJYaNJaQNFpDQrEig2qqqCVX U1R6NxA7Uy/xsZ/g6Du7uTvdLDIcMZRnwxP8O+3wClonlrVtI8z3d/qmt3suivaSI1ja2S3tNlDc mZLuqsVLHklN+oGW4ckDKhGj37J1GPIMdmdi+Vl4b+d9zZTef/Nk17DLNdTW9oIX1F0tryGX6pbn 4rdESJilGQFB8XVSw+LMg3xOBtT2L8mPzK/KKfyFoWl6pHBc63o1kkN28ti0npfvHdUEzxkeLUVv E4JgVuLQCehpn/8AjP8AJ30wi2doyLyIjWxU9A3Lbh4Bvxyvhh/M+xlcv532oe7/ADH/ACX0a1Gs vawQQ2nGVbyDTixiVnEKyBooyyjmQnId6DJwEb2jXwYyJrcviTRAk18945hb1Lj4FM5jkVvURuSx A1YGu1djTJT6Jg+1LuS5uB8c17cwPeu6LNpa2sFSxWRog4V0qwIk5/EX5OAFZcw9cNo+92nZRoy/ q99f2quqWkSxQtFAFf1hvDFHO1DUmqljT3b+uYU4ju/S7HBkJJs9OpI/HuR91bRtd38hiZ5DPIVd liSQ0YkcUqCfpG+UZYeuRr+I9zw0hufel9/BJDp2ozRLJFIdMvqGGCKaTn9X2qATvXou1elcnpAY 5ARtsfu+xyOz8cZaiAkAYki75dObG4o5RfzQra1hNSsX1q1SIBZEpxkM4BAG1G+Km/bNn+Yy39Uv 9N+16n8lp+EemH+k/RwopvW/RegRypKyqdRUxSwRFFpesFAmjcJso+FlZg4+LNvoZGUCSbPvcDUY 4QyEQAjH08th9I6fiiibGNo9b0eRIigF9CJPTjjncjkx+Li7cV8XUfrzKkfSfc0HkXpqeYo3Tl9W kUVpRiqnrToTXMHwvN1Y1Hkk3m38yLXy3pQ1GTS72+BuUtfRtUDtV43k51rTiOFPnluDSnJLhsDa 92cct9CkOqfnlZ6cnN9BvrkcwlLVoJzuCa0Rz8O3XL4dnmX8QHvtmZUx/wAu/lt52sdMiiltBYXC LIBDZXNwYlqzEBSb+M0blVtvEZjywaUH03XvP6nPl2nqJ7yMSf6sf1K9x+VvmG90yysp/LPl67jt IZoVbUZrtJwn1iSWKNZYPrDAfGHJ5HcnMfJCANQ+loyZ5ZJGUzcip2H5NXsdq8V35L8pTh5ObW63 N+qiioAUleGdqMqFWHpr8VHIPGjQphxJlaflpqOmaheTWfkvyvLHHcpcaRcR3d3azxmFmMMj1tbj 96vKvwMtOgJ7NItP7H8mfy1NlCbnypp9rdusck8VvydYplWpEU1ImIRmIVgqnvQYaRxFFRfk9+V8 Mwnj8tWKzBlYSekOQKklSD7VxpeIo7y7+Xfkny3eNe6Fo8GnXTo0TywAqSjFSy9aUJRT9GNKSyLC h2KuxV2KuxV2KuxV2KvBPzJtGf8ANJpOSgcrX7d/aIv92nW1l/eMPb9rtnP62P74/DqO59K7CyV2 bX9f/JzPU/xjb9Sh5B0+4k873jRxyXZaOZgltq8EBILqeSxWjRui/wCT0GS0A/e37+oavaPIDoIj l6o/5OY6H+OXP9Ly382TPZ/mR58oxsrj9GJE8VyZbxvTlsrcMHu2ExPMfCisRRiu4Azcn6nz8fSx jy9q3lny+k0lobcW2oo3oG+tLycSNEZVjCjhwbksiK5XpVuoyQkCavcMSPJPG1CIxxzabpEcrl50 uBc2GpyorJPKEKURhWjkSCgIYv2NMKKQuueatH1WGbSkS3EmpQoJlS0vlmkipHMhoqVYBrSBjJuX Wp2NaiUgBZOygXyDFNNh0AafMLRiLmPUoxFWEMHiaNQVDlfXjpIDxLNxHhy3yMydmyIfTv5m32r+ TrXT7qz04evd3TvNJq2sowk4KOC0uZArcEolftcQORJ3wZMAyVfRu0+pOK6o2KY55g/MLX7d7WOE aVcieXjIVu7WzZeBU7F5By+30H8cp/JRPU/Z+pyY9oTj0H2/re/yeUdOd5naSUmd2d6+mxBYkkBm QtTfxyMuz4Ekknf3fqdIcAKHufIul3FrNbNcXKRz289qxjMUbBLhPTZuSxglgPs8qj2xx6CETYJ6 93X4Nmnj4WSMxzibSGL8lfL0VotqupX5iSJoQW+pMxD1qxY21S/xbMdxlv5WPm7o9tZCb4Y8/wCl /wAUjrb8qtDttP02xjvr5o9MWZIXkkhkZxPKZW9QPEyGhNBRRtmZgn4UeEOFn1ksszMgXLu8hSIi /LfRo7m0uFuboNZzLcRqvoJyZCSFZkiVyu/Tllp1MiCO9pOYqMf5WeXkh9H1p2j5FiGW2LEli27+ jz6n+b26Zr/y8XZntvMTdC/877uKkH5i/Jjyvr2lSaZeXV7HBJdRXjNA0EZ9SGFoFAUQ+nTi5r8N a9+uZuiynTyMo8yK3/ZTgazVS1AiJfw+/wDSSlWpf846+StQs7e0nvL5I7b7DQLYQudqfG8dqpf/ AGWZsO1MkTYA+39bhHGC9SzWtjsVdirsVdirsVdirsVdirsVdirsVdirsVdir57/ADO4N+bLIs1u kxa0CgLKtzUxp9iQIyK3ga7d853Xf35+H3B9Q7AsdmWRKvX3cPM8xd+9BeShYyeeb9b2bTWbjOZB e2k1+/P1BX1NoFZ69Wr17ZPs/wDvvm0+0oP8nwoSq49wjyPIWSPJ5/8AmFDEPP8A5/NvJZx2Y0kq Ctosdm7fUoH4Q20iXTwz1X4ZBTf9tK5u7HF8Hzk/SoeZPMfl658mzW82s6fepdNYHy3p8FuPWtfR iK3Qk25xs8hHxMdzuBTYYuAR8SVRMZbWekvd3ts74RZsfczI2FvwuI1jjWO5JaZPTWjFhRi4/a5D rXMxrY7DqUFhrPmWztNXsNC1WeK1TTJ7wR8FaNYiaK9Qo9ISKG403p1OYus4eA8UTOPcBbZiu9jR SPUNe1G/8q63YWNmZvLLebW1GPWbZHigeY2wiaH4/g4enR/TBL09t8tJoBgBZL0P/nISPR00nSPq 82jITPLy9DTZ7Q/YHUqZ+X4ZkRYhg3nNGW50xrm6anqkR/pOV7rYcD+79KEU671/rjFkX21gaXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUq1D/Cv1pv0h9R+tUHP6x6Pq UptXnv0yifhX6uG/OnNw/meH0cfD5cVfYu03/DH1g/oz6l9Z4mv1b0ufHav2N6Y4/Cv08N+VIz/m OH95x8P9K6+1jvmL/lS/6Zuf8Sf4c/TXBfrn6R+o/WuHAcPU9b95x4cacu1MucTdKU/6Fs5rw/wb zqONP0XWvamFd04/5A3/AN+7/wBOOBO6XX3/AELz9YP17/CP1igr6/6M507fa3wo3Wwf9C7Vj9D/ AAhX1B6XD9GV9X9njT9rwpvgXdmWvf4X9KL/ABB9R9LkfQ+v+jx5U34ertWnhhUX0SZP+VTchw/Q PKo40+p1r2pindluLF2KuxV2KuxV2KuxV2Kv/9k= - - - - - - 1 - False - True - - 338.666667 - 197.555556 - Millimeters - - - - Cyan - Magenta - Yellow - Black - - - - - - 默认色板组 - 0 - - - - - - application/pdf - - - ESP32-Pinout_V2.2_20240329 - - - - - proof:pdf - uuid:b1841fdc-9341-4c5e-a03f-21e059dfba60 - uuid:74b9e450-7d3a-47f2-9114-b03828921c6f - - - Adobe PDF library 10.01 - - - - - - - - - - - - - - - - - - - - - - - - - -endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/Properties<>>>/Thumb 12 0 R/TrimBox[0.0 0.0 960.0 560.0]/Type/Page>> endobj 8 0 obj <>stream -HWێH}WXu3>-}hdvtHC(ɶ$۝v=1mQb]Nÿ>Z_>%f ϻ5.V?ZaP\ͷOdw;و2Ak2&ek$?gbC9}LˎT_v{2t V^Xn%>Y_=7,^|mX|'<~ S, -%Axk oU\&9y<v !x8'Mt0"- -- O1oq_Ir@LU3^0ыg9T:*Ӌ34,-k44 1Tw#y,zr7rG'@̑Na̓y -GI`1ݯ KR D{;NK(W)V(W)8&E{L*'N-?H DDxA9h4!)KIq '.&""Ċ.Eh3^^68#W'+n+bh: V &}`\ˌ{>NrEp} XU,ni`nahmٲ6$b_6ı-bI"͖W!dhihv} ZG(MO T -u0 ,` ^/ "~k}ޅBTWIۺ4vB!U5 vhZPLE/`s%ރoe4^t"tYƻƈ- L9w;$+.*qj׃2M@(.#M(ЧZ4n}j&ZY)Q\ƺb5G2ԋ[`?>_=!o/m)ǰm{<}bݶo,-󏼮\֘YO:ʢMC!m:-hQkIgy.kۘ~CM Vk sS8M%MDyss k++,+(mX#QkQjֵ>,.H5y*3M";̒%,GjBQZڶ5QĿʾXKldU6^iS_)&{MdUGm|>Wk kzT߼U}=| Om꽪b>W%ouc.֜1#,1,֍QXsa@Wj\.R|l/mZ@aT'dK^%Sb>/jW`8*PTmDwȥK~=0 I+tc4!ybD!a.2YzNA>M^4tV@|foR CrCB%,'Dӳ9IUI -b=v^D)Q,*TQf Nd?i ub((Iʱ$Y[y8Qp >Pԏ1jHɏ'T/U -$"4d0h'IjNnG,SY[6}8>׉EBd- Hl'MOߙ-)RwY=<̲};jl$%;`!7DҤ^#J`sOo*oe^a7?i6 -u >^ #Yhfۓpž6=΅:N{#r/'~ߙ SvpF19|2R;U3˧e것 T5׻9oJˎ3Cx T%|idsmC Dp6QNے@i41_8B~%] @Y3~Q#}՟m밼߃#vAqQ)5vP9RϠέ835{t-:o-{Q& p/徆 < C8jg^t8/WbUYI"$̄)MpkU,F:`&R'I3Lr0D~ ;QrAc4fA"4sE,ˌfĬfog]=_.aO"?; ?6|'SdG|{C~p9a91 lҌmw};a=QOPr2.y;lC![G[> o MZn[aic+8ޮgL<O`L<OlxB#0i&48#o)~vō[þ>Vi1 (#Cԏ2hՋU =):_ %0A|)lj&[`WzI2C=a@ru.H<$|95?=_8X)4հGd[}4<R䙭CZʡ&jLb1-lfv7׌%ցٷˉVOds1Th#;Fgŕ#sC/.$o9 4Y43Owlh$kӨqTU[vSe&͖/K/ڡV6]%tZ8IoqqV,b+ J吋HNuH=]ogfMٖx:Yx9a"O`s `˳bO -f D( TP@]T)x91+d^1X⊹ӣaArDæUvoSW =dsgA5 Mh(E9v,ϵ;ܞB~ғB`P14O4 - 3+Wum0^@NJhBN`@ m86bIѴ@۸L9?4y{:Xx17PeG͛F!l |j ,nN Nma>=RGc=)HAtnmՒ6:/@QVyz"| -H 'U2G MMYK2ƫN90LFADX'җ -^llC凊#T֦Yq>V*Ml)Jd]??k+' +nUzzΕ*1C`ꑨ%?/j]@cr\<{ A í oJ8cqHfi0ե\ZZ'c1)n@„~Wr5@{DB"0V)13J}N{;O_eUڏVl[fdZfĎuJ 4c77T =òIߪF3͑C{/$ -Zy eRQ«7U  #w7R9@iݮtŰgt|'(z$'sv'iqj(`"k up\!X%͛ \5sձ-|g02 iL'2H|h4iB"Ⱥѱ@UBUU~fXĸiDL>#26 f>F#p\d9JyLh::3Vt׉Xw\Vu߽'qZyv#(H -_kR ܣ9MڮbYd$6ïŋR &$b5 Z)k -$`eAǡIҙꛞ~C 6i*s~kĆ)El & ,2Esu.g{$쾅1Q` L`VCZck -ztVG,=ǩg+ s6kF0,Ѳ]5@ao`A|WoFLA"r.M+5 9"A;d3NǖSUH )0_f_LC$|.N Xp1zj`*텟grHiډ  n1ꫛ%׭l%?A4Q ,Pq6@^Q|fxhVЯX_̤0P(:Džx_Hwrx< .Y4T#g댍W)DdH<3tCiO6mUՆG$zBdv*:N -<™b6bˉ wsl*fCvoz,aݫYnm-Bm>To>&qΎ6e2P®S0E.ԡ[ Gvd|fof|z {3ˁgFkjsHq[@iiF_iUjcωZiOʲ:PYcM:w$BV5^_۴i- -c):LC7 ΘD T2}`B4wЊm[АsGWG0 -e;9MWbt=Ghqolyým}zJY6 4xdf.r2E!6aToVWjG_%FY/ӢߥŊ"~hXD8fm~ Ҏ[S'(Qe~U}Q%6o3rTb4)8 PJGМ[dw 3Y1u~֑oq]NOCZّ'K@s! - 3),`}Anhy !S]"6}̇'k:/> >l7)3z_MX-# a;~'*ƶ}1!H0xQbucn P/8ɯ< -~ou<o;zԿv~|Eqh^&([CPAy.ϦXZV-lFs0@*4 c==v!p6ی.QYgƛ>,br7^ DXdQ? G-B~*/mU}'ZNdFdHXXhՂqRmh~Zo,>r?8,5rԭӒ(1 q2RܫS_TWpAO)(1Yk|[~쵝6-Q۴*,~mnCsRn}7Ź_Q)v#8=~=4X׾_tu#Iq?إW0w -3E%IMGpy^覼 K16 6v9]_=(͞*lEgJbO޴>h'u1(zl'k8ֽEP)I,*3glPbLf +uG،adݖ>ik~$ kީGpu&~J MSA7X??=}FNa?\Y)`߽#_i>w9?IQW[008i4c!;mw%XZݚT-}@ַ[ -z%CqEpqi'`W Oo=\ٚ`ЄaΛ9Θ#;Dy 8xO];V]E7?!pdF=H`Nk}j4dىI\b-sl{U flwHOCT ՋqxmOl3$!0>9|fSt1>vlaSJ5yJ=Л9!n4_܌KotesǗ[jQ"i*-[p})X(.}ÏSt> -Yn-2Uܮ,UtZ/ii@Q/1:+ @;n0cmϰ0Tu?ׅ(+C7Fv* `#$ɐe~R5} ˒҂$J8n ]}yP7/wy$L41CYy}cPْp\߬3jEβ"KkSR@{''Y@$-3놈]O(Al\8 -pι;A}>r[qsEv׌_DO98Sa&<ʱ+40}3P.%kn޴i Sob^&S&[gOĞvfv*K]Oiz9[Q)KT}RSQcy޴ŮWElv3rP~`4/ԃ"f3<<_j2`(襳ϰzX:J\9*o2hۑ -_F"+,BXӼm>o1SUsYubn]xSuS.jZu<,&uf߂Jn>;#,Ufj,/G%B̘QWcBӀGNp8zi+y1C';riH:~9 =/مl-0 n]nN3 T=*?(C+K=y{g!cQg~Un@pA=\TDvYrڇ4ZҵZt< ۹Ie8\R& 7/xGKYbqDHC #KR]V"c &*ːk7,}U&+`+.lt;wa ӤJVJO pp1q1 》آXKX? 8wW\ {;e!C3t?/żDc~,? -h;i1˽.NW@E噩/Ơs̭ZT혧l/ƗJ>۷x[Wu l~>=L@p˽y;b~vo馉=Μt%;ezExON0^{8/<0߀W~~!mO_݀܄z8AD -)cDSiZcN>Љ=:T%!pS5JeP6ʴJ^ﮉGN+~"R(6[IQUv8?Y[`J^p:xuoQ8scl !0N}Jua'>I G*Z(,$΍;Vci֊Qf"O*E?jPP J-ٴ^'cXaY3!,I1ِly'|!{ז>Y%YWPOBWz)vl23> j,$MLI[ڳ%16“.e^b@ -琙a#8Cҭs96# Wj-ڿx5SA~:f'~3oF͈e_{97g+*v~r~%olϮu( -2Bk -66afukNÂvpC u7mݛϼc|{kv׳U$7ʧmn,^xX7LRK^\ L¤g#3xT'00I6F sE,&2ֽ[OVp;IjEڐrknщp.4w3 P'SC 치(5NB;/zt⻚ a[M< -ö@36A΀@<͙GvD P;Of\)Ά:oTesg/lkO$(Ao*{{()`hvy)&Г8#(o L!дTQ*)'FCw46eZ}.<v5~rW^\ -Wryeh|k< -+66Hr^*7w1he U:-qPp"aQҰCsLUyI,ڱn tԠ%Ɛlqn^lbG0.kFg vO@,@<]S˓Yt]h6Y&:Yq93n9,9={pv铡oU;_=hf-v?mQ7[t_$q>H# |4w23MԺ!-?4\$fqÚ]eJ g}y? %m9=ZOOoJ̓}{2V-d^W"iYxȷ3 -]¡~l5\Z"fYB+5֓ 86ME -6"ivz?"L̷̅DSx3ez\{uL)?A$sAGʙC(4Jw+C͚ gѥ"~’zp_%8(}/I).i: [e,ɓQܞ. ]Ns~O"~;_?گL]ofq J$ɦOO_ oYy(Hݑ )!p<ɛ[u,Vo;*϶?-pZ@d|)Z Z`R00Ifz6o=B8Uyۂ~$ϭ\b -J!VHFg<m7C[fT0_wf"-c9<@/^᜽%5 : R5yP4|_PbnML,+Ȉ黤80_~M76~[KusSUc^lPAߔ ՕwgiUW62tS$a|v$V uOrޅ7)\<˺ݾdL,\|ba-h\ H"-Տ* (kZՄ|7ƫɀ<"O&cZXN6.e?G[ٙZd=q}*T,;Yz:Ǧ)&Hѕƴ=IOJEŰ^ٰ#W-H9Bq.ʌ'q PCڳT-8oS.]( jRwuȗBVzbRxiQX-w:4yL/R^,ڤcݔPS?CJGbҮ._A,tZw{`feH3>?kj-G< +K+3˿GojzB < -l_)kL)ñQ~,Ɋ5#FdXD<^Z 2~K}鿿u?|v_LW =S?73tetfI#:&/mc=J0Д3NwvwNO,7dKݸ -oImT{a-G$2#+]Ƣ"~ m>pozl*v^J3sO+ pPm@1э䀕 Z[+'RթߝTu􁐵Wi -_m\ m-Bwi9Y(V|3έ?ْF6F C<7y([9ޯڪiV5,ȽLZey zoi˓AR{ԒcZN C^6Z>\n*2{J˔qD>C#wc5-8zj?XOFx ^Ϻf:PM - -ë>Ұ[65WД+앪{$5^?ΫXvF~c '~N 𵃺&*7g6Y(ćxٔ viwNY_м5|{'&Vh9oPw?S=/)oquiOEw@qq1|Bm_E }q۶D;)joM}MCb-um'EQә(crbqk8^dYu*#IǸ+_ z\cO; XMhC%ڟB{8ħt%_l)İ -ʜ5K{QlCԛviik/ZvyK<-FޏC㕪sEyicOmVKou4ٮc9ozWj)O9)@T>4o;cww`02ۦFfű^9 ʧȡ,u AEDw(:_.^}|DS-y_ zYEߴ{M,'wNxσ9(}ٷJԀu -mL?pjovc*Ɉ܇D6Z7rTz1>&ӤZV.nX^ -#GSFiowbAvvw -TzGm(?(Yc sc #V\ߋz:PZS˒e6MՙiڗsOݰP\EW{lQ_ -gsP5[7t q|~'LTGV:ax3ruDUe\~;4]ޢLA| =NVvey[sXT^[oչ>,j-?Ys'墯>8&AQa[{GƜ:?ds6a#;kJZLnՊ*HSشu.kyOoC>(U"#oxlYT&5rGjZ25;S;kw} -֡4[CqJs| ;'{ VvS֕f9_lh8t>fIs0Yr;tHfT^h|>vBe˙$lpax 6ܶaދߜ߼z\Ώ 5}4rxop3"6珸<|ੳJ+@(`k\^KJhV.45 -`Feq~R'ZޓUda& 3y-%ٔ:mse;Tk,ҝm\(Y7&7#hRwzmMQ&v*a1Blp_ڝSff/gFdĉJP!tۊAlWKn[c]lp(w'hǪT0 uWeB/7vhW檽,{)*%b%W깲Ygc crAbqk8R%9v};1qr Z]kTyثE[b20PWCX:UbbZFeΚ=( -X]6o"mH|Kw[Z;i OTy /Wg=F?kM&cFƖEeN3Mc_P-e.ud6:?8m\ bo9;UQa7D6dE%SؾQSId$/ I\ -$$O$2>Id?Id<ɮ#K9BRa!3[}W%QhA]^eLt!]QuZDBܾͬד[*+I~x񚞆>eذ|ܿ,MqN-gG#Qڂq66mjSм讎g4{ 鴸]Z֙tYN4ť`(.)7 <ƧM2^<ş%2`UqYj6|jȄe+!VZr;̝u8T5L޴<-{X~SJf4U i`X5t3b+fv^uHހ*$-f1]z! Dȳxm֝BLhhK"Rb)` -ΜU4tYiQoSk7ȍl$%Jm<)`/u\4Ut髱 |\R%aFUY?tidPX5y:Cf* !hjWǽo*s9TKY9p^66&mAz|n[,P2:#BF|g j2^U2 4iƀ1z䠌>F,bc, 0N&RnHoňXaEzKlQ򴄸q\ pWpx^l9huMժa@ -c&߲9^`u6 W4g[$ # ,rR/Fd8'3ZQ.Z<DbGi=' :֭޵>KJ JXFߤF]wXr :iJEnzJ#hJrXF{iij.hO5DP+g -D xp&?_)PyHO!GCHz? NT@ ԢJ.w*E&&R% DyS^Z jK&oR/+QU̦Z:qAuzg#߼Y>薗 vCDa ^jT! NY݂.|D, H|Z;{b)vQVs})xĩ~)Cs &qS,oÔ\R H>} U7|MCDі ,xA7)0[] Aמ`9]2Wp{%ǔmٷY0O)tNc>ULJJQK2[!Ʒy)vagMcSiza0,yk(:3B~)WYG%BF~o%xm;O -/.0c2Z-0k1#}5尥H1zNq 0iQnN5s-`c'"k+ZJ0 -Kұt\ipGP;dȼ+ha -TR`nb:>Gٱikx)^P.PY઎[ϊWM`0WDC@,x6s]l1oθY3QU:M вǓPEH,zTEc,?:rʅkתj]Sհ][35zˑ]12)Rb*U:qk3t?h^Ea = BrţV1|/˶EyuҬX@egC9ybEmq 1Ӝ/d2"c|R?6k9YCEqQ=M DHhxz? [ZpW^ -v׾l~@2#FN)ԕugi]%be8 O m dEgi o9{7Dlq), -v-)W% -g›!4oYJP</@/$с`fJޯbJ^m/񋟼]H'//a,IRvyHww8D6O>{r))e璚S{cu}&O˚HKV IʼTw`aکpxl+Eu^[Rl>w`Vq)o1LJ zr$0@Ǯ y2cQ!< @]K0NR@نPj=%VII/"Aևwe2@ )eFMGpG>kNsݺ:!߁ca[|6v`d%ǎw5/^ƣlLhQ @fjW&dւdV׶ ۭ"wW⺭9F[0Ι6f/NƇF8}Lvn LmRt_SB܀7Zk*-'̃KHnPCK]k](cMib+T@4R1`ܩ2or)2t'_>աO*2Pk\'Լ%pMMH"/E,9`P)da֑jTb2S0>u}}GQФV0@Swmg'Pd5.?cS=k^ؒYK~}e+ w3CY!" Ey[S0LhF;e(:OFh 9SM<;wUuFZ򥊖*WN5EK -)!xαMwEnm]Y)**ۉ5y)b"W958l0P^bނqʼYK *rCRGc*ϧ!h9Ɗ#W.+Cʳ."QykW(]Dm5zScjҤ1 aoo 6EZ2O{BISڐSd@KȬX5YC%茡HLɖS3k-xO# bh%b1E8aXbA (-@SљW+COe TnxC1&"5?jn5Etiz]z8a = ނb격$^,g e!?eȱ?E]1R -{$nB@+r`f3ކ< R-3%1zuƲm*!4Ü$e1k!(1r8~><5B뽎 绖?+ j^ti6PNu@2v^=l:lDvpO<#ƅ.Zݥ}޶О_WU{3emɿ 9j e!#0,υcϥNkq?PI8ѕrL<*)G/?,`|Dw1K0ˑa77'@bp+UijN"{o0AՍ-Ȩøn6+Z>E?0eHk3U>*8K+7Yk30 K"oVK4۶c|ZfQX)ƥvDb)Y$S*1B6w>M,9jd'ǘ*gB#b԰,g~2" i0b#l3UFA[>S,s@'n-SPb^ϋJ/.Lz!zտs`\왆eB71Ic>U][& m"S1#v#:[R3PڪDQOzN5Lfw⩜6:~'Tur -amdFckf9[HrUv@DrUrʎef6 12k+! @neoCdW3+}v8K8;UΣF|Ny~񚝾ڼ]i4e]qf ->Ih[X؃0J ӥgLOM_mQ,b5ħ3{VƞTXBԋm!ʣɔӕէ2aCq nɖ0IKͪO<HuKtaN>5CCtfL cL^'o;T Y9$9Iqy[z۵?~~Lؙó{ x>뽎 绖?+jM/:4u(@DYv^M.:Cy5nW^YBl#N[qP)8c_o~sɡPbK ~83ҩ7;~GZ[RT q5R'}%TuDDw1K0ˑa77'@Hby#ڑ$v$rŒvDP݈y_т;TQ{rE+ZwC~`Lo"Q*T5vp/ɒ8p\l.p^bLVF4]N.:*p@4ys lbָ% ѳ>p -ho'e o9k)3%/,QcT0^}K?H_5)~@^T.x8Sz)ݓ=?zaas"pzEI]rd54ݡ OF2JyOE$zZ^x쭷AF̋r|$ء2lW_IoSdMz {Jԭ5>a~w~27X7ޫ+*F֋\uJJQ(W/5Xc#JI@G01WwBu5:J>;j^ 6D˘|\X ZᶮNqRƍ<88}[TmiN1 klA8ITj*Wk=19i'xqu|>-G7}Oby]6kэs5 =Qoo{A?/F -}QC"oBb)a*GIqST)h`2[ ")HĚ(|t/Lb@j]武f؛&G{ -z"xduͤxUիMq:C6 -Tz mЙ'5x:.ZxP5aM:)FaiW~ʆ"Gu FghyBoy6rҐ^7/89H\NX%N!>"Ll!ΝMBWGtY%T*o\ǩd h+]UhK"3H6tgKswQlGUZ - -o+E{YCX[T[&S4f Ag4vM8[5=h/ 1֔iԥwb%].6$4 f٨.m*{Ȗm(7 Ј,{hMng/n:$g6 *$(qEj|e -7gS@8NGL5`V\JF{F)~o~_K+5 4`.:3:E`y%XђzwM]ѷ|YWGp[^`Gz^s&ޢ*]BرNtdPh =8WHHvɺ'Ԝu3Jz35o-~ήѴ#[Խ o8pzH~q<-B?t7o<;x5X<Γ4f7'"'lӞr%*c -xakH3]cBwіRQcdݙv -&@F&5 Cd@;Pf'&=i A>2[yl9^yALZahYr5>N#ͿroHٛZ\ k]-x) *D|R1%5 1UgzV M4Ti>Swha üa{_h5 BT''E8/nsb~cO# JCE3R/Rv}xA3@?}$#mB`߅zN -!gY٥;[QL(K2@<͊ut7S.f;Uf6KueEuBbv ˷]ӝIH֎u]Sy6oJ#- Soo1$-67)E^p]+qp|(f|ٝCLJŶ0^yrІ6=' c қ$̂hfcq52!xrg5N4xp^'ĀsMp?ʯ]gl+#^לE!I -I=l';G36vVdmPpX/9 -3,ܱoݍ WtGYӒNk@@o)GQ/T⢋ŋE;LRh"Ϣ"J4˕cHϞ5*;У_xuGׁ"m|^3ӟ_ǘ})1֙a$%q;QZeT2[ 7usQH]b&Ǿ -+k[yS$ -^d6rMf֡&O;>d3 -GR5 r@=;)s) Pґ o1ibg-{ixB CJ^$L2Shɤ\O)BBsX<,$ѷwGu&6AbtDD>` ; ԴtЏǾbW KGkڋV;͉ -jQ4-[+s\.&`3ֿ 7N|B -jsIN5% h՟f*oSXU !$Q lߴ\RD]N>qVQ~2oIaGFj 2]Aº̛YgUw+YwtiMɦ;_^ w!B`c"a-`:0tJq] L%>ȺY) -N(lb}wB`ʜE))M * Eիc1)Q\D)A(bh@Kj6ʰx4? 3;y-(UVTlǂ$1a6tX,TDǼg2r׭D] >;nY ]g.ːS+;,@e@X vld@8JWy>NyF^OIV!kDYةĆ Muh&Y Ȏcc!ֺVh2)g -eU -ѷy!iRp,d0v!;=@o#"k"MS.^8suX&¯!ƱK,ܕp2"%ΖЙSوJm [@ oA>_F VKr/Aʓ*)JeRDL$Z̛pA*7$Á3PMыq-(\Q)4f{#)b>{v`a $ۿYtWl|Pف -dui^D)NjSGwA~J֥݀4+ua1HW6A 7*Yw +j,xťqZrMa3Ih[mq} ^P]A.x+ƚCR](0o:NY@2ƤK²e`8_9ɸ*mKT;*p|<᧹y8y5N&M^?w ==Uw<[&x}\Qˆ״! NI -\x7~ej}}61X- -"Jl -H5NjEI~ABۘJ[fTQ&Ep61,ӍQj~\59uZZ{)ϽΊ?|nOAO ۿYxtWd|P -_.-0%qDZc,Jp?egi@ɉJdw.L ؋E N#USc k qrVRRėw/= 9 Ϟ郳->J\z4䖒jRoE{F62WcI&=YVDAK$K Ύy660NbȰ~+E#-e1 okSO1E$ )%bnhՖ]b_?9f(h?9V oV 1@zgpꮺb -%FVGroB4]&Iv-bAV 5PXkrLb^=0<}S\,Q~.|^'q{WPKtBެ7.qK R>{v1Lɧu߬vjN8v~Z+*>G),ۓ3FQcQReX 7a~[iR]WAs"%J_U%A7 $ⴺDU8)8kK}Pp% /6@%kWPI 2-i:t;[q{ :Fn iʸԌ dWl0NŞC*T0(E"hiĐA'ت=vZ_O|}xfdnJ"i/ΓA -{t^4$ J14\(cPHn{k^/N*l8%x!@^P'>o_?cA-WۢuR,M}i ynڣvDxoi֩p踕^1evC>fXp8ي0a*5q*4Xs䝙Yf%bd7u*WlNaL#&& i)2^ ]}471 -) -Pwi@N'OEt@!WCh긔F6e%mIBo"^%Z.+IIx{u6L$e*/hƍkmEBTךeߚyM|&d%U&u*$8%-Y49TRy/]j|vr '3X0CCbnjU7~59#L`PD-{q/{'h ~:4[Fw$ϠK^̋Je+jFy} ;[ғ&N0T:<;dwqL͂f TW`O!B5Aۦ*GiATs nг4N -}.`bp$|Ox `}nkfdyӿܨ/`\\h崓 I>B}_"*Xrf -pLHKxppXي0!f:ga8kO\m:ޗAC]_y<3PV@5ܷ .ym -XK±(qM=#}pP! 'zPaNOtrlv"B8!RVChIo -)D){/1Iua05alˠDkCQaT.]w # $ qLe2MږϽŵo!*]k2 dxb>sY+ΞdC3ױ*V(NI5V"h*E3dHŪ7#U Mr:)/?9P34t/G>ѿkà<>N~#r70ǣ=Lj֓IErZNVqD9:J̞A6>JTquR@BPK[7*"[ܜҹP&wƎ$1h6γTN.9rH$շ:'s>Vjdx?8)A&}6^KU)Qͭy<[}۟ S>IUI**RJ|8-C߉oMWvaRu 74VF:PKoGIu齗5g=`7Jaea6cIߣ;#$ ?DUnoۗQkkXap @$ jua YJQ,N/#D_PU Yً>tLrm$x~= >i6$^Ըׯ[m|`Z,܎C,ӊHTiW7yWD0|[,vB)"N2ū4mW*cWUlq0E5Nau dP.@߮3ˡ6sʫi-dj(jPRDwHmYb뮪?w^FݸE6' H^,mו¦pV"^ y=\ÚB=ȭVb%7Tܦ5iB# (95(T`_Ysҷ|J8_~l<~riW+lrh>t~>yDR9Ϛt4mm_k5i;404LIi=Xe1R34x%Hwy_޾~ -Oն~$*O1h"$̢mio5ᅻL?ajп;d|w`-n`֔^XBLg%; n$x7Dh TbGUsn$Y !Rd_*=Ww3Y_[c:2A3B'Vs$'ސ ;iRBHnr*2:޵LoNJ -oHnQS4 -1O5yEP+AJmhhkae.f<5ʕ:Bj6jeQ*roI77y',j/{1؋;;Em`r$͝%Y _EZUnnmݾ|Od8+6=gg*V$`۠]Ei݅(k=Amo;tEYFvbccRhf9O ꝍۯjOf'`?ˆ@&/q  F} d Q@ %[WNK'pjKt_MNh*/YED.,k+dghzgN2 U"Bȗd[jW6ռTS[^8xk< V֗rNPjL8蓆TI,,aO:@ wְp.Kx3:E*)e xur%=eΫ2l ۧn!Y:Q j%s t5X oD*3 60w]GS*{>C> rߵܑrc@cW[S8:bQxV ZnEأL(Tw@F$ TBDQ,nYkConȢ=/ e:ZQF![BSn~bL!nFbW~މlR׵CLo=GEϒ\%rhFфߩcvNDE± rUki$*{oچT}❻"=hnզ -v^%2G͌\8,ˠ᪴4]򲘋ykѷf2eD5@7`LT^-Pt,z`*<)]A]% LXzr Y'ȎJ6@[{٣=z٣nl˴2~"3TSz3SJ0S\Y^+y9SkQlrY)aH)֝$rmŕ[mJ Wsk1dn.T-;OR tLۍJ#+DB#S=eDceM5*d!h%7hK*[+ -;lrg9ͫ3KIp 9Kp gK7i u_27,uOJw-lwЅ%|QԙicDphP:9H54{^$MY_/kk{ՍlCIߣ3cKޣʵ~_G' GpƠۡ2c_ez-t1&Ġ]3>i.uӇ {Y\׀] -qGl$oZU K)-hy`)*wcDy hhA|'צ}wƾTgп{1ZۇٽEppm_ܚdu\c}P$qt'o(#x{P6! ֞m{X}/nߚv)w+mdayΌ -VĤDS.M[i@]]KfrBC>l?N|q#rh^~j;"QuDVxH8}/-Y[H*]so;/5*:ooCwu7ԯP^sAQU} Q,#<@WMc\(w&۔f`%VwK[5HTD;CՈ&!Xzr({#;*  K?b?ǙU89rU-4'T@W2i\n̑i^%dM6dcjegpz܂hP! [ P&{vs!.j@f$jϻݨd>"A PΦnL\J T-^ը ܠqCDVc+R|C7{ǁmptg9ͫ3C}XȊ4 -1O<仺j%hUI2jԷJ#ZX Grά6RYS(R{{x8(&mz@~$ٍ0xS $%=Ovd;zU, x [ )LSʦL?p$ѵRD^OGǛQYˠvh(q-0vf3Z}L'ZQ=gvfӧn#Q2Hx4$<I -)yדƉ:Ѫ3c}~ D{WͩWʆ%عx[PΫ 4L a~Vg `sQw\*CbFtdGQ{juW0:+oB/#R|t2k- $+{ r+Ռ.̕+5.odPIDƤQ~_fҠ(8,2Y%h@P6.^jHS>˵MDmaز>볍ٽAE#AhQ~iTcÏ@ d?Z ptkš3L99[ğq-`h{O%s<2;(,sFNl)' 3ih?Q ?2sT'Oy 9H>=a2sce2q`Jai> ]fgmm=N$;.iH&FF%*Ljp`ap CUY:Mi^:"M^f+_w)J}M]^8U8iƏy1ZռV2@%{#WEc -~ Jl ȳ4F?K|\ {|>lqW5'(i,tWP9(3d NN)r.CSz#Br$<9cݳ+ӵI@)k*% -6ȢUŰ::To(uR?p0-xe0D:a !uϡ-mJϘ6\<{xn^| Ul)L*pE>~>Z]>uN%<`6 8FE?g11Z+y -_[b*]Uk=:U2es쥡`͝BݢT!p61gt/QWg65FOSEOw<[]džjڞ Dsi-@N>YZg:Ɨ uaƵ?&+ -f&|L@%*of\]sC3doj0cV ڠyqǧ^O)bQECՎtf#59cׯdB9 ƚQd%U[f0[1̗|]e݈7OZ@2:~=UaJo5 e([%&zj6\&%' c7oS4*L83XsZLd& ],e?Z>L xBkš3r3sdm;轧݋W7MRPȶ1!%H0yX@ GV4RuڋR6ED"ƇzDQύEqE6n|lpʥc}9˟pyvnJRo N K hnUv$Ի+Q -;ժh`ҡ ҼCp^h?~}ߥ(a5ee& M2,^8&ZV[L{5*Qv4'Lp. #uR^?\U 35tmm{\kFS>^=>@g= 3cY,/Žy+wPefld}+ );O){uAR8 ʑ0}ݳ+ʶ#$4MFuoDjBN쨯1U0-xe0D:a !?\C[TU.4E,ݼZ O8LbKaR.s 0"ջ8b]vN| F~S{if`o{+`s0yO+2 g|FJq{Uz<o~FoS[D i1b6\b!(QRC%:3~<^_|ãNFh0z}|Fcfm0M>YK'FoiN`hVluAk^y K뺵YrE,sXJĪWc3{JtB-b 1)p1=GkAgku_ {#vx^Чطd&.y+ޛ*o\ƚCp'm3D̿BA3P=_$fhE%5keUDJꀙ:߃H{NXN%yWHZleqiM6qjSq$Ocda\U|^[t~iD)4TnwvՒi|leD25U:xZ!{$Mu9(ͥ -Դ4JueetN;(`Y-X`1@RkHέVPы 1O):-76J!ڱT@ITBݟz)t+EVB+IXDPc -C̔{?$u+b?#HE_h׵T۞Ln ﵥ,["[iЧF~Nɵ(c's. dn9r2(B&n -6Hm]B3 f՘gd8ϬaHGŝ8UyPd!eesEZ! Xt;'s0Qd@#>ۚت4UG)Gw _g D%'9許ӳ-f -2P9Z1'Bgz..)(J6DL&TJ<] {`8 nd8nh0c84,A?ia* 2 מIJ \aa-9}SEyn@ $*BjGKH%J XjS)]JCg>"(\دSh[ WAq, QmkA3e|ٳ2C'^ B-&"*'Y`N1 ;DHxPPP[!8orBy _Njub2+5J':C, a.[$YW!tzsPjMBnC–nI&o-uLu22*-/m 22c&8v}3|E]>:EP+JDUMVv}RYUNۤ鳰̲Jf -_^K8FcOڐRRz!zF4|-c٪thB;];l.pȶ&@P]+KJwq+JXl*'>!k:ر8 -i5~\S=WK2-{~ܖ#;dM{Dk9@ G >T/5m ԴR@qsEWb"O^)lx) SB}g}d0g%4L%߃CEVc0ZORo{y/RoU(>R%:J7_0G403;2QMG-#Ie֢Dw)3S;>Q<MI˞Sxl+$3qE4N{P!PGIШ@Ć~iRvp$i2:I8W+m Q"b!A;R?N)xjb,u JXp :Y^Eo C ܋16ok[*u%iDg$7rgϑ"1\Tީ l Ic] .wʛCD_^'|` 'j-{Ї(j㎡\ApKq"+[P0yHgٹ()9w sԨKyJ" -] o6BϸfhfPP2cB :^ Z5V:5Ư9 wlRc 71UP-zĎ}nD܌_UJ4+ͪdju$5V֣BHѵvWi=e-5 sztNdz9J^Qb1ay'!)[^ObZ/rT - 1Gű<I -g'#*OZ琋_m/xV֑dcuȠ"rVJo=I%!ҕS+#C3_FosAE?bY)ΊJL{ݲ&mtפZ2Bе/~`abLr^䳮6oQyE5. 4lDC@1Gqr -]=Ȝ;kK9ĄnDDEͷ +EB%S{8 -Oꂨ+'(Q i/`I~aQ| 3~|55fiIbfp[o>98,MlMM]`BjPv>+N"琈4xS58}`{Bg)P1"';許0LE,G/D0LQuIG[LJk*%TծVh>@l臐eV>qK(M.315J@gҢbB)"fMa/RIyn@ {̩q-%**1:Vvms#ep̈́JGD?8oiဌu8Mw=SufmkA4e|ٳ2C(^ kr*rJ1౓I>iռ&'9{,ԜgpE4V3&ѿ^Zo阨tӌ<Ғ?W;6̽Co=88aU_;pIQ$Ǩ`WnW{4YXj.% +w԰%d"a].:;vq\vN] [뻩\FzPܘ/U:E!H|[Pq{slFUJn+uֲ=ɮbl,95RY]#"lǕP#;eq>MRJJP/$FOȖUG 8,c#Д|,uTarU!<)a,9Q> - -x -3VZ3/؍R@_hnHx t,^{yj>\wvTzmHʩEV"΍ߧ3H>R!7=,^Hd]eN2LiS*m8?vvR`jEϟ{JVV;)  -<.ڬg#%Zq$|CICAVcd-Mꭶ}vU3THy6ig ]NU-H뮛 -9jl^I)9/*gj^3B)~F -}W{`:w)}LpP@ B7 -e۔5[>n;KQk@iy/rd',b{PYPM]RuGgr%EFBJw͋VjB3-`$NDiADDmїLzF.N!ܜ3+{I &%dNl஄`8G]0X\hu'"*jP :]饺 m\,!\Nk{,z- my y^"6-v> Hvkt4C ;4zspzb#WMP^HM${O.@@l7wIBshOk(?)M<^ױ?kN̹QgVG#MPޏN +rbiA R -Xb[:l87Uh&Dcu5pl0(8N-^u9BdA~T .~0U]b:_ՇW<ϿDk)&y7Y@8\Q\FFw` PQTz(-v"]* -̫g=`dld sH1H )$I,|+C,<#{ddKZPܕ#2܋c{`LG@ua=r[yuk87rA;Ij]3'2!U f13ڮnzhtOxprYLDLQ }k-ˆz4du#Rk>=Biĥ ߣ~#zWmXs>4LTڍDafPVQ#P׺Ǧw .j6QO:++b_MNX*j'?y5&̷Y -l= aJp PY {NH"侥9mHC#x2JiPNzʌ8 $>In!.^:"XIS7cR3 -zzVIG=b5ulؙ.b A_G+R~n^YTcKг_U].Q"k\j= % NYR'P;Tڍ&A7x͑0>#ǪS5|ji+9SMw]s{6RD {3CSzY'flò]c FRѨԢNPl[@jyLS$QX1*Y"vQ-9Un/( E/Q\56{Deb:gqfHIKS>in><^j,D]'(M(ݵJdL@(:`JկgT8f!"T!0 -{üSfũ.t!:euNk{,:+DUe9񛀫ʇܷ+I]?쪔ES. 5tr|y-/zQ[6VySܒX9Aף0"; "'*(p*!q6`e``y<=@r{ =$Ƙrle hNb;Na_<#c-iABzsWvxp/^0)̨O2vƠX!,9ݘ-Z2䮕g$uݺ;H5BIi#)ǫlw.]^㩺 -wţiU{ٵ82<`qP/w -l?u?]k0G(RI>3sF\mX}Uf+6_2[̌'¿$V҇(Ewk{{lo AK̙")L?$ǎ} I2ɨFhb$ڸUj.>5nqܚ6= \E{r_]X{M>Md)OET4xJdR&VCݤ;UcqtIx }a0v{|K(jQ&D90.ZujƠ,Qa&Ѣ,G5{9}d*516I!1ϸed\s0h!q(44Vvk&8 "=ݘ9Ygq&mf% m5Q5]Am^w.T44Iu)dkS?RQQ fv5{:W҇qRSҳ0~KX ^s6"1aiVDD"Hvf} {[?!ۂڿ3ǿ*%>l0~zYN?q~Dc1CR L`K.@l @L6*A@ZÊXKS \D$5x̹߭n.jQ qRD?nE|_~'ۥy!~nYHhm| Xc'Z)з^[b>tͱzg%%}1 Rs=ע`c=D -VB2as.Qb.BT:g$嫍*Q:*I@L۩mϝLs]yNb/Z3O.T7FcT"Sj03ԓ}j*5,IjM$.ݫl׀Knڻ]|-褺;UG6r* #CĦ ܛ.X]x Ca&i"SJ`_[I.z[(\ E,&K X# bĄ };~[@e[ȋxːꊷ yː 2gW4z0/&W;> -b=^KT'"usd]Ыpfl^ z*. 1MS@:a e299A -Z+ 'Ew -3$]J9NT0d b$T6G5G&F3QUD4RA*^N5[B]zEQ¥HEG,9Fs* L,psBʐ4H"m grZX ђ+Ge[P플/jzu-S_U m 1Ɠ/E>?~u۫Ub-kGNoB1Xa -CBB͐!Am89x>B쩈*w4@))hBHdRfQ) S:jT@֬dY`60QŌ%(qۚ8)1gm5>:FJ$*STQ A&8f9{x#-OjX8Dh:Ђ*i'2-H\ճ#Ga!q]BzZSO>WKXOo` U/ ss|i]P~2p"M\DGipmU+U1jۘM ( -W?K;6Ldɥ.K'LX|ExP4l6#EZdRйH8q:Gkh6dy75O75ȣ}Zj!5J)J?YZU_֗, o4/}/d|5$qeB͘Ԅ)HD2y*~R T16%zch"&(`@[CR*.b%@ߓLĵbTzT:Q_zxjb{i=Z&K߸q{֜8vl/qEyڹpAH}=I %nh?CBlPw"54GTx(CE}~6ϻ"?[Zz|tvղ;5=S|c@e3iq 0p O6x -CmQ*KEj8|6[6YDNw`1VF,_|A52 ؟F ,Czidܦ-MtRjC @ӽ8XPftr-Ia|,Z&)YƓPNQܴ~KEh $ź] }1웿vP<͈'(D[9!D0{Φx23gZoqum# HQvjU"IUzd4q}sloUaA0cQ~dL$tUdpT\31tyo[$1( 89TFUe(OX{X'NP琫^L -ɝL>ق~\ ZuI\ Gqm&S,="EIz GkR*b*by}q9]JzH͍$֫<_֗,lKڍ2UQXcQ nC,Cm#m_CiѸ.u jgLՆ“2*xE1NTťn4L4QҢ| 0Ǿ @SfR ߽W㜂-B/PFۿ5q3|0(,V7eeGCѭ <3OzF)G>bC tg\96Fz3ǜs- uЯ>#! -W@%eE$nD8FT|54|yH~ʖM.M*m}۴{\c5"J^hUKֹeciϹX՞7< hk(͗\XFu)z/jſ;nj$@I{h? ÕlƄ0L~~Rjvt%ʟױ|NRnj|zַa}6XߎW(vovc)jsk/MR1BORY(G ۪6%TGqD5L{\FYc߅JMvњXXu)׬COu._$-4N]W"QYKnnB'a[V1x&t|}5W Vlk#?ֻ +~3nTgk&{$tkZ&m&7MRS|m&WMQ 6Io6II)jSM8RS)ȾrLj-t8ĩ%YNJchaٮ'O]8x,4#vT㖜.҉N00c -5aq!E8Yvz5Y$VtHPQ3!W(Sd54[Ǵto""Ր4X5+Si4tzM*FIzkHn0U EU5@$SWNajF+"tKwk%3y61UX^L~W:NvOBR(BCP#=qg~5 )򾩓8ƣ2zJ:EXtZ[հnS7}#bL(,=nd_G]Clk6ׄ|g.VNlTMxLZ'[EX -A׎_ĥ:&Ф_bLk|ђ2]''H.,"qvSIE$$ 5ՅԇL0ڟsUw#9k?זٖQXKRTD)ʑUQ̳+0d7`X`jQK={@vC 178署7 -D|ι7nSN*fp[y?N+&Ro6f n"K{_i "mAb:Ac )ß?.\کG,GO@lªDVK>xs H8plgq nY5ÓUdo9 pb)y߃)IvBQg΂ 7)@W;;FnU['*z5k3Kϩ\o57g5!PR,9tV_6]:W T56<5(z 9mRѽ]1(]{ PQ96%Nܜ]QU!LX % ls)UPX -__D2Se'ĵ mUH#>ޅ:*Sƍג!Xx(cXeF悰r e%)F* )IiRv[;+I*qU<X T"|ϫKy$ZGs"\FXW I\?["l¢;46En[Er"TZjR$#ly`LO8  7#'8::f +-(]Kï/ȍZ[ͫ-hkS:E>^lw#L_u`H/OH}'wù?ȱ^Zd$]D% .>B{Bj2vvUIgO{zP`s86 J)=)= `n;u1ن"ҩ!6y\ԴmMr㦢Ol,#Kd;!/EEύ*P$b1om>ϻ*@'_w19{~adԯ!\ߵ -ʮMpNq 5&\U-ƐM<Z EE8m+$**L_^8 -vh6em -ǍڶR ;nhԥ -;n&3)mBBfSb7<_o G00:Eu/񃫝߶%0we:Uao]S Hp# =]O"tjsj&*-*S`J‰1,TLjɱ$>E]ˢDNkfDPYUj@R)))2>MW-@90>'MZu:aT՘"eCj4.5 UNJS'hqwf)(H RpY -YԸǴo# Z_ĵāS6~K7 TGLjL/|1)MCvhz)G0sDSL2R^B)?iWXx ]){+lD>$* FLy<$f>{׆;"H7"FĿݣqK' [% -;E9RMkN]69w-9w7IzxO쨢%Akq*|:ey:U GZ[i{IN7~8iۦ7Kw`G"FWf4uEډRȨ2U5.,Wn6xUMn}ʂаZ*]~=5̟AcRf悫{KOUoM͐cqU4nZVjʹ l5ْkeјM@VtBh+ I(k*Z UTea+7Ac/ nʨLJ#d@:Ff0]Uj~ʃ*g(RcyItObk9ڮpFpC'-]5/j kFI~XR^LP\[XIÏE+|&dӍm,槒 'EKHG,zO<^iKvNPrY1U98R:Ş!Ovl7ʎ)3WRAq="qykraz"RƚuG {z(w:\Ს@oĸ-I?U.>yWl҄a=V7DW')]IY,5YdcKƩ2\uw9f2z2H ¬NTc9~Ь9f1m^4Ew䄡=t8KbCZ@id%ژr_xqJ:4At֍%SIVg]kԹC\ƃĮwoW-/z;iS΂Q#w8+,P5Dä^=+=Ƭf;ADԔޕS4hv#{ڠO_cp36- -N)kZ0Rtזg1C;6=(mz=KBVn5+UP;h-yJ *< x=ZaqtɮGؠ7D[(lf A|YO!_d{t6:r+NmkTYgJBCne ȁ_ITAodG0k!YγN~˷PkVB0\F+i.*\a`M\-EC}<d:3 Rdԏyp9"~Bqj|:7Q -\5$nq,z"oD&4^ qBr8qgT<Źmf'Cwr8_&[p7gXpl)|SY!jS! -T/hK) ]@oCm-OJB.@MjD%V mB#Kc_׉"S+>ߢ;ƥlz I=ӘQʓI+tRS/=Q ]FAD-nc&)+v;/tHE5•AǫqNuuT`hJ]W` 5(oɉ;A4 ؿFP9?`*%52 /ՒkmYEoH껂, K ۣ:@d0Џtu(*FJ{!I*VF7y67Né¯Q{S&*aﳝ0df -l'6ҠD]qsy0BJ9fՋX# -JL[^6 6?/Ie17B ->jvdtYS4tW/6=D=C.S1Uξ.tf<ࠛ4Sz|TbHfNsn/m14ńh5'l۰`/_/ d44~xe١/C9]yVVɗ J4 :DcZή-l<ڑBLx)~:2o4Ys1O3 N {8,FךCdI|oST.jr~t8?(cMCsk8ڎ>+l~9CQf>'o绍9Dh/|&6jF[V.ds;ӣ 8 >q[oMXqWLn6rK8w4ƚ+/襇*pic nö -We# }6ϻuuGo\kkm?W䈞r5EPDۊmFAz!aRmcsI(59h^{TS 6֩u5l~ger*>ڪ/,go5۪Ʈ-9F&QPqOfeό*Nru}ߪF(v? B(j!)k9x `U"9uhœuQ9$./6RIKP:sY;`h[QU08q}Jg L1^[ɾ`wcG9ug ڀ=Q8h!6U2rS>,zGg#!;#ϙfzq3xb+sStC6ثC.L -cQFJ&Qº*N)Q-pzbӀA8NƛdWE0FwF䆾IvvRKb b˶*ty)cb:4\//5*ן.vflڼ -SL%ݯ/"5r97 /ivfrγ4u^tS4ǎd^m4(T)~1k,RHagzל@fqN8l^9L$M6.&kKgeq$eQJ$9*5:'@&0>z[Z$rg -"VgGh9I@P30zdV2<1:)~[c_i+4߯7ۻrLf) CH| AޠRЦe) ؞YսNsʅ`Q6trsY;ye9 Y u'9:LlxAĺeM b$26[xȈ C^8?$CmP}w؉QXS]&,P - T;7i8_Ϳ܇S] 5"uaϑ9<0͇'nr4EpYU.b38)JU%ީ7%c3t  R > -EMR0'R,eĆwA`ܳ2;eb\r,q(@znx-Kt($S(U~rɮa#ۄADq!۫\IID G84F]~l(uV*4` Z/#H]SaO_6S 3ݖ#L7q|d*f& -v~6Ib?w9>H+σ1)l<\1;(BsԀc[oq!1VxyCV&uGϴ.mZhorJQ/g>Pn(y)16.]xI{ћ{}K`cl>Pi1}8CR]5z>Ŧ*ՁQ8δUȕ&*\3%1yЭ.y"{";Fki !=怨zuON8xθzRb_I5Z +W'Vd?5 gZS: r=[PƋWR[ې74aT%4o@^tUS%h8xR*Mlw) -d.1xM`|wݙfl2h/Uc`f\F`,PS&ĨTyD ԲËjh!zO:B7є~ FkcIo@y9+LЩR9C=]9Ԣs(u] ->hо<[jMY-gsv2\]6gBV.Eu"jJ@[l,MnSHs.OC 1־| Y"sՔ`2s~e}.tb 5*OOǁLc$(r"D9-f^_Q4A]`zxJjT;iϊx[SOCiA,S+.J"wT)bx HRlRt)Քex/y\B $Y:m@,i&BҁbPnLdP79)ÄtNq<"OⒽGDclHJ%ZG0 ~퐴4⡢ C`X̆AO3]TW G XKp( ~c jueAvX$LA%-nS6bf#t5xPV.uz j3JJ''-LT6m.`kVDIK"xV?1rހ^ު̈.Lί2謪?vVC#4NjPzji"VnxItEg[Q_8] O3FN!p{k(}2nJ`I*csXg/Ws CXH|-wI@iD&DL}d-6ZpT#ƞw@;S -D}O /&URs~r3ú.B,\J,-ij 4}xP0 Ttb1nTHb*tW| -dΡ@>D5ODةgYH-MmMZAJ_p/i7ס7 ~F)<8+VFghM%ܥS;p^e>'ێZ|m&D]0\ީM qxgV`q(W1Q'h-7*W IO;A#.Ek\ӆ|ϒ,+VhFWBx](}ieq?8FAEiF=]SXq ${Y' -:l\L^. ZlPQ$l eџ]Cq[ ;G|wѧogM+e 5TgYHkG4 lyؤ3׎s=Jh,Ybxt~w8*>tssZxu@ $.I޷T@yg{@e'Ϲ"`_-UX -PJSt(5='01/y[Woԓḩ̌> ~/|_ᛵioL -;-Lu%*]k:NI4G"9I'͆nhŊG-=Q6+})-(PN,FĩLMOt Ƅ>Ru4@ҊG>- -Gf\όb6edB)~ʑA*sgO{X")%DXjdTϛ0,D%N4MGŇ3j9u9b3li]͎ ~Ya9DGl*̞27uiV{cBTjxk)Dڱ -U3gYB+vy'VXrtld2z@]Di&{̽KL<k*#pzcm\%${jnUzzD:ufU -~oS8+F{yZ4Y̟N KaJ,P h bld.&{+>+$q_ٵA_GJ(\;!ܵHe}񁙭!i .`_R.jHGvflsoN-@zs-O{o¶ J4厓'{wfI@T d(όJ̓4ζ1 (X=h !Z`VMOaE:`C)'s$P"E'@"Kܹ`1O^o<6rN)`a[yDšo]µ,|;WKsWB%񓲜M$VSzM9{>wk;e7٪Rxcki I?nl{HV{ŶgS FSʷ'67,Mcmhn5z]뙬n'7p< U֬w; -۩-=Zg#I$qCs'J 1>q@X CW`g@-;޹["GdsaXrW\7vK#s{" - ӭV J;HexyِUt^87{?m]\buwHXR7^m1 6{95st҅qh*RHEFDFɏ>Mm̱ͽɪ8,փGŠ!2&׮uq3(rՅ懏.GI5/eWE((K<|cN,$OH!Td Arͩۚ*KɊ_2ԝzi9H0##u߭7g(W^y3n<j>6=<-q4Y|RjRY$bjWSodݳ]QA7bfh:.nev `ۼf}֞]lw't*PP[Ol4%HR_:ן3[:(GX;ݑ9 έr/6=jc[Le̾Ru")>|YpJ/lh( {LbBV$1en$95OP:[ϗ bdLþiyZxjL*j|ef. 1`! ԵKp3Vo Nr9#ޑzgXV&0p+kI dOHO㙫RQ`NVrJ7SJTK;@D. e$GnDѽNQ(<^I+!="#UTF"<hGkq}%=2ֶwΠ鋠pG);zb*6xųr*"K?9BM4ըKu^$kW{ Z2T~zDkU_)4hzڔeIo덍?7s{zƏrw>R|v?e;QAZ4g3X --hѵ]['=WT9e UP~H#WOi{? X4p\O0 vuu =h˅ ] 'JwєԎz,Ugf堺  vk]]xZ3 SZIN;>UK݃`چND}ӰI2l%F^9M.skST.rƱiSO\0v)^a2e&~4 -Z $W,) ۲m5 IeGwVQ nJ?(bJrTiGqYdM4QQ]ii"gǢ3Uvzpw~;~̹WsE,=o> b wo9ύ|#Y/JS --7' -u{:V4.]Bh;fQ$e#cxE=YIۤigV|>_̗lE`iGsO@厼Ljwn /{؋?VQL-rĊȨ/GCr)C}Z aY"#:M{+PIi[=Rz]ɴ&l>:$xuL.J͝v%G>xgvT59V.=&s* g-V`7N*\Pd8&OϯG -$)h˰B0!T4N-%ST |T -zVCb }WR׳,@F2vk@DJY}k&W&7Ak+&WѬVCE 6wjkG@a,\2Q)%?69bv-J>[[iN3.O$i xa%܅^2˲#c -1WBZ܅jp[ NDVyEؗ`r5vHǥsC E Et%\͐p/{",ákx&ГKT=l,iv2{w"Rr&\IfwGNܜ -m6Mղz 4dzS fM!J|EfR#';Z jI@ \fʴvJ2iRgp ǃ]W:k"ӘS99X]=ކJu(牿lv`2kЈ; j$s8uY .|Pe2kSY-zP$<'#$)!*`~K{"/=d-,5/f^dM"ų~o@h(g75iTHS7 pqtcJa&u&>;Ѩ֌=$ZS+t!dXUr2)j;Wkgm3¡pbjn#r{Vpװn5!/kTM_|oࡱ[bZ'g)j#$Jˤj2g=Nfr/ 5uzqϝDS<%or$&ݖ*fZzkUJ׵4!%%֮,[EHbNZvĞ|d3xz&g֢K/N8XB. aF.ՂTb薔* -#f79- AM5P>B'? {1Ͻ.[CπZ`I,8>rH l5dB^n_/A,~O~|Vy~a-~3ڋ9툫BFdVBih"J]*9#`‚PTrt$EXws-<]/m{ 8,#[ZdϮba>H& -:`ǬCޥplߛ?Gx6O!=”0*"b[d(*sUqm1.B"oUlW\e[⥜^?4aΊ[ dֲ\63:(0BU7C``^t_jϖem/GJCzx{qb4ޘ^ݾ4q7oc@pPgP᎜`b>t}Kx0͋hvP^;ֵ^Vt}9p},j8&莻Qе-$jS)D^QwSIEI1[NGN:] -B<ޤ:o8R@';^;^tof:f%K{9SթԹ|Ko/pTSa+ôw4樺wd j%IhU.W5@E\|exxBGb58_'R-Ħ\5/.C3 OO[ڻ?":; Q]-k~kCH2s n-'U٥fm:2&̼Ʊb{"(! Y0l608]TJCIU"+}*$j*-ҟ¸A~mPK\B r%١)պW1i'xBܾZtxûѲ54936rE+VA D㯃F?l@Rdg8IĊEgYY" Ft{w3&ɞi z:cg\7z]lcgfVtXbNՎ L p.Fi\[js)?7ho^N3T:H[‘@&bM#sH]zZ? +"g,d̎ -\ճ `h.H`Yy1z"-(٢TZc:-n%j9a=RkU)MTHxdHCd_8kg̪ -nhalWk(J\i=T.0اȀlbKqg*8_ X\H(:8uy Lj![.mgTaEE˓,4ߴ쑋RjyX_L~m6&[ Q$@6~;_9P~YƿԦ)WXZ/G&4kSLaɂh}WAD"M8Kׂ/PJÅ%s-OIg/E@'NC@ -:tvU\ZSzGp%Va[6osE0jJ4 4}=s65d2I)Cc< [Eѷ:}K^?F5iۂF+EkZّh=TnpFN (w\,'Uu,__T5Y~V!;\+[ KzW'7MǦ̛[If(N%렾fF|){36 m].S,j6gLԶU*YY!VOi#^\&^* c3nY+O*ZX1O0ߠA uƪ&d"ArcȫӲطyíA_#%Nc@@dɔ8@dА8yrC@O(upX;>sWxNMKHUɌ!F)Ȳf'2_ZykoІReU:GV&㯯y߿|hbS狿}lO#ۼZi$3'$z6vY-IJusQR2 ;0:P2?uAf\[-4 ¡/ 9~k⟰f'Tj8֭\Z˩bԋZjH\yFC54N2csH1 ]d5b1gV2/C}/R ]ҧzb/Bj[$Hgb -$X[ڊ -x~+-q+/kW%bFy P;'+ J:I%^ -\%UΜ& $F#- [R"[M@Aܣ~O /LPٿ49丕E\¢sTZ``*@ԇ!s=X*Fr7 8/ >_ Y(NM@:C4ljFĒ/lIrܷ{5K(KE,}xѼ|x*NSpQ[+GgˁЖ'J%5_DEK-5(myY`dŷ3v5XxZ(pAG7)jb?3Ƒ0=*ϸ)Q,Vl4n?ȚeV~nG:^q+rTKZHip!~NLZߵ)'ed ѫ=Apy&1`U"C!Y&>Y\d&D#4)-6mʨ$BЏhj@] #1"k&#G$=5$(*'ψ,nkg %`oV`I=.1pv{\;i|~^ϴR JHXRʠhLgwH4Ċv|DPm${.MQej(EjKZ˱Z6"oZxz|n1{:W- EE:%Oq{>L.+Ѿ2Ɩ@ -zʤJ#)K سVy-&AZI>}l%4=(O@-vs/okV"_6 +Ro_ dKaڎ&xRk5N~%</^cYY.܇Jʲed 7ۅp.$sOHHZm -XNJ)UH}\DwR?'r{8߱M%>G C%G $AZjx8vdCO6%C@0hBCA*%C4icy$|pIEEҥ)oۓgR7uBDŽ+, ux0$qP+@w5a/>iۙ1ǿ0VR`c.SVhs,wcZ"졌:͕)'gOe2&)/@=bYoh|B+DȑO\Y?ky~x"i@znA:uXE`(຦Sg`_' 逜U!5tdSk(cb^ht\8FvXAЄ5P z4: %TO-+~ t2W]y)f* -.VdA.ǀZf]߸}l"LU',Ӡ>n6b!'Eb!1wP`~F&5]=[!ᯑUHIlCD٫zO)QV4bt{Κ>㍐J1P5ӍIvʧP:ө~rUJӶ`Q/2zы^dvđzȷ.VxR,e׸vV%p|9a.8gF5n&Ж) ະv9p>\ aÔFT†wq)8ŹȀN9G|de?VD yV -:Z"OI&SK̪#,NKiL0'| -7m" To0\lgEd&nI4IK1dt${.Mv#dg:B/Oԛ'K۾Kc/|=֒ſ֩J+Y!Ui*VX9U5 vnWP -cSA׸X(MR[m$I& \5 $px 5N5!UF(ܣTT,TogҩP;^|f%*_+R)NBgQI% s]% #YR:_.v8݊7`C]Qؓ5M/"6oN!b*JpyGjlj\k!qJmJu 6[GhUn[:/г4&v&V@;رdv9`EmFהAPrxP *rJz/{bM'lNDR%`2ȯ\0N@҂C;x)( bЈe":}gNV[f& QHIB Ɉn[Vt2^;`ߙ -G`!;ڮZ;$G82xIX%|B0hxyAė4B,$ }88-T -΁8GFφ3CN5#8V)uppwIޜ0U씚;=RtEz3I &om5b1UIܝ 1%ßm'.p .o38"t T+U45Ga??翖X]y6zPWnkK3ƠFBwJWS רp$.psá7.?^בpMU4)W bdb),B@M}]W`պ_s cQ-8a8N"H _!n&k]UsMD"-SۑlMwW *(MksuYLus\ fvϑF:Sڢ *بӹ,["G*kMW{sՊȺ[MCgAOT@|I2Զ[PC,7QL+w<.Oj{!և:rozQ@lKލ:3.Cmo)!{_HU<(`SN0koEP4Ȱ>L;X<Ҿ؃O;Xч.Kg6ԹY|]>/!zMiD-Z]>s0p KrDBG?y$6_;u :De -D"2.[Ar߯}nTw+_.I6uρl 4NMY#z `R);I|V6^C兴x /F-N\Pvkui Sʏw9ԁw48E2vKU%sb>g\k؝$wyU;N<%uak"ߝZ.^xPZ)n}>rz.N{D~7m`&PeVs (,mKH9q 5(*Do$P~R~ܤ!暹7]s^+ΟחVRnF7\Y]NstM BibZ">t^_R<7*z Nӹr.55YFDtB.u=kEȵwGcUj+G';s45K U_g[]4;l:e ՉLƗ -=cpy&kA8S̭+}Qfᅤgue%,Ջnuj24(l =KNN.񼼯04Wz /.ʇ`y\o+Qz[YyH(_vj}#a?!d@wr^a*ubA(CB);(=/5DxĀ7'l>k]6Wc<ͬZw$mg5 ճ۳q[ŵR1㷖S\.h "q^ p|WKe1!Y:]DU%(2}Uș+a "+wn&MDyÞ(񪁋H0+ -SYc_YYy\.qpŌ[I5z,vE?qS1R{q-|P##QƵGhan+B -4#A#"er[,UI*MIYSOʪ 5_0+ȯ>O |lԿEr@9mIC.4W= yFZaǃZ -"}7 `9}^ 128R](y1qL,IU4>*( )i SSA'͢}<];q -q -VPwY{%QY4Z+m?Xp<ZG;6'QVЅqbZ i°p[s$Z쓍݄W|Ț'׼֊HdCR#apN/XJ+2/Ё#tNQa~&|oY#&!0 TSuې#0٦'!YeiJKTf\60֟3G Noɢ7 m85Ҡ4PASkA Ռ#JiߢH)R:1o^* -. #Jp¾w^&Tr,B65 ̇h:}Bkuii\Jf1 2,OtnK^ <\O}RhiqFNwE~45@C -{xI|죬a|'z1֠U -( fv#'u4uL:,u}Ŗ}ux`aCRh^|][_{ yY0U+_- wQᐂa-9|oB7ϕ NzqȤQ'mMhdB-d;OJg D`N: -̓R jSA'Yq};8V#2:(~![ld~(W̤"[ED\8|KɈ'N)l$@uD6~SY8J=x~, =&}Hk=Fj>|^e#95#_k^= _4`|X ?_߄#.׵巪DvP]U)Y|@q6mL_CIMٱmݩR^%PwG)Ćgq[͔o`tUQlpY8N)]eOYkhAmRͳnP5[ACDElUnMRx/pQq@#HoOC Q 2J%֧e@qx -AKRgbHg]u9"XNHt}ۜc-U,M{eQqdNÚ{ M47b^Lbʚs J - -p}%=FkTkE#%zΙlW5~AsdRNq\o~þZiXӚgD#Se^T)$#!Q$IaK?ݤOH~Q2El$goi$7,ZE*&߃ :{AlfT!e/Ʉ(>!ߊu>S5X K:K&IRQ-nYrF&*C0).ǰx я= |sǗ$-xr,'&k&4Eߦ:6ش3$*=R옴XZ=\;AH%s*Rϫ4~^^{q#oeP jѾ @id|ڠ_iߎ -x`9 3:^"҆JLcc"ٮ*r,oB~ri\\=kD@c.U%8l|T^n48e@i&b~Gh>352Q*o7I0]!|f3Ӕy!m0T&/[̇ -wKpNH]JZiQWCK|tR}dHs4b}>sU(@"霊Vۋ +HUW^,&^/ 2>\ĎCS^]~22Z\;+&o|8LS1A -YM2璗"@U uЪ6-(&~WLHQR=.s&P(x/۷;9xW‚ -a]Uau׮:[ ŽZ@j,舛>sQ]* ֜(4&wl]$Ї2{~3Ϡf 82!4d[kQNP -qqEX6j !,ě (ℐlr㭢JM}Q(2ߢ^zKS܅_1|PKa:"-p/P.B|n Y3dbj1̟f.rX8Rslz1YTdq6 iYb0F F7i!d,4^cLD`{GެW\ǢUvTnc:qh#(b`ܸ  :6mulv} -kتcc_oR{c8v +v  y')סf%F ?A yϥSʠetHXWڦ xOC -[WuΛSQw ep*Lˇ(!(񢱲4$ LDm.!nX">L"MAP}Vq#fQۨj .f6ϟ0:cfdq{Bd6}/eMnDa_@bIQH1ƌB~/Q$;2G@ -əFGA^yMžQwew› -C z1z>xƾ1fY1ФjhrβsQcW-{\^^:U]3lڟq^@T9cB<4wVbw +t9 wlR̛<.kD':,SUgL4Vv"vWjN(;sHJnQN""6GtyϝhJLlXrd9J/`\dА2F6 \7n94eG:.4BPSB2EcLS+0tCPc@ы !76tNSw:.1Z>;YS -܄շ8wZ(RiqW΍X+rV4C$,"1u!bi½DkwqslIsbI(k7⍥`rv'`FlCE+W,~Aߌl`L4> >Qv9ݾ+'B(각P i/@I~aGKF2=u \㚸34f۬YcGF=y22p>z); . \! Xt;'s0Qd@%|VS&\#~H@\-'+'jY,Qɺ @jmq s"y砉 -\Suz -\euIJ 'U!Ph ! fxpb%Z}* 2 מIJ \a,9(Bnvn tpK ̎Ɯǧ%P%TE0FI,ΉN5*yG.v:u~:FjO蔾 -*dN[ )O,˞ : iS2*rJ1౓Iry*ߛ| bN3`"tPSy|Y\yJ'CZ7u+,IUZi+K.[K]p::~LfJK~!9z B/.(YfdǮQ\E!HqLqCﳵ -+{Ӹ&gS cBVn6^*ƌ&03.) )QȆ,UԗO5Q0UE".Ef?1=G\"RTo 뗆7P-חX/h'>7%:JD'DUvJJO{xNgM[˧6ZfPyzhT]؄TX&&d_׸+f :v]O.B⽑%Zo}d#fѓ?BdSЫ yΝM1҃U鬊l(,{ՄDҮd*lLDrL¬e6P~g}tW7Pt'UXR桶:p\ti}2ܛzshaR>?`ޔ[!oцRYC nm )]&-x2%B)jBiu< -r؁.o^k [ZbY^6+;tJ7j1#D4r:-+hݬꌐJihx<=ѣ qJ:Q{uN Z{MM)QRQG2Ƒ*A!ƆX¦n 7"lg@]榝V95=߸I䱝Rl@T́8h\*e>U 徎UZ߶.:]QKg*-A1ɮ";Uf :Y,5J*J3&_3bH]{3I!fr+Ⱦ-y 2KhAvwj=.67ırЏRw|Z纛CڮuR8g -)G[x)*W@PyAp,H:6iuW矘DVMЦY7t)Λee_}8xy'+1K>~ɯߏ}G'{X'*Jپ.Aw{c[ԓC{m,ƾQquc/KykK]rE>\Ubz]j2Æv!U.I% *O"!kS(J@DUM!m!CR||:78۟>tpni%Ъ{V^ځבXgܲ\#KgP04΢#yrnQb7NJT%&l;5z"0{rPiy(KDָ(ZXard$#еjt*R5lQe0<)SN呏$$8偃t|Sɕ&o8"(.^zL;g?KRٿ>rl9NA]$1oݼL&{JrV^@eBdUt9ضJ}e\[ʉ0tN%n9rMWz8`g@Tb~ %ec(EQ3?ַҋQ.- ɣq.b8z;1va G\ۉ;Q~\?K=-8/Zcaeu)ծ -YB!!T3FﭢͮC\5gXHI42S]3m@PV)pʇ155 EFʸߒЁn%u!fHYåxgC q;Ŋ#:U+ZԴVj -1xU*yi:7K/,kPr,oHGTvXY։ugm*fg*s຀;(bZ>.%?fڼ,Հ|fۚMklg_ʺcHͭc!MيN*TYkޚsT! . -YpqKKYՉegbZ,/EXRs#3]=pK8cE~*>6r/Q#Ԏ.2kuJ./4t4,ŢkV`H;In^V li]6rm֥]}}&kSH1-P -2ٽ$fy:Lb] ,%2aP_BX߄7ts{U=$=RHPI@ =R=kQMIdSrտELaʉ߱ӑBXq>>%%p@'W'aruҎIO}QZj;'%ڎm/e'Uu!)s 缯s ˊÆJXXzCIB uLkSӍi wc|_a? P'ÃAe3iM힚:4MzU+h:' M=9W|)~ƾ͔$)q0;PNc;fAo<-wCDLmXhD$DvILWu8"c30S අ:G^Q[W/xm8T%UQw]*4EТJiܰU9^Q(]N#< qaI` - NJKCzI)64&:I)g>̧3r?,gj˙僜tp&W&*Ŭ?KF_iʐ Fak0'ok#` I~H4ZkH3S# 4!-$ 3Ud3P[y+Jht+/Ӥ\:4Du%ֿK9D <@\OԨ?hs\@Z{dY؛5RJ; 8Uʣ!#̲9iH/岪m̮n)&&bh?K̄cBau\7'M(m%% \4UEHU{LY1tS N @ UJJm\X3 zӐ,"K*C 4̭8.%Y8UsҒNqgVR=m>w9D=zCؙx|A$$6AfZ5z :l|>--TeaqOsX")0E]㓺jm!/9mpԋj9ߍrGjUhٹ<<&4bx0m(pvƺbtNJζ8r?cHR.f#afQaa>vp8O2O(6Zw|Uށ:/"Kvr \1O -{)71k&̊ vJV)DN5l@| XEmJD&#5TL]&uԤ*ZMɼcf-}3XCRE8yuߟ)hn3gooqS{UO 鮙V]GN `o7H1 -i S ->5^]ܩ= ->#=1%yk BNaZ+de]`ʋ&"Wb?aN2<\ r!:r.J ߕ9;['IJ4Vf+ٻT?6=ipEr )Cf=W(ܕ0mt;ON=:r~o1׈(T6NPW ]j_(%z@* 88c3µ2\}Gt83Ua|HgzrQåȌJYF\]I3PVFb#[֊nsɃ7 Ǵ&Y\e t8Jkne_F+V,9!Rd)^fs0TIT-_i=K9n.GvQUrJnDz>!] n/CIN#`pG T?sQcG)devYfMB6AjXXDU|Q>#h(۳R4;x+&/E**EL(0aK]:gU1(WW pզ)'l-Bd\.PWEF Dqi΃;X]-i?B+\lD.n8f6Ԅ>kJ<膦$kM\ -b7kn~_Jsm"rq1e\Z"U#c#׵! jG($yN@IR$zRBRV.zȎޒ:'d(Q>]c֣_psqDIFp]QKh-hQl{$"PkH f)o\T/ |,\E'ˇq[Uiޏ?s*|4j\!ʩ!-}uC6?)Dܒ_vsg-!W)E@SN2 <ށu'ԏLΰ݉)cWL>pXޓqU_Y+y4!Td[Q~-lz>7W3}-ېP/ϟ7ס^c)کԽԂuǖ";w@+ᘾRSo kqkG\a5fpktW ou!4-~iI}EP`.U R vx/5# ]^s8^lCl4\T( US 0E*3*E*)Av]u;;J'## 3Rn.-gcT{PJ+m*/#<ޫ&eTt”qhl.%$TCi+gP)0=$-NHo/YEEXb9Er㉍ٝߣKʚR訆;vk@ yg=E3Qgh^ܚy7(VYYڕ== -}nˈ:sQZ1=U/zݎn BcQw * Hz#q={EY* [_YA#"["3@c k T٤@.gզ8LlЁ^$KZSV/D ]ij&Xvf]O%N w{$ -O95jJp1D6x8d KFޠ7Sґ#O$ -n@Q߳ߣʮʧPgуyAC |Uǖ -nz"j -gsvI&gE+bg!c -vҿ#|HYࡦd.Z?J.utsճn -?QP'/n!@ݖmD0Ņ\8t[B1A{Ek̚򅠭6Wz å6{d{ǿD^~s2V'yJ`@/oZ%$$dE1ݒ' 5% Σ}Mc9s%$ٖc|<x Pd/Rc 7p[PLE8B6(.S 9g(ReeZ8@+ݲ=MO!vN(8}=fiS-#0/9bUJE&`Hf3rɂUiz'҇Lʡ>'~vf1hE9~Pղ2mrWz"mX?翦W. cmv(-&[4Fa&uO:]h0D(J0ͮoK8Po[QY\F-3_9P& oujn5tkEb`N~,R/J"0(m@S>ëR^̫*y"p≿ܾ* pRKCGerzj"8b`UE֩>/}}ep}"d}7Rcwy}F顲FHL|GиoQ\k3ؐȩ_6JEr\j9ˈ9cv+KCfw襡BF8C.$O~CwdcK k҅W -}AU-耠T2!Dj=HdmN̚\<ŽЭUi*ba٠}CRDk{FO/"WFj\ڼT,̩#9^ˆO$׎[~=%Kŋo;Ԩln-+}Wo4t )ҾOzzԾO4S0@복5*j49DaH_DH8ih=R0=L8ЉϘP(#TgQJl~q.}!y"uw@68R7i4`y@pX1n }*n/\"=r"MDQ!LTF5 d­2]TƂ -`s["f ihv YjoObDztTi4?FyGn~bBUw8;4ƴ=餶tF>n9VD4$-.'RGa)Y {3t]AB-2\xU|v|ƝEjdtTԴ nDdPъvQj -Xe\ɝy8Ϲi -7kpbGP 9^!D̾X+)9cdq>S IETsTZS}TLg)SR\%5%z>$&;ؓ2.:\= ͬz"z歨/Ƽ9.!= Z˃ -)X<m0/~Jpv -(|RDhe a'pHL!3 $TGhlcOբCFJ%N^whtj&rTGݽiͶMSʹ&X.mpltԯ>>1aRsq Cc0bd;WvO3mB]5,z<nq<<>ڍ^M9r Goke~O SbLz,6sF޴]S$b:oinl޻u S~M7-+3r}ft9sRTC`."e!T"R9x #l'G8 9AD mOZjb- :CzO9ӥ[\axK=&"v',H+,3LN/'H;ii.P+j(HCiY#k=ҽ>`eM}y4VPn$4ljcu/,@=3`s#@lg"LO -P+:[gȾ=ώkUK8qLXl[j\2#J7meyc쥒%;=d~ $zyaWNq(ߩ(١ dLbU)3` 'Yq_bj Qؙ wjj `-<0&<8r{˰q,%ek xR98Jޓܐ<׺&W&0n$]$l"tÔ+U;@ٕtao[h7kxiCNy(!!!JV4~%r1iy6Ghy,D&;$T>H\֊'@D7b(l,uP*U{> bR6-*D bZ.hEW>dnRvH2Ot luAUZIޡ~a -F|!峔 - - uUE_I~%fvKٯ或gkM}C;~"Tz>8lĿ4<t:nܽCٯlR8*@$={?y}x\U(4ͪqb UM@D -.Tt&'2V77OZYvR-G7۹dw(=8SJ|YLY@[bT8˦hNSh -JcXcAf%Rf U˜ҚH`L-fM2֎ۦAދjn=פ b $,XZW̒x#=GONC/5FgG:'*ATq>Ng6X25Vehf:LKB#O]$-b7IT*pm`l.B!@pùjJ Fg53H9LB.K`@A'Y.]yIv - - wp(=7YmEx]$̾wis%Jo]o]|/uqS{_bl -pSIWM?(/2*1lLL[CWB`A?DǨGiX2g{!̢4Euw~Ho]e*S%^̗{/kϔ\FäI J*?S?Q{/ //p’{!20t -L4oךRyٲ<w^ck xg,e8 s\fXrC J9X y& I2+٪KC͑33$=?(y,ϋhPeqs:`X/K.{?tc|#x[>Wų>O):?It [ꢭۖ8<,Tph?Pm[~SmISW>՞lj ?;>+Uw^G\MtO|Ny%u%G)F̂: ӝK1@iL8K EZ Wrj2odzVAȡ\] ..?6l< Lg8 "V-dBHQpI.ɸOΆl]n -ۍ }sjs,ya5PzO 929'Xذ?FW*>ˈɕRϑo{|F_| *- -;UٵVy0n{צhp/ob:Ma1 -FO!vnrn|*~ ar a6aU%Ln`+PΚ\$:2wٺDJC]>ܔ=KRxK1=?yx!D|Kn~A윯8(J(jS5n+kQo!p*=x12}|!0J F/A 7x ˹_ФgFXIoE47J\QPcyDDK<[Q7D~0AD-T+mdL|Jd#D% pe5*?ɴ$J07YsTέZ[bu ·5cgzP; Xm>T\x.$[\6.v1)/ bB.9Aye]Q-l9P<7n1Y# -mCi~ [_6Gաhd ̲9hb464^ $@z`t*PR}Ml V<}ԾPĊu@9 7d\hlN;_,_Y~ hq9őA>!j02}! jf=[g'6`}!g>@loY3f0q-@qaUGhjDCp:$;Fl<#&5{ǽ|K!3q!7D/R2Ww1Jl{o> -+`?}T;; dvQpmq8NvA$K))kmQZ`08 a7x> -e ?lAHq3.,l!} -Z>e"J| \C+әi4-45yY 1 B'9#pq6t"1Mp!t3° }\` 9ФRϨ6b -I/*~Qs }QdH[tt~oAiֵͭe9}:iShX壻{alZ*gQR_#Utk -jSZԡiWNq5'!M0g&r\Æ!"4݁ |uH~ֶ+`a/ x9[@ kݫ(@o"5m}/3JsgmP-gtc7 ?0R_9 pPke$.(Ε -q/9jq:oXF4 κG7S~p|nї`c6lV* -EnN5 ѹj? .TjPp; [&UA:X@";vr^2x0~ݲfV;:*=Hb@;,\E6Gge]o5ǎ̞-MÓd9jsuh;@׺xw -!J(r@#%zEɟd;$bϜg@){U':)Kbr=4WrmK̀aL1m7rd@Jk"gT6ocbXB;&1HMYmaF׫WhTh=M6Fu] -8ӈy&@ -Kƹ2)*G=μb \rXr>^FI,\Gq9Hcjf\֢  m,)J9Maq`cQlJ8`QZ -2O@2H{cG -7iqj_Cf,z3L_U07YZ o$}ԝ~nSf!R^Zjܮ%uO -q"q[U5( -󮳄3QY -&d܌\ec܃d%q:c𲮇.A jLz%C4ycACjF 4lʓyNp jr -sԏvz?Lzt- !$r*KvMhף.V/99Z.ThBOp}Ĝ/ϣKǰ:_(^3UГs 9ŚNkdC^>oqv2Q* 5wŊ|Ͷ,3{Wwȵ= W'N[qZ=4(B7A킙 6u7.dMNL8sXz|3lf1߃z&-T<J`0<&&$Jj#!;k5u5d7"'l^C-îѓ;*ձg~F0}l@?).F`pAJ\: ق/#2ekf}k Q;U1FHY s ضf7ʶ(xb@򫵞GJHyik~<`ljhlx)([ݠrW=1g0EݛG'PdհNW/pB#F)\PPZ>TB.>h!'SصD2mh@Ga9/%/)2,% -h5(igFa̱^@Wϛ@CvXW]doO4q27~T -_XwPQz~7JMG:U2ң9˷KaA8fzF@ 49O 9jƓ30`n7wp[7\஑n.Hvdu:b)9BC1RgFW+O}zkG%>hZ rT\[}Z-Ms *{MԦ%?_ppk?׮2{J}7ll/o{u;ihq7u< ȅ%deElJӯ8OK0gaY'gdb߷[v,\ Lozn<-`gM.-ئwgwٻe-<8'Z{fo|ٹolN%3TiW2{1v.$lU{(^w>;۔wt3~t.סj^V?9p FA;Y / /ͤv;炴b#5R@d[i2 -uջ?Rܝ୾xտ>eU^f-_~$ZO'@t!܉z w>Zw(J&V[%*\=W {DM)/p}Өo~3?F\9?htg j11A4RkR:I g^o -OZ)X^Ȋ/V&unv?|sP'qކӏ فegݰmyԊ~L 2&iUrHٴKزPlS8ﵲl[VT2{r?*{5:V1[so>#p79z;QRXΉgn u"!͚{RGLsPgC'o?`1Fi+k*G3]o{ݲWUlj4]08Wθ簽Ct&YPΑ|ssNZQ_3Qcp'fa}T>f3w5A OxݎݍOn6a~beJ(익LW"oS\$Pۭ&Z#d]Ӿ={(a" Ef -0 t_ r[dӭYSp;L<ϮdRcwed6Q *|Cii%MڭKT|\ݿY+\]KoT/'G〘wΏ&2FZsF?3U냒xUۣ.dJL࠳KwcTa=DtYmRVvhy_y@o*~N?84P~%MتUJ`4MG3(~` Y)iSP)[ -יa*VvYE'˗m,QًwNXcXjZ dyD1%uxf:mIZLwc[46z/w[9E@zPy"3:]i `-v( -"ULc@DDO̘jlqtЀ @Bz_BxaRH4 EҬk޾/ > lޒw"e+(*^KVtݒd&kO5=[}xtlTu޿X؂Kƴԥ7y<_͙5F {=p4HSǜ9J]Zs^Miz9:uGfƟkƟkƟy =܃3à&2:=Eً- :WqA4ƨ*PAsg){ jtcW<&jRbkQ'bB)nnB_?0..Ei; -{-o8f>.t=YlL &LL7cE^9YVtY wҴc9s>W2ef=VNʡ]Xlz H͌s Tx);  {pB] mRHڇ..ߘm2GqcgxT㘐Gi/Ƅ_MGwugӑy:KN шRt>D騰X^NGn)15/}y"ohC_hX -,}K0GDV ~1`sLV]#8P$Yr.s\.'ٚg,q vw2xL{\0ڔ{3@WЁj/ jw -hmV`{a@p3 ɝgآD9pU?g%m-}iB)#O;p 'tut9z8&8!]>YϺ|>Y9\He.SԨs%] n)vU\`1J+dn9w YA@VPؔ[r={Jq`G uኖ73x:|X5^(C H u+'kيRTડBLح#iα<<Zu߶r^/56+'0XvKu\ -̺_ʎsX #rDaJR XZV`ޑBcuYu %V|}{=M޿iYeWsݚj쟾*R>dkT(6/$ޛ03l`$½4}U,PЕ*"qL~ͽw;~`IE(FKˆd{Mά/  m: -E@6f&%e -2M& XN a+2NtY"C,dH}4Kff]0K%//EpkIjC.z).C3mѱ_RG!֕|kNV$E}jh=I$!sL]ɍ=[ɏQaRU%:R5'7Y_PAɟ)dƓekg_gUi(.A臢6_"|5۴en"35{=yX{b{4sV3WPno5k3n{a<`&/t,nei8#C(F5jR4(4`dyWWwW :) ݾ.mY\0+Q4Z~ByV 1#._gQh80T ̼4B axЦ[WƔ7"m:=bw{g-T6y^"3=P 6a$1&l2#jJײHK@Luuv+݈qG:錝]yzDki{i't>SO:]N?tL'?t|rZ3=]Q!TwVCȶ%([Duآeu.@;k7u"Шٵla ܆oH2( ,b9tװ\&#v'h2tx|(oe5tXj`K:yd-U#*[<)o!%1w)I{,I6'%Wgs4~?&g7J̤4jHfL,ojrc3zi}T'&>ajADnY dAY\76 0ݖߋڤ5LyS£5 Yꉚ$II'ٕV}1rڐ`!ui8Ex!\5E"`l"$T0@&h]Ma%2`CNḿ(M,}Â|b_-:y[UO!O/ȡ'l#PYx~Ek6/[գ傭D^U6ӝ79.=r}@=g.#zMsS,6irKVW1 -SG"tm;NXE.v>8Ul.`4n -K=..?eޱ\0zʚ$maLZCP%?Df%2\h^:k&59@Rq1\F6({.p\ǂa$-E=$O+{%nԏ !n\ݸ|1ôAhka?eqG6+H+v>P〦a;6Av,ydZKUMj.r|JEC.:>˾ی _ע0 FqvY=aNO7MyM&ETy~R6 Ge,wϕH,v7$[]k>,ܱ/twȵ y&78M#@$vEup -5!Zܰtzn h*~7=aWMfjZ7zMz18rp|6Ӊ#7zs .T{:jk -å]O]Rmj"e}%)c3Iuq $l:C1)Tv^s}wWڵ`{J@;g~T{?,<WB En _`2 -P b'eqws.G -j"rJ I[FL?>SYɮ<߹nε+B qܯşUG?ږ^N:F mhyE}d؊U=<~8{W!ڸjP) 剛o[8}wE -1E+$".X*FX*u )ؔ=NI-J$_/+ -Ll61,K ht yR%E] PbhaKsbi0M,9=T}4k1i)9u[tZ%O<o~K -na<{#ξ_TElmw[|u&$'ƒ3Plx`DVkjƌiщHMz*@=f(V>ZJű52'B:fJ7Tk#º}jQes΂} uZg?r:۬hl%Hd.K^T*@4dcW]{TGsxYhb@.mu0q(LTI:HN>f`Am̆G C%D,ZwP`j DvYߤ7)MʿL -}o+S~5v#tzOv%qlʗ FCg$-P4W[=ŁhOܓw92P۲`k2ȷaN@-gl F| O._=39&BE;-rؖqk{9a&llV]3⹖܈ke+!nO_+a;_wљԤG솙CZ /($r8JnP w*Q4ƪ7vG+G-gضW'5whJ&Tk={}lhc+BH~bcZ~6s|Bz4@Mf<6T$RJaJ[_1-o.j1LO~,<,qVʤ8kSSxز%Y zBNF7d]+m;m1zJ-yGsOwAal9]Rb'&Cwy1GT ]̱~?aݳ酘ڨO2dJvA8 ! _ٹvZO>3مDt X }-/|Ɯ fB˜O4[Ѽ -y;8W!:Gj˱[z'nvmӻf o}|`5&0];c͉Zd, ) o ׻vmB}ZVLa:0"X\5ET >f7?42ݥ}lK.աZX:^?0Q+aSz{}DW#궲C_*| m丵TぜȺZM":t~-IXldSiG,w=s| !߼%G[ )cd<5#"]-kcx ASUMCȚSK.j;/yv7nn7i<yd>O8ۜ{tv=$ lN}m㟊ضq%b_"%b?E,P`^"%b%bۚ[OX/zm -S۸ϞkxdV(w]Ay̡U NU ;uؘyj yeX[iaBZТS=(yGzT xP)UI%sW2~nO7":N$$(Š =6=EV]Tc웂J!38e)fPc@] 9s$H2w.O,ept2pW Cc -S‚Ep2Kv{FHՠc" VK $@U-k A悟ygh-٘*TxM>sOI;bJjHw 5)2JAp)Z$|6^v 7js{vnv}`#;X`Ovоޞ nPA=n[3HfޮnnP@V7Hɖn뿺z 2?k3ΫdFp]A{6 \pc/|V zvhg^F2/# #l{ywb};<7|xs]S_e"1uB` (5EI՚\<)FVt̒~aϽS%rEE{BD]'ߋB{"o4Sivy!D:S'=j0׼QL hou큙t% D# R@ECϜjMX{{R&YҲ9 Q_eJ$# C2fܻDE`CX{6hY -jT?J(.VDDU.4C)DMrX].YY yWp<7d<젤/@:h}h6pܜtB`ڡF%Wq/A&0Zqz >m%@w=9={vz뇜}ړӋ^{rzN>[xzSVgV~ճzK^gv;v}k HM{Rh qh<mT2Km;ĩ+S\u9*.!Ec}f{:8pp^+/ 6}ly69Pw,I.}f5 #_(l5=xg]""6v~L-(D=rj:^"=-A]# b?{P^sEZ҃ )wFYkiLmO!& IUQӿFkF -KW1V#)U.upf ~W"*Ws}FHm0M}<]xھiKh=nt4ߣ ERR K|t8A$NF {N 8=̿VkX> iHb,1v5RVKA$9s Օ*tg0\\$5Iy]2&hR' u11#,,.+}RՌф9!ݘi(Ek+A W(㯂z\[b{,>rE?iw2a>kFd_)/nhdk|z3ӈSקSB ̇UoOdmxJ3Lxu$i&gd.V>B9Ve"ΆrɭFW I?mƹ|\h@$s?[AE]>芵ꥳɑ"cLAMe_׺UK'(?FY6j/)K5ASLN] j~8ܸa_h2 N#V9 `X6a v)]>i9Ͻ]YȱXP0IRuY9ͱsC9Hvmk}@w}7Po&5f(|m Ywlgt>:ݳ$ -@j_SA4Wm6*d^82W^5:JZp^O!iͨ7LdBi C?\ᵋNE0,(E. lLOz+P_&2 Kv‹'4ݠea\+bߣ1H'^*%a)]fwQY% -T&끪Pg5L k9H1ŕZXN9{:ZR)\K~kO~{a<Y o,qZ.)S~fvwO9tS -^(K㬑ʪJ]q(RI3jW@8(p }_$ӗBS>Xu*ll94HJED_!Vxu -XzLv7L:?dlKZI8P&읁JYfr pxq"~64.,%>KKJ&0l&E0 J CZ54G]6 љ¶"!Igedv#YMGH%jTdIu,X^bדź#o$tx2rf, ~#4XA4,FOj.5MS }$`puc5%;|$d6a6&8nhmRGgxew=Z#ޥ)7J:Dt^µf.]j'?Rj)g7s|?WmMC{ۙyMZ8Mԍ~HzujA4J_ w#\&DLy@q("5ܚ2]"S<>ƻүH5sYR |$ K\mHxwOO7bHXgHqh& ˓@R`C5KhtDŽ&j1;x -AݸbBdz%kn0IWD4$pGv|Cv3 -35WSέ3Fv$_;AKR.]_W߹1jǁ{^Pj[IRxh2z#S%ccZUh5/[[er5~4{).JTii꠶LVu O@o|a -sE/ 'pM%YPʯ׼L'7y(rO+6P2bĂSJ>=Haʌ처BĽ"/3maGicZ'rs BoN:49G86FY'!=.8O[n`Ơo0}Z;ȳ:o*K_5<ݐՂԘ$!5f݁zNjpFn4ϒ(d񺿦(&n}k \l`| &"*dU -9p1-gzIkF9Z]Q;:^ඝwX3vׅ\"|BRKWbMriI sM=KMݝdbP=.ʇr֩, -cQ;¶›Y{q L€I}y*Y\($/7D,fpr~t~soR?w|p끻!@wrW]٫;V*';sR"0Wac)#* {3dۺUhtK,bVNaC4 2ʝǘPTvgZi,֝(^On"돨.0yVtx@AS "[4+4g$HjtV%Z`) HGK -QOU+?#TD CY3*HWB" S7%a@ZzȜiO7؏+_G~Q}QWџc=G~i?c>G{hاHSRڀ4 t @֫Oҟd>N O2^]xBo ɿBӅ/\H]H{u!R7elc=0@<OhhP%Ewrׇƙܴ`z_ुoB{% Fϔ%(f~k&;!nW12Ǎou5wj*PM2*Pݻi83F%?^<=2Y;})5Gm;\ƒg/3,K=vݥ҆LKN" n[RX4Bt1\m }\*j$PiDt֥1M9GMp=T!]iMy^?uou~o&o$]NLU7S3?Ո~oPMelq |_<7vHI[YYnO_[+ )/cQ#vuerq Ng)rZ6PuuiY9=VNmtɷ`Z7L L%%ΗnS:Hy!-+et_ ZW@h]]6@ˀnO_X]ZW(viE>kHvHx9\ݯRg,GD}7X1! 9Hf(j^US]'Db(ٌ.`ٯ/D:"#* y]. !P`P@(LE&@¾\&!G^1*``G{s(O3Ƞ/$xq*Gu#x>w#k(vcMZ)@y4X wp ǀ5ak2*-*ǝTbV1 }bide±"/a2LIP. H#@U(0.~1B%N()YBTa*)B'%*WW/5䂣B $>`\A4_rPs_U"}^>qJ3I3Νqe }g;0mBN;!93nͤK3qoշ=qt75Xt[b>xN5=R8z - 5(4depx@ x"2 tT0̍*25>qeDkĵ?^9nsYVLܕ9㗍9&rښrڞrڏ$Țr䥔3֘#[ɟsݘg䜼 :"5=5-AG>5#t"R+Vs٬ yڅ;9GV?V;A::^7 GVawmQwGR'$*^<|A -Ch =ݵam G_Ғ)S<}MmIpJ5v z49LWzkozH-(l9P BPOGcv181&t Ԁ<`R`Hj5^?dsaT@K;AM^'%mc;`ڑÖG%! -.vw*0v4/i$r+p|.A`P:PڭTܲZ>ZaZ(0ʡrF5@buxb3 X]p }{9YL ÏDF0%?ښ<LV>#w#XvL{5-}jG=Ek i2]KO z icprt%~T -—c׫$[tV3U(ypSlB.b)ޫ +$|)mQWtoR5!MM;u l ˝ G`}v>.)g,PM`3e41bYfrs[ -v7_ wdϽ(0NO܇~ s8 C*|)" K=~(m &.r;(4: -%Z +HQ X ,RR_6ygհHvҹ@To:tetjtO{|C<01:)v^7o:tW+R|g_{^?!usp\68S8 ma6z YV85cltt+:K:K:tf5x./9_y|֕zg;}etWF׍2 ˫+F˃Ѳ3Z0wty_ ҶBQ- FP:/9OP% 㠖A]VP'n+J=[A1[`W3Qs06F[KyVImu~ wʾ{C\BvVGs8 ηh! j!͋*cYwZP~f^}_FbvNe>]p)Wp6mp )((/| 1=[YF}~jc?7^XG| 1_m򤘽X8=O-/ -jk+fw"ADo]‹ rǡT .%L3anwc+߾\-nLj23Cd5em\lTE'S!^]bs53XVXEo -~3Mew7TvRHP>NyM.ּ Ju緥[(( =^+zc>m/䠽S%Td.8Jy^A zәR 9]{RH۝ߴVȾ"6*JN3~q; -9908Q:Ąڧ;ll 6 67؜6`s+o`}6zfl;l6če]|󔈳Or$%Ѥ&{曐$Or$[Ɛʞ'"Tȩܗ̋fz]M&`F1"TD6S4=n3`kdT(zJ.?Y -QQC re;V@R7e"qT!R.>hǤ:uQ\?E(3==lL -FMŻ0<y8#QQ;:GZyoݪɤ,L-Vng '&E5!\di:sbvjM2_Zla@:D4),M2\U O{+ hǷuKЄ,R̟g_^\~3X;}й| -[ Q>֏pteYzݵtX>+F0- _DT7&jD}1sP6::Sϖ4]Ƭ1#5Hje␕Wv\*d6%7ipq";QEX):GF1{'RAs-TL_F8T5MrWvvuVIҏci:q-JK$ٱ6# ulHڱTt/ɓw;`螘o1 -mБ iLZNԠ!ӯe؟3KKPzٗZ7Hߜ+E# Оasd4%8C:o~O?-Fr%# -1gוH+T'0Z6B M_YJjN:6(ye6}J&T\0w PjJ3!6Qf^ёJtg_?;[ pBS +a8.5z=QCmDeZF ڏμ.6=kbladhX>xn_\;9]9 2,!-ceE[Zv62 2X4'Nv.PV&-+՜\ /*ϊ`!a}o9Zn&xd4 B+E9 ݜ3N(a?AMުܱO#]^8MWHHȔVK9^2nܖxz:2Ký5m1 .9wuV܀&RnfiCS>y,,W aJ;^.ZÛ+NNAi`= -WwE׌)tZH ML)(vD[I}hٲ{[*OjU44mruNIg_fo4Zm'F{^}LR$[RWLS5{URîk$kD$f2o۫E6lh?oX=F"`[:v] PO({;o6YPN|OvD"QE[ٗs2dY=jTG~7{`xء&;.<$Ay8yૅ+z._~?UZXZqIcsMÊqdRL3~١.,65`-K$Xk[-s/,8 o'j^.ʹJh5P!tȫ8xVaaخX#\R=G2)sn,v$ }$b5.MY,:^P5jޚ 3/ #:mjH'[٘lw5Ufw+}>sݐp% 95t,,s!ťS_Ii~J/ݓ9YO\|ugQ\fB%Pnv%Kև֩d$բʠC7Gؼne&$r?/tv;*7HH8}$7$|_C~C##a!ᅁG$!|"!aKDXa{ׇp "7",7",o܉p};~J) -#zϡF^㞝6Y12͍o"$TU)'\Ť04_ N$$p5yt'9r:kcja 8bˑ=_ b~\ CkU h%x6ʯa/^V'wJ1ظ>j5!NJ(ʿGsl/8W`8ldKPHklʌ;5H -s;}m7AK;=1ZPY ->cr0Ө&LYhR\Vy.'~Z'͘////HwyS\/[SeAD~F|7;eZΙ_vq@~)n'/ 8벪(rٱ]`A@8EvW}Qnyptq=[Řgij -S,*8"^Vy>A:ה OBo& R 6YNn4~TVt8fTЛƞrt.57DQ]^mQH0Qf2{  TۮwrY!#xݚ0louP\kaՠ($Kcwp|W6)qE Qc. -ɷrcVn2 qI~9)Nו2EJMRb$[!M4L"C#ƾMGJ7BC6 J -ԝ1oJ|ʪmxSQĘLXVoeaCqxDWzW.?aؕWjVjgjau兺ڂ] u}]?B/U/3tG\AW uuu..eAsٷ+//<\~b.[+.OWj+sů1WsҙUS4]](NC=|a5ljS,"S娰},-&eV ;'CSc |HzlļKJm^oC,\vP:j-ЄKLq6c$pd'iK$efTR,ܗڭJ,u̦GidJE ⦰Z{, umscsܕLmPp(1wNK(-`!ttu3 -?!%Waf:FmV+"MiA/RjOKL>htr窹3T'5Μ5r؍1A{R5`+TW7u X:y9=yug ->?^#='㖒ITZViY7mӂ=mGϿUbzt;~X -MԹ%I[)G!/gyK>D2t5/qVٖ陘陘Yq!<31X b4{Ĕ)8'7ǠǷ0V ~W88=irprp?s98^pY@x฀p 煄Lm%ᴐI_py  B +oP8]p;p@ - -¶PV+ -P~ ( -(p*`Hdl< -nMVō l6$?I.0E ] -S_/~E!01$HڐN"ĩ (&όx|⛧'M}*cJ ';fzb -6jlDr9@5`Q3k] 3 )sC:dpr{3uCN(ɀ -:NB/+GwDir]S{%k.w(<76j;xv6`:TnsHLA:8 -5_ؘj_:"׾wRcг:mTK糺NNxBT;%d@j2M[8*AR?t&&8< RkS&.IvKOw@wϢA<6kAufcK 4HJ(莭BHT*?W,iUЯյvvd\z>SE,"tHhDg\76W K/1!@ɶk5?P}QdFYsR5H(2 X={`>G<<#U?V:,^JT}|!2˟NnZLie O R* r -7eS6OGItqƥ@J  }l~l&%U}|aqrkF;d?4'xQFK+]ՄQ*RI)PQ)38-<;`%l$rWLf*RcŵX8Zdh'[ϫ]$M0#dg5znY ]2ٝ(tK7e$7O'x x/IUQՖHLa!.,@-͊rXfxDp1i)6,& S\\wqB{dٰ9؉z_}alz^RI{ {YQ?>=Ed\'NkY{HEs3Bu_mEEW4>cz=ӸB%cw/!nvN ;eN~l"eʶK>Eט7g̮zlSǙǷ0v91v22vޞBvd%M*JcQCu_F6dvuUf^ "`A3W[)b*.U0b6Ʈcqֱ'+[k:v#cR Kq2M[|vYǛJZǶnmugۛ>ÏF,F5QWp QJfe#R3sR|t~ iFqJq5uxeJhpܦsڦ?^x+mul;VVV,O{/wQ/LAF^lzn:\j^la@>[tˈebȈ;?M/ҠLDQ2=F! 耕b|U:Sl9&Tu!P]';hf\7Ya\tKT -(:U6u)l)fz8һh<k _$B~}d} ؍PxkZb’LZ+j };YI nVÂ:c @DźlXV flS]ˠ/ WB9i/X|7 5٥nQDujcf2L05R,T]U9yP@j%PS-fK̶[ʶSg-g-gپs9ۿ决풳cq5h%h 'A8.9}q-ʮ'ʮ/]N]7nmTᬏX?`Ղa#8_{=<\T,.U[k}A٭.bE̾(bFڥ]jX԰iX5|R8'^x+mul;VVѴCϹ\[ l&f 4kGfFsĹ!a/8L@X42G/[0 G*[HL8@?ָAx<`HC#^:Hv͘3nt5ZJOkʁ5 UVcbOv9OP#%e1mu!t_ w Tg\*<^+^<<+eV[mĐ80*Y,U:1$%$sƳѕ`vX_&HD.]S{͜4d7 ~2 -BS$E냉j`&\X&8"%Ɏ܆^Em ZsԲv(D<23I5LCgEJPC!_]عԓ0[BHץM R> v%Vʇ3lG.vk#+0 -'Na;_6 -W'@'NSN;NQh/6 KF~j|s`>[FލBnz;R!]jbۀg1qMaͯÍ%G:7*@b}>sY.-HH.-1~[OP$3,*b|岵lqAExG<⌷tXd5 JtCR >r[ Sd=1vhS)eAܹ7TFilX]_Sr 6 ˵fN#*No?ӯMލ5 Kd+0uHaL;E 6, ӵ9AbLRn~M eMm-]`lE%?^Т>fRbutIJ*s*'i};U6'o_7J[6@yռ}kj -hU:"gJ]fE* x'rg^JCoW =w[-'796\JNQ)Q&]VPŻ҂K &ת &4-=J|CpD]̎w i0.ndxCge8bvMܜKڅ8U0ZI+-(O /x.LbMs\w);C]BRFT9J,ud2āvMl‰Ehk1aIt#9j{T*z@7y͠P.j!4vaS~g곳{EQ@<`I)TFb_3Ks-_ -=3j-[pzm񤜉Jc"Ɉ -8]ڨ ;c21JjdLddR Kk,Āp ɜ=݀sGR#;`A=f|DߍDDcj-kx{4_oIx Z3vBRGwVT0U!_znr'~<מ_^\EvN?TN]oA-oHe䵎Z`(W4"O S:SBTp-է蜒wu*mE*vW$ 2)$4zH&NARnJ~q4s^Yb </ȼC"bzvp)vy]pK|:)MGϮ.dXpT1]Vc =9K1KiFC_8OE^;yU"n -RnUۢVgvAq\\Q,se7LukLz*YG"+9haE t&W;2^ȽFkNP H4jGztAV80i<g} P7P++ݑkA>Y!=71(32n0Ԯ(&yGCNWxs }>su*MtkUvїwTCjPa! -la%DTBwɦͩ,mT*E_HrPCL9n"7<96UT;\sedOrNLOͣ>"P-Twʊ-xP43*  6S{ -P.q\L]v9UrDZFUZ 4ngo ˬҨH2*F/d(D0U=DmGV@t24@ -9yQGL+ /N+yC˯pw0M;\&E>Ʊ'[64ua/2ǿ~Qc(/Kbl׾Yg-Nu%Mvx`̀4eM3$!?U>]I 2bURY~ `v'ߗ`w,h -g3F_epN~~p$( -ء)Sg -xE7˻e}r6;Nìl*TN衆mH  TGk'@M;d_gi+]e(eh[@O;fJk2V&eq֡wAXn[S[mrxkN} }c1@%3 b(a`NeqH{d!6 X]C?M'^ZC TrUxAXE!Jt'$Ii1 Uhb ^HGZ?֏iUndsM2ʾautoXW!EK ӬSɡ_,%5B6KRJ<{\bW`isՀ |%ogEP"׮~(Z]:$f]85eZ~2~Ef@4U]Ih[0zEqvH'}5WH4A0a[D/_a<=z{YKs&ǰѬ}F {*A &6_GYwsEw:?4bo[4aMRo%<@ -Yr0Ec(pUγw_{;{zR›Ύ TT&٥y^ʼn4`zA`]>;]qE 19ޗ~|j -$Ӈb+M"5d1xB#0rV+sDKԆztMW -ԧ$_?/G?-k jX.}Bmf.Fv8HhjwY0QS7̝o -0fI;Ԉa_n"=&6^O[a5Z^zjSәk?NF GiG]QzJ_nOG -$]w"Q~ %c0 T5Ab_jڛ5x%1Ȑ(:\sSE|sx [5P厂ukxcwaFǭp7*]zނn;]D׳g˧fNJ - J̯1 +=#,R2ژZiQ6k#JChHᩤR$0d}Y6du]H -kX4 ԅL OtxmZ}Neu]MݸPK.6 4OXi?eż6Vx'X)[Fl58lji׏{.':[f~rgd^KkQX_-Wz Ųf-` -SyS%hw-;6Rm3aBzM #4Uh啀m뮮Ϩ}Ok ƣu뿪mCCuSzm[Q׏~ߧ?UZ^u¬kYi9X?-9U nEpT}Fs_P8AnG>0WgY(*L&VՅ70ǰ јΞdTp( ]7W֒nɍQP-:P -~z>Ԝ"#ѯ -ˑ$S4z'+?&uk4 A+^p_k] zSG&}BfKıE{0+ MP8*v&/V',&OJve1)G|!>6/0bJn3kh' XѶܘC{1 \'^Ʀ00fی}ߚ1[x6cfkfl6ی}o3?3cOj| 2PI { -!Qw5{PBu]NQ_ĺB|STEk,sJqIohJϔ~pI(9ޞk`Ƽ=*nT\ -Ժ*98sM ?oOKicqԒ"q 1I6ޗm(y=);r!Jɨ -4`ZCOΑ -\_a6)Q;xVBhIKVt -B6ve,l~=lܜRSJs=n -XxD@mB6BQvˆQ8UunT[ '?+ ;]}T]s ِZ33lJqeײ|k0g -}XgSF./0sĎT$`oo[^_A(-Y%˷dOKblS FNaQN"u0*q%I3 AlWUm_UJ HAn[v3 %wA}KoT9RFZOcḦ{ҥOSCt+~nP֦֔ۯ.XT[McN>۬&Cu(2?mhVC -TE\l%DKYujZ%:4aV!>R:hGFaDrP0dj#cƏ/!?q ,~iȐPWz~ߤDSFF@\ǁɳ!ATEVYm)[)r)p0.7`Rv թ(d)*c !Fbhy"؃24qV=$(ϰ -W -Oǜj9p"j|X!v$_A2dZs -mNՖ(ΛքO!@g=>uy "/~ˏ,>>DcvP f}޽CU%e}:!( -C vtK?;e}oaT)mq{÷ïxh=.+da 51ʼnk :j ڪ4I\-Pz9OO'n\hp.۔2 -FE^+8R5o.Ҿ?YIl^?=4 :$CpT25tx3F5 T 1MM6F&=x jX{TܭПxrk|uW)RK?9T!~bjtw!{^I -"j1@}>UL֗v@k˺ړ "ȕ?H܈X, vPSf/O:EL*IXz -.6 } )vK+ ->wc8xsRF{QI׀̸Ru zύ -..~4[aY1X WG+I2 a6ɈfOB/SWBsV: gupe -M( -y'D!i}xV:DT/k_hK m[[%Nw@zo߂FU-2KpKn͓R< ʎ uP#^Tnͮ)ka'C=[\R[~~Be38uk94RAY ċK*VԽ$[ 8R1P3p -Z ~U]CF. aݶ0V;^ﻟiBpmT|zD\EJ*3\S"̑k1/ -Za.ʷd[~-(clޢ;~CPBR1D)uX3ƌ[FI -ji >xE4 AvkH 8ɹft,&5qע%e1bҔk|![-)%wňb3X uMf%Squ^hLIFڎΙvd߬,foR ZH.(gUk聻pnZ’Iy&ƾ/1%IK -'IH^_PJW9O9޾S -o.I?"@o/ ܎|soKN茮g8$rEcAe-w.5VnӴU&!y`+'Nۙ zL5adr% ;{w ^wPX}vӀϮ>>DFmGtsBy۰Ï1 Q"KQPq&A!k 8@ɒ[r=܉R@Bx) -TN毹Wp. jJYHau0ROzXU"|27,~dǑ}N 8O$R:oUvcb?ѥH7n._YV?Oe2v9F$eiP.3=E(/ht'z^8iޅ9 K0:KgFWâf#7@+]JHi(ŇIYE%HP5J)_yy:s썘1ϸat&wҌ 4.TM'l,Ƅ͹5(e䙒6RL f=mNIk qqunqadjƊ`4߭B7?*yt=hNhKqeE%!Y,yu9{t@fP1d㾢u&Ux&(HٳƴlqVЂÕ?;}3 J*y8! F.[@GcG Iνi]lpgxԊѵ?_x>7^oB˦ {*}g2O`N[W'_:HxcllwXs$h09cBKJ% QDZMM~؄Cg6_L p$F ')swܞcszYx̚st[סk -܉L'x _KM}urLoP 2Q2RhR(ߙGA諗ql%=B oj{cJY]<|g_4DԚ2EJԪp1&M|BFuY*[jGot&#(E -X:37<1 &;X"w[ާ)=157}FZ'] uPCkԵ]U.?ի}t٦ttIDqJ]P෥]]-MCk]cǣQb%A mtGꇀ"ePeE."No7ޢXHͺ#:<~88IhOB{&iZ{W]y=yϧ%{}Ǐh.SŽo޽޽~ʻϷ;7uw6 Y5@:rCbDL/t/a33Ԡ_jov=SFנּ`%AziOIi{>TǛHۋM?#^fbO ~j8HO D"rxIAcêS8.䜪 ZnB]4MvQu$?R;✒vv7(0ޞkڅJѹɌ9ؕWW'ѹpm‚R/C\?Z'؊$ /W$(uRҠF![|$V-*6Ye$ɰDY.<4bÖh6?ԅ4Nȸ /-5 (>ګy]lj u]lWj6Wv^);We=8֤02J UX):s>eCOf5 {L ?YM~It軟Ǯ2 -i*H…T1b N̒VXj:(ch/Yуq/6͓Zx"VbKڈ˝Nq U`3tS*OeJ b :kƦ[΃F8飥IRuBNꨃl0G':3{޵β%U5o.E$Z3U/IO'eX˪좌WJRNfUEz4uf*{F8X$i3\ӎҒd En O#Lc Ad#,쫸]aʐ06O`¾UxTeth.1,JQ. A\W'z5循šqyDoԾQCR{*/߾|(Eef/մ$y` &e0lMבKGbM]ӹFjb53muVuEx|1dž{@<^K^L\؞ v -"EkFSF@L+ya6dQ濢^̈́SX\klyj'6|H'6n~YG\ot &ζy ǃOYA;W?n*ˡTѕ:q/Vzr{U۲U.of7F>jBmdcb2Sc\H!8ԐDcah.-HF)5M'uMTOi%fFHf?qg|sC]| -#d@d k PrY\Λ: WU5ʃ+ӪH\pv)or2 N72ucUq͠0 ŽKA-v0d 4|ܭ/VF8m_m˃ ;Y#[rv6PyPU'zoF9kXPXEc[cfB+hA/TXI7^GL)NqجQyϔCfI<‹ZNzrNua^pR %gF3̈́Tv\야r-#z"f5 ܫǔ-"C{qY"k;.KTc&]-m7%x,[>!?~̦"׷h[: }v_/ݫo3P>`I{R*@]y2}VeW6~cshp jSC͇q`{Obxm:Df l5Lz5Q f>k#yIپy̽G u5 $s3sF/;vjNHb?UucJ*qą*lʛܭLfaoM#)+EcUx\3({qtBPr!@s j^v㋕eN[GȬ{-)lo;b$vSH- '9DU ¤SүSFjxd>>8 G~],_ߖ)^ַK+ٯf]}})֞-k[ocfzUB^8۬b_ d8;nn..ؤP*E2)sӥp0,utcHr[ُm|36.?EMn*()""e!WŌP< /A&F]'Gk]KF9&j_Qﴽܫ߈'@^]W/[-h`nn֧oK.I*?X~yei!8.WX4)p P"1cu?YS dҡP^z`7ԓn!C LJ tA.dXY@VD0l7<@7*=Lѷ 9ۤ vH(""!h2 ~^ -wXě}ldeGv'(^tK5Y%Hn73f` $mK}s*]>NKO`d -aD/}yP@/WW$K2]| ek?&3m۫ 82b2vl+ ESYכYz -EZW׳/l wi eOƂⱡs<3:IbG`c/hNp)&[_%9S95٦)"3'=:2Uhx38JrE$^c44 <ˬs4޴k\D2:f'zȼEd&)%p}Z.ӆ5[u5+0Ͱ y; 1b23j|X1yd<&Qc3=?9udUJaD3ΣhqqNLf'0#7-kJƞv􈌚}pWOdn2Nuذ2LUQ iVu8΍q>:&v͹Øy˝۷GzckeڞJ=.Q(rf^ujDIlcjsU)V5X&SʧlGfS(H:{ &dcVZ*Ta,NvBQȹ'47<9MۀCfm-Wtz򯩩,R9Um[X -B#뭄Af .Ǫ,IˀgJᩅŜMp \-LvOXݸꓶ՘*|<(RӃ%`O";eRBƀڰrCOA wd⢂{n sfvr4^\IPR -21 -.\&ngvf_ZBꙁDrxXO5k6~1^TږpXJ#&ޥzXDR(PKggrő]WUE:v|1b0D#xi&YKū[PK90Wcrbb%1Z)lֱ Èb[%I+:KZ*,X$NfG -\]dD7B"E#1zކJ'oHڴu$LR)tE8 -){bKboob~wzmn -fEl>T׆ CTZMl|U+OxPWd4^:Z'MAɵLIZW{J/,ϝ{F2*AѨjkD.[,9NXeV sTG 穾DߒZss#v3]n"_m9v6߫lHZA8 3cN  jD5qqOh*`WV(;jBxw19cs+%iIyur-z=sս$u=~cHK. j+FA}p+9QDm,kUTE5M;u̧1yQ4 rGw@xb$0A,㱅6$#@>[@ebFgD,((:@ײNg4 t$z>_Q^ܱG E _ƷP92v/imjTܡ8&hN'K'2c+q!r8vw=cD/ -'7 -Cۗ{gƽoz-E~J7nOmHxyF}GfSJkt&6|\3J1\,);WBwl k'*^:E)XV;O'd{;P24 #Rlm,wWO^ -orEt@>t=iizS;V:ȝ}I %;U\ivJ]wݣQdd9W]ޡ ZZuUڃw}rRx5T0*~&c>RRƐ9N5*}'fߔReù4/PXUfӅiv]b *uҤ1;G>gW*i3Tf7} ,7AH_3BK!X_ccL ,9d[Zv&T4+Nf ǃEt~Wf9>h*ko:tqJ G)\DL-{EQuU /pyq6TCa8k0k>XeW*+z9ru)Pˌ"% Ԙ YlQUބpaNip- ԁD:BjR/JX=2 w C˕cNSm娪VHf|Ey]jP?^>Fz3*?~V&%Ro4mPb1;@āUQk~13>agAb_%@yD0(G'1rDlBN.'UZb=" -ETfjV׍SX NEmO#+2N.+h:sbUwE~ea |L%oZi0^B˺&~d x6:{(}"="."-N*P#V<&kP8>4gla0rHWt3*:f.ȃ2rmO.!c򛽨r_g5Ulce-7 b.*:&?j1URg*B*;KheE1|>gf$(_G}_XҗHTEkQ$aOhFh9bIc"XOVi Tm:1M37+ł銹2c~']@?')A8Wd5׸La 3k[3*с'q(H(s,Z˚jǪ+A~fIiXɹ[dض4 Z"jԭ]mOT|WӮୠTsT w!?M'--> >^x(`/%[z:<76[:7Dhq]WTci6e 繞`@@-^`4 ]) ,@A7> K &7 S:_L6i|C2rh\(j@y^\"t읭4i8bw@d,arNhd唄챠8+teAo=F*`SUzE])UO]v{D20;z0:36_놤S:G*l{Dmi4ZWiBC-ij26jv53OrIYE[6oG fgw}lh??#ݍYd5ɋ_R1{`D'fsI_ WnxgtuacѕHO~R^PR]S6y7fڷ7;A(E #4?c(o8VyBN~Ev~P\(OBu?Ro5Bq>2j; -[("+y/&tU0_% ȕXrt rX$,b͙j"o6ݶgw5x#Z Tb@U 6,Yw<]ĴqPuoK.SZf" ~qp?8WZ X"+8YQ3nzDŢ)ɠ&TfD$*dͽV6 h0DW௪UR ˆ3 -E5jo=N<`.;ύO9'o xvQNWVY阝7]B:es;kxNV Js|dswFaڇ&K v< -qz'!"- $pĀH郩 {' Qݼ9;̮I P#r#Aq?pf(UET6 U{lUZZ -62]ZHM|MDE `q@Жrڊ|>g%Il Ux EU^0JP:Ifa3hs^ (&%s)iJXvms3J:FVDUVw@׋Nfee֥M٬FLfsBjxOzv(-uM1jܲnW$ 9AI g7m!>wa~ y=.xU3w|2ɕ,B4; BWԛ+jQ՟s7۽hh ZLAo?~EWo=/ -xzUhgV$=_iQ*\#5 CXD6x:܎i}ep[OEHy `~t7ţ'2!8ГNC'MޫVS - w8+egy })R@pu(㉵3L[p0@q_ae@,#G -D qGeꦓfB$UgX[T[\^׽WD ;bIvNU$`J c)~)a~)+k9mDrC?w%DDhʗX' -hԗJgZ-@&S+!N)Uc~V - x&0 ԏT.ui3G:Zbpvp.Y="H"7:E&}&=pvnؙ%!irHs*`I.Q%.LzUJ]"`Zij* `5psUᚕfTPs]W}td/]| s(h!h6EkÉrK8C1!Ęy*$U4yPfҀZ"D1 p{Q2x-Hk:Ly2e?X(M%.P#D f駰0"ȭK356†[[~I_mJ3U_ B_ yW6́CMdvkgޘ eEPhޝڋd Yv0"; -F*E"N 0:YQ5!jrus S=xMt'3/3yt ˗)Ŏ -!J0r >UG*3?K]2rhBR[g?B 2nLMn,9s -_D1;fh *3vc0F=R*`0b?0 L'OQI~+8[{DVΊdNs<5}[ӿ5-Y|I6$gUҮ5\3B/e=vkxٖlF<†JXSߢ ftܯҤvΓ\M_]~ } >j#/p~bI4 퓢 - - Q^RzXIR%i,&s즮]׮üFFsw3@@{?e7I4CCȸqH|;m_7;vU &(mKngbG+Ф2+k i%:ILrVRPG`9[KG -TBBd@[/ّ_grwI1->dIDh*NaA:8Ch1OJpXU XS\^N{MՐt'9<7F~"m~x~odg]ߢ$MQ@Bp"DM+|`B$ꈹi#q"_bS/ ?+1*Ě]F_x!:erM#,e_\Ƴ[7/{g?bMsj1SgΆ輦W/*`DyUo_[s;>S+Ug.EYj_s1q6?ki<#ɣ6wɝ6?˞f g{Ğ(7= hg]GvimXq,8U%D^HW͞lR4GhEĬY`vE#h(6/iKmpCwN1w~T?{i,",lʭTB0](ZytzҖ=;}(s"ZVϏqw{nYfG:e'!bR4Hsݴ&ŮㅧO߉24l֢R(JRZAF:G?a  tVi,Pl*hoʹfޙ.ʀY kL!vs Bt~Aq%'}fR?hlaYl\ѩ L:ckA@Re1l̾Y>lENTzE{zr=֎ -3/=h"kzJ!Joy!=Z4p!+vEˣIWb"Zs# -?;9~kp ǹ1979BYy?N;-+Sۢ$~nyuև,n6:}u!Ub\&~Y򲷴xKX}'QU>n1,7"J"heCU: ¿ H삫zߋ lzPPqR -ƛZevG"MӄٻhATzݯ;;8W5]ǵ!ѐ nyMl"{V|%)+[?c^zA6+7&_'^)h 2j WЉFT -MMsPϭgb _WHzBY!ǡ57w-a1+SܪU¹*Xi%T|R!z,K6P@oK,2롉Ҝd7u`}^FT6tSܢ.\ -j֦ Zoר__+1|%x9tP%ZлKJn+ICa][t::A]*R61=.l%gr -y0[oM(`r"i9AbC#LE}wI dSүҔ4 # -l'(u4]~xB ИR_ -j +L:^-!` -i UG$D1k9IXI ] .knu -qHPTB_!VH\qYθ94R< -Ϛtν9}x\jt+w%>_Gs]USu%h~GZiSfT 4Wy7-gly"VTL%Kz?qxʂ S]Ys KKzGȼ295v}jVB'<)]C u&C=EM,ThYI?h/MՆ*(56ɁcOu|XDkrR`haY u|zk{ - Qu>ɥ~T D`E2K0Gl4 !8 YuP q ⱑ)HRѰ/{ }︷Uum'DMٹ!&8J㗜14DYT]CD"KH8L\ ;z~yoO.isGq -cku5@{W0k-nC20l蔶I#[W@ZYh]Ł4CH>m4=2?{߶kQ@mPǷ_ .a ͒H! )uKFLpn7$֚8IiRFOϲ]Z6IkWz%\Xݯ#dXŠuaƤlmCr"vjzj]N 6)j[}";Rұ=S^]q0X0J(MaIe۳+Idv  -cJ'gJbpʓwƦfL8_'腳Y3k_] riFθr@`=1IUb_06d٤*Ft;%B!lZZӹwCy[zf茤7g]sVJ՘%:; lX8Qhuz]N֜;]6iб$61U9'wn*"`7}Nk@@UvJ41 |3mDsdFۅ֨˓mW<lE44!5~06!vx%du*_G+[rzWP0 -R#)Cf^]` TܸJo˾ceYLVHf'pN:e;.4j?8OxPrrogYFg73ԩis+IkN'{tD9Zݒ 8 {yqqaJp;{GOU?W+:Wqr,,혴$` 9^EzoҚvɢ7l9cNoG^n?Hcag9|KKp(I"RFF-̖.`n@b_(SG}v~gL\fk/ɰu&Zw~.7hh3y &|߹Kף8T#C:@Ѽ{W0u&/(8WWD~d˭Pt*5gs*zRgMǩ4-4d9W* VF} 6v궖4iY8*%sjsp0LuYpR$"xt/ -k~+VdJNKxy\ f[ --4OY- 2:Z`^ -3*k?|L7ñ7AQ.U2 -r *91 YTh%iƗڳ*"O+1TG\0CĦ'y+mqZdzܐQ~F#&% Yp)™t!-C-`%MAA<% (}1M1E)Ձ.UVج~]E&*8Jm$GfsU*:Y@[xEq4e;Q1W 2(IC]#ZMlwAդ)!p2-љM4 0/|USϪ/3 }aj:taWqƲ -S$cJ}ҽݰŽ찈袩Wߕ?;|Wev{|S ⶽd._'>_{IɇF_"gQ~㇨|[yfʐŗ[{su{z߀8)+(M cQ[90eށje&WAiUӈL`x:@~JR)2X7D )ѐ2(𷺄?س OkLyr:]ٕqxߦK򎠱8oV0yS_?1E.Xյ%=k (g-< 'wxp9Tl:=1s.DTBjdDtS -c044w\>0Z rvIYakqg PI%€ -ՠip)+YS0D"(b.PEs6NHs{ 3s ocM Μ_ӈ)A&1бwTRZL90L:(/^|+ⰿgX8A7QJS&J\\# 3RiNy,]ix_h%dwc P2zD:*(UoE񊼈9Gr *3dTvƋS'&AX"t -yϕ_Q;Hd?v&σʤwXT٫Q>սc4wu8}W2Ҧ..ܽ@ }y‹ȥR OنJ4Z,݁JBm߂-8Ze]2k Cf,{s>`̫'3no1%}0FAUy[dS}EcJ"wxPR0Z2>hk}-ߕTCkyAx PNŲR1avÇYr.Ju(FU[ԣM ra!FآN3:j3Ψ QF Xϋ\Ky6}W}LsƮS"ߢ;DZn.eݞ|5m ݓ%#olUf -쫦ʚ~WVd|]Wy;SW"9tܔBt'{]9xS(*2  -M2c̜Ny=GMpHL$ofcuR¯]n]KrM͎솤u5mh1t=cuzdB$o:1Dueb4!ݯxMdN³bP 7u&1 νg`xy-YuX9׺=1I3:aOp-[Uem5Q#I2r$ݪwvsBQ(բt U=7{)YߣQppOPxPxQx -_HW>`qqxq .ka|<1~qp?|?bMK -.7 -_R}AJ -C|);;W;_@%5LȲ>]ɂa|L_w,{t}^1efr$q.<lc~A*3vlm1.1S)QT0RDivN_Dj "7N~AZI(ܩ -\Q?<ރ`hnA[DZn,ܑqOvb &ɾQǕy8SrBX3[-+y{a;R͟v^Z^N`{H+nXI_2:}Lz%|!_ƒx1^9r뗒ƛ/f~rM5%YA%W9S93 F<oc+_$+El8Q>iP% T i^PK,b6O<4G3ӶgsIZ>d}֚ZT(5&g,58RSrs6Wxȵ Q8(ᙲ#EU=7ற_!ϐG=.j[]2[~% rɘYF%i/]e9;ϧz^Cɺ,C J!BWn r aXaKE-e^{@Ngec&!9&ٽK"$1Qs&Gp -}K4#(]``@eӱ{]3}1 -Loќ&,ƍׁ$8[I>/2q2b- Ji}2ɟahx'b5BԋaDef"iYl!꼜j.Eo]1tnK#n˗/y04WJ1 -wi3z0+wKVb7Z06rc|WBX΄1J M.GdӕJ]l#B=,?pІ2 ]h;mm>m>ڼ5~mZwG^Vw/fb3aKuGߵ ׵|+J626 A9bI_˾.=70=ѽv *0{?n1Ca9NA݈'td )ˡw| `>[ #Əe1*/"x.' M>n2*pzd(k5Ud*$ގq/1+у6Xk㐖ǜH8~Oβ -&druk9!ZYCNGq˂32j5 x 'F5J҅ cdb-c.Hޟ$ߐ. J{P(JΛLY}5fq'cLY>LpecISK=qhN&/2,MNlivQKCdĨNY|0( tμZړys7=(82h-h- -yFak:5#GjE)l)ʳ!%ʌ 52CWmn!Ucډe$ۉ0yaEWd0 RcEƆf5IFNȻ5C 8B7y6Rm)F$ԒЃWN9x5}|N3(PY>4U:(9d8F ã -4XrXe -CYiIՌd,7J@pq (*;]B5zP* Vjv^| v>pW{Ql4}@['Ar|*'?1)Er[=hur4qIA+a#%b߭Q|Lfvˈm~*cq"~}$?6N-?=u}"٪ky<̎VL.Zj5?DZ­*PҌX^_P@;=QX3Ӌ C|yʽ ۄ(]MEpW̞4Y^SGu36L>A:H+Ŧ40K㗱-YahʿjH4}/Jb`krS׽_Ӝ[?㎄P2MTn(iuE#tezW[(xyq/9{m!H۬R:t/;7mM; -`\PHWL@Jy:9V[pvFZ_Q7%yG#F_askjY.Q/Q0`*zjA֖yFzْ.dZI;wX5MCǶ@Mg~uҪԏVtLwӜ5s"e;Fi4czJ*.)r*`Zm6D)-{[gM1.͚*.SEmq٣a2Q٣[E[ loY9LVlɤ>N3Q>] *d=~O[Q@WWsV{G ǿ{ә3R}xjТY($o#(E׵(qyF2{\:BSxµrVW_:1%k0 ?0ZY* z÷PpȄ1PGfW?lED3;nǶ. )kؑ˱4Z=LԧҌfs%a+2-Ӷf*`9ByX`sBqI^aVpT{A+XX&ɼҏ p8<$h-K['h`\fUOxR8Ob׺ (V]]q(`Q,J inw0-?-oxslɕ)(#zlkn,_m<ڎ>&tW|B L]ʕ 1-Di#6T:=}`;<1td]ny$rx_du80rpϖId l܎e'fH2!,) -%kq+`v5r0>K}b:DVk7 J@3 yL](wY.tNRߏ7צlĦ/T&ed7|rY WSC<[ .kp~ -m>H|Eb'Ke=>?8gi[5]k!UejƎ$L׏1h4rrMP?Ԉv" R'k tL^/1 -şbJVqx]+ -Fy'5c _W;~)t[U5p>o4NXm]NU8׽)g})HQ$~nXXy~+}բuzl4>muXAFFqnrU?QnhNݠȓ7GC_V鴛Rx K&X=k^1Ao*:iךή݊p|y|,L@3J/L@uZIGDC8Ǘx]&(8#mkמ(,⺽cs>A+C ->0{Smg^x/yO~\SjK9(ͩV8 PփC()fAL_U!)|~Qx ]󕚷I"Zb `b]gv8:5{kF vXuɲztݺե!Vaf-CX?moB̋87l[in=bZlAN:uA"1ŖYk4$-^Tﵪ."7Znm}Y>ɹ`YKE^'(7 {ZW4&GM1(9BVOۄt$ :6fEz0_Ĝ2cgɇE;[:gQ5ˣFsawQۚ;Gېᵎ{]ά8jQ;ǴewʜKʎ#X1v 68AMqpU5kE$bmE.Gep){'QԘFA$# ݄=W~_X*w{sHҝwnr~l@%ؗPR9L3g0%GHm~P(UUsJ)s蓎3@5 GɋF-YΨSRw][vw % /11$yq `a ([~BNz8 oPE%h9R!+2￙̟jZAM -,ȐC@)0;X21}}KL\I^^f]:E H Q: C%*SV FC< {…^ -e~л')z-WEsӪn u儏7i~ U=? 8\\?13㨛wݮjcr)Ņ.e+Ønϡ!D"E -j|Ŧg 1ioG8M7]]ݒ=y*@P`^쩁UUk|%DZ;PF6JL->q "Ư0+w*23y >uų{nTD_;7ŽY8e碊_y]- 9tM}Hz/| dE:a3}@>ٯYi' !@YYzs*:?_R=Gb$D>%n"̕.bk嗓dB.UHl Ѭ*gj`{}W!gb޹J{ ?H7)Mlr^t j0+bH -ZTs}|>YkY}8We/>Fiq(4n>"ޠQHɃu??;vN.kٱnPqv^ņTrٱ-ѡgA=aroArbl7b[]\tP6+Z9!3e:skZ%lNx L^_`uU9\{-"[x ; w[ED|ؗг|)e0 W!ֵ^-ǰv~)-_9L1e-W0 {YgiJWJt5'D,4`(gr \]U -=`r5^ii âRӌsW7K>D, 0F7A>z z|H@(ʒ[CFZϹEO痼Q 5%oإ{YU3Dw#|~( -5#U>6x2sRH\YV?kNHOs[ Q\DR5[C1JBlbZޔi[8M;X &tE~$@* T9EHb7\,?-(V& %^T4 -͑8JDfӌuŷj05h -xb#ЮM$κ ȟZ 8Pc_·6Ũ|0n -7Ay%0G<;?^dVg'0 \-r+\[; p>ŴI*c k9U?}K@* -' =."y{YBO=|CA$yc cXJ]XܽjV@XTgԻͨFC\zЋvX7<#fnZtC%rTD8"kGrJ"1i>stream -8;Z\u0lDUt'Sa<`!h=ecR?C5tob,O].8lqt+CeO;cnnrbki.:E6e!'J/p%@:g9L*- -I=?o9$Ub.rWKmC4Xi*^,r;8Yr^gJi5$jM?X,<"_tTj:`UZc;%:6@T:oL4Y>tGDXl) -ZggaI?QtcdY9>]704"M[OaKEfJH)A3J+>mcMo6e%nZ_;7.WUp]4%mp?%:168IGUHdf]"S;*L[/ ->0IbLOYc[-XbHJ[NbW1Qd=\Ts9W5TN@'nsWq]?C1F]:uUUHYA8k)=I27Wh[Z$5=Dc -&/sjqWa"_$Bh'=oInZD88%0nOP_$;)8Jk.@D&chl)fObm1LKo@@g<_GX^.85g"c>@ -4gQB\l`7WgTS.RN,O^'T,D3g?0Gk5uL!Kc"L-I+s~> -endstream endobj 13 0 obj [/Indexed/DeviceRGB 255 14 0 R] endobj 14 0 obj <>stream -8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0 -b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup` -E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn -6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O( -l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~> -endstream endobj 5 0 obj <> endobj 15 0 obj [/View/Design] endobj 16 0 obj <>>> endobj 10 0 obj <> endobj 11 0 obj <> endobj 9 0 obj <> endobj 17 0 obj <> endobj 18 0 obj <>stream -%!PS-Adobe-3.0 -%%Creator: Adobe Illustrator(R) 16.0 -%%AI8_CreatorVersion: 16.0.0 -%%For: (DESKTOP-LIN) () -%%Title: (esp32-pinout-v2.2-20240329转曲 [转换].ai) -%%CreationDate: 3/29/2024 10:15 AM -%%Canvassize: 8640 -%%BoundingBox: 26 369 576 560 -%%HiResBoundingBox: 26.6956 369.7612 575.377 559.8291 -%%DocumentProcessColors: Cyan Magenta Yellow Black -%AI5_FileFormat 12.0 -%AI12_BuildNumber: 682 -%AI3_ColorUsage: Color -%AI7_ImageSettings: 0 -%%CMYKProcessColor: 1 1 1 1 ([套版色]) -%AI3_Cropmarks: -170 184.2764 790 744.2764 -%AI3_TemplateBox: 310 464.2764 310 464.2764 -%AI3_TileBox: -99.3799 178.1963 719.5 750.3564 -%AI3_DocumentPreview: None -%AI5_ArtSize: 8640 8640 -%AI5_RulerUnits: 1 -%AI9_ColorModel: 2 -%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 -%AI5_TargetResolution: 800 -%AI5_NumLayers: 1 -%AI9_OpenToView: -21.5 623.2764 2 1343 886 26 0 0 295 136 0 0 0 0 1 0 1 1 0 1 -%AI5_OpenViewLayers: 7 -%%PageOrigin:73 85 -%AI7_GridSettings: 2.83465 1 2.83465 1 1 0 0.8 0.8 0.8 0.9 0.9 0.9 -%AI9_Flatten: 1 -%AI12_CMSettings: 00.6 -%%EndComments - -endstream endobj 19 0 obj <>stream -%%BoundingBox: 26 369 576 560 -%%HiResBoundingBox: 26.6956 369.7612 575.377 559.8291 -%AI7_Thumbnail: 128 44 8 -%%BeginData: 7669 Hex Bytes -%0000330000660000990000CC0033000033330033660033990033CC0033FF -%0066000066330066660066990066CC0066FF009900009933009966009999 -%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 -%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 -%3333663333993333CC3333FF3366003366333366663366993366CC3366FF -%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 -%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 -%6600666600996600CC6600FF6633006633336633666633996633CC6633FF -%6666006666336666666666996666CC6666FF669900669933669966669999 -%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 -%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF -%9933009933339933669933999933CC9933FF996600996633996666996699 -%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 -%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF -%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 -%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 -%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF -%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC -%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 -%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 -%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 -%000011111111220000002200000022222222440000004400000044444444 -%550000005500000055555555770000007700000077777777880000008800 -%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB -%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF -%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF -%524C455252522752527D2752277D5252527D2727FF52527D527DF87D52A8 -%52FFFD0452277D52527D7D277D2727A85227A17DCA7DA7CAA852FD4AFF27 -%7D2727277D525252F8277D5252275227FF277D522727527D527D52FF52F8 -%522727277D522752527D5227A8277D52524B2727524B76FD4AFFA8FFA8A8 -%7D7DA87DA87DA87D7DA8A8A87DFFA87DA87DA8FFA87DA852FF7DA87DA8A8 -%A852FF7DA87DA87DA8A8A8FFA8A7A852A17D7D7DFDFCFFFDFCFFFD1AFF7D -%20272627272720272727F87DFD2BFFCAFFCAFFCAFD43FF27FD04F827F8F8 -%F821F8F827FD2BFFB5BBC9BBB5A776527D4B764B52525227A7FD37FF76F8 -%27F827F8272127F827F876FD2BFF6F9A76766FFFA8A1FD09A8FD35FFA8FF -%4BFD08F827F8F827FFA8FD29FF27277D4B277D52527CFD34FFC2C2C9C9BB -%C9FFA827522027274B2727274B2727F8275127205127FFCA7D52A87D7D52 -%FD20FF7EA884A87EA8527D7D7D527D7C7D527D7C7D767DA8FD21FFCFFFCF -%FFCAFFFFB5FCBBBBFC93A87D20262726FD05FFAFFF2727275220272727A2 -%A827274B52F827FFFFA8FFCAFFCAFFA9FFA8FD15FF7E7EA98484A77D7DA7 -%7D7D7C52527D7C7C527D52FD22FFCEC8CEC8CEC8CEC8CCC8CDC6CDA8A820 -%4BF84BA8FFFFFFA8FFFF27F8525227264B27A87DC3C3C9A1C9C2CABCCAFD -%04C3A88584858485FD13FF82AD828382A8527D527D5276767C527676FD19 -%FFC9CEC9C9C9CFA8A984AFA8AFA6A6A7A7A6A6A7C99FC9C9C8A0FFA826F8 -%2726A8A8FFA8FFA8FF7D527DFF2626F827A8A8A0C9C3C9A0C9FD06A7A1AF -%84847E8584FFA1CAA1CAA1CBFD0CFFADA7ADA6ADA8A17D7DA17D76A87D7D -%76A1FD18FFCFC8C8CEC8C8C98584A9848584AD82AD82AD82ADC3C9C9CAC3 -%C3A8A82051204BA8FFA8FFCFFFA8FFFFFFA827204B27A27DC3C3CAC9C9C2 -%AE83AEA7AE83ADA8A9848584A9A8BDA1BDC3B6A1FD0CFFA4CEC8C8C7A84B -%524B7C277DFD1DFFCFC1C89FC8C1C95A8484845A84FD0782C3A0C9A1C3A0 -%A87D27262726A8A8FFA8FFA8FFA8FFA8A8202020277DA7A0C2A1C9A0C284 -%5A7EA8847E7EA984AF84A984FFCACAA8FFCAFD0DFFC9CACFC9CECA7D7CFD -%04A8FFCAFD1BFFCFCEC9CFC9CEC98584A9848584AD82AD82AD82ADC3C9C3 -%C9C2C9A8A82027F84BA8FFA8FFCFFFA8FFCFFFA84BF82727A8A8C9C2C9C3 -%C3C2AF5A847EA95AA9A8AFA9AF84AFFD13FF99C9C3C9BCA74BFD04527652 -%524BA8FD20FF5A8584845A8482A78283828283C3C2C9A1C3A0A87D272627 -%20FFA8FFA8FFA8FFA8FFA8A8202726277DA1A0C2A1CAC2C2845A7EA8847E -%7EAF84AFA8AF84FD13FFA2A1A2A2A2A8A8A7A17CA7A1A87DA17DA1A8FD1E -%FF8584AF848584ADA7AE83AEA7AEC3CACACAC3CAFFA82027F84BA8FFCFFF -%A8FFCFFFA8FFA827F82727A8A1C9C9CAC9C9C3CF83FFA8AE83AEA9A984AF -%A9A9FD13FF77A8A2A87EA8527D5252517D4B7652524B7DFD1AFFCBFFA8FF -%5A8484857E8482AD8382828283C3A0C9A1C3A0AF7D27262726A8A8FFA8FF -%A8FFA8FFA8A8202720277DA8A0C3A1C9A0C3A7A7A7AEA7A783A984847E85 -%84FD13FFC7C8CEC1C7A87D527D7DA176FD1DFFA978FD05A2FFA8FD04FFAD -%82AD82AD82ADC2C9C9C9C2C37DA12027F84BA8FFCFFFA8FFCFFFA8FFA827 -%F84B27A8A8522176522727FD20FFC8C9A7C9C8CA767D527D7DA7A8FD1DFF -%77A27EA277A2FFFFA8FFFFFFFD068283C3A1CAC9C9A1A87D27F82026A8A8 -%FFA8FFA8FFA8FFA8A82626F827A8A876767DA1527DFD07CAFFA8AFA8FFA8 -%FD13FF6084AF8484A8524B7CFD0452A1FD1BFFCB787EA8A2A27EFFFFFFCF -%FFFFAD82AD82AD82ADC3C9C9CAC3C37DA12627F84BA8FFA8FFCFFFA8FFCF -%FFA827202727A17DC3C3CAC9C9C2CAFD06C3848584858485FD13FF60FD04 -%84A87DA17D7D767D76FD16FFCA9BCA9BCA9BCAA2C4A2CAA2CA84A984A984 -%AF828283AD828283C3A1CAA1C3A1A87D27262720CAA8FFA8FFA8FFA8FFA8 -%A8202720277DA8A0C3A1C9A0C3A1C3A1C3A1C3C3855AA97E845AFD13FFAF -%A9FF85AFA87C527676525276A1FD15FFC4BDC3C3C3BDC4CBC4CBCAC4CAAF -%848584A9A8AD82AD82AD82AEC3C9C9CAC3C97DA82627F84BA8FD09FFA827 -%F82727A8A7C9C3CAC9C9C3CAC3CAFD04C3848584858485FFFFCACACAFFCA -%FFCACAFD09FF9AC3CAC3BCA1527D5276527C7DFD16FFC494C39BC394C4A2 -%C4A8CBA2CA5A857E847E8582828283828282C3C2C9A1C3A07D7D27272726 -%CAA8A8A8CFFD04A8A1A8202720277DA1C2C2C3CAC2C2A1BCA1C39AC3BC84 -%5A855A845AA89A9A939A9A9A99A099CAFD08FFBD9ACA9AC3A1A8A87D7C7D -%A1A8FD18FFCAFFCAFFA8A2A2A8A2A2A8AF84A9848584AD83AD83AD82AEC3 -%C9C9CAC3C9A8A8F827F820F827F827F827F820F84BFD0527A8A87D52A17C -%7676FFCAFFCAFFCAFFFFFFA9FFAFFFFFCFCAFFCACFCACACACFFD09FF5A85 -%84A960844B52527C5252524B7DFD17FFA8FFFFCB77A27EA277A284A87EA8 -%84A882ADA7A7838383C3A0CAC9C3A07D7D272027FD09F827A14B27272027 -%A8FF2727527D214CFD20FFAEA8AFA8AFA8A8A7A8A8A8A7A8A8FD15FF7E29 -%53A82F297EA2A2A8A2A2A2C3C3CAC3CAC3AD83AD82AD83ADC3C9C9CAC2C9 -%7D7D2627F8F8F827F8F8F827F8F826CF2727275127CBA852277D522827FD -%20FF8283A783827D277C52524B764BFD16FFA84C777D774CA877A2A2A27D -%A8C3C3A1C3C3C483AD83A783ADA7C3A1CAC3C3A1A87D27FD0BF827524B20 -%27F827A8A876767DA1527CAEAEA8CFA8CFA8FFA8AFA8FFA8FFA2CBA8A9A2 -%FD0DFFC4A1CAA1C4A87D7DA87CA17DA8FD16FFA1939AC39393A1787EA2A2 -%7E7DC9C3C3A1C3C3A782AD82AD82ADC2C9C3C9C2C37DA12627F827522727 -%514B51275127275227F82727A87DC3C2C9C9C3C2AD82AD82AD82AC846084 -%845A60A8787EA2A278A2FD0CFF8EB69BB68EA84B7DFD04527DFD17FFA8CF -%A8CFA8FFA9FFA8FFA8FFCAFFCFFFA8FFCFFFA8FFCFFFA8522776522752A8 -%7D2727F8F8FFCFFFCFFFCFFFCFFFCFFFF8F8F8277DA8A0C2A1C9A0C38382 -%8283828282A176A0A0A176A877A27EA277A8FD0CFFCBCACBA2CBA87D7CA8 -%A1A8A7A8FD1EFFA9FFCBFFFFFFCAFFCAFFFFFFAEFFCFFFAEFF52527DA14B -%7DFFCA2651F827FD0BFF27F82727A8A8C9C2CAC9C9C3CF82AD83AD82ADA1 -%C39AC3A0C2A8A2A2A9A2A2A8FFFFFFAFFFFFFFA8FFA8CBA8A2CAA8CAA2CA -%527D7D7676A87DFD1DFF4DA27DA277A2C3C39AC3A1C3FD0782C9C9CAC9C9 -%A17D522726F8F84B76A77CA77DA17CA77C27F82720277DA8A0C2A7CAC2C3 -%8389A7A782AD83A19AA09AC39AA877A27EA877A284AFA8AF84AF5329537E -%2929939AC3A0BC7D7D5252527D527652767C524B52527D4B767C524BA8FD -%10FFA9FFA8FFCBFFCAFFCAFFCAFFAECFAEFFAEFFBCBCC2C3BBC3A8A8F84B -%27F8F852525227525252277DF8F8F82727A87DC9C3CAC3C9C3AE82AD83AD -%82ADA19AA0C39A9AA8FD05A2A8C3A1CAA1CAC37E2954535429767776A176 -%A87D7D7C7DA1A87D7DA8FFA8A8A1A77DA87DA87DA7A8FD22FFB5FCBCB5FC -%93AF7D202727F827527D5252527D527D5227F82726277DA89AC3A1A1A0C3 -%838383AD82A782A16FA09A9A6FA877A27EA277A29AC39AC3A0C35329537E -%2929295AA87E5A7776514B767D527D277D51A1FD2CFFB5B5BBBCFCC2A8A8 -%20522752275252527C27275252522752277627A8A852277D524C27FD20FF -%A8FFA8FFA8FD09FFA8FD2EFFBCB5C2BCB59AFFA8262727F827F827F82720 -%272027F827F8F82027A8FF52527C7D2752FD5DFFB5B4BBBCFCBCA8A82052 -%F84BA527F852527D525227519F27277C20A8A852217D522727FD5CFFCABB -%FCBB93B499A87D26FD04277D27527D527C524B7D2727525226A8A827274B -%52274BA8FD5CFFBBB5BBBCFCC2A8A82052277651A7277D7D7D767D27A751 -%52F84B27FFA852277D764C27FD5DFFB5FCBCBBFC99A87D265127F875F8F8 -%527D527D52272075F8274B277DA8272752762127FD5DFFC3C9C9C9C2CAFF -%FF527C5252275252A77DA77DA751522752527D76FFFFA87DA87D7D7DFD9F -%FFFF -%%EndData - -endstream endobj 20 0 obj <>stream -H|W]9 n8E.fr8Cqw6(:Y,R?c}=Ƙ6G{82w 5Y8Y_f/Mw d4~8ձNdj#F-mh4Cc [G di@d%5G m<[ۯ&daFX a'Ï=~߿s(ZzΦA=|?~\r`W#CVČӭ=9B'FO1ރ}&ӽ='3/<טTE -~@&D@/'AsVEP,a(N…$n6+ @8e7S2.۴@6ގ - YOk*gf44ʑUg hñfQVQ7֐JF3#kmYBY)r"U Ӯf4kջϿ8lǶf`@gWPkqsg&̒5fn?rJuuJ_5d~y ph{.(kǪɨ̱&JAvl$b_Ѵ'9xd]C"x8hB>[с=hS>y -jrrhJe|>膠ăӊʌ^ͩjqO6?~eCeŋ8ruG"5_qer3-30,[1FxػRrp* iO)Kwu\ |VW3 CkIDت^s؈4X$bC4!ճvBGuJ-9%Msg;&CҀLVT?%tu@gsil0_jci Y-6#0 2CƉT-(n&7,dѤ60b @.1#ا3dgs5wJԵm> %S{UkTa#1r +\Ipi͗che"K]F9?ͷrF)7E0kwCܒ^,\)J~*ZZc >(qEwv1K@ͫ[Lw9%bfF o=Ћ&hҊXxӥ|ay:A32}wf:ʃ^8UɱK,Ճ1ߧ L-[:v6\>z H.jپSԃ2@zPty4mV4Ә{hȪ+iIc4kޱI= @ -(TcyϑK3o0Ul :2&lŸYޱ16IO "=yO -2l;7WgfPM+E?jLf R@Wa`28d!e2 db:8_$rfHF O Z7i"W6?NJmr$my!*ϑ3F26v\`ܯt'{fa6{t{r~ $qx}(JhR &C߉}:.ΎthT%VdLHS=*["Ӷd648!A |Y 6~]-:;0ji(+qdb5w糶VAxC̛F\Σ+yvX l?rҊ)ZŠRև4M]Z(B`-c ܎XVuh~qaW -J>~l kE.vP [s꜎k7.PNa# M-'x-n?6T]8{ F!Y~ +Alz;! dW`l97ee9 7t*[Nujh;x[ꎩ@oKFel[e 40z26:G`32ɽyVjmlu@q`bWf&V<*?59|_Y,_[MMﺚ4fi֚Ik}ϓF9Ǫ3-VW)?Hr]?]?([$AD,۹B{Chp̑k7Zģ|yq}^"&`~SC\5ߢ~?]WA2لK[?TF1!Fb+U`\ŵfz+˱>,돸N 6gq2{g=YʱçZ E.;"W ä'WS~WIv>RES"xvtR!ulxɩ;˾!b-I"7߳QE -``vvRWJzTcy@IY2nS=-U['ҼVaD0!>@3L3R ?7;ɾ!ZWS|n=$5  },yo' uv.Ѳ}I^'!,;+ -o 5z5-"n^59^HIDe2dIKeHIޕ)B*2۱ՏMDѼ TV|To{4zSDC]i'{IvJļd42- yk[Ft~ 5ڠ -c"0Hp\{k2ZNښ ĬNMN # $5 Hmio+[I}p}UJːB`%ϧSK1sR@]rQEV?j' w:o3.JD= ?ih^Ho@) z z՜;r} ,&ӷw(#*&5fl4rvc+v!@Hܐƺ, Tc]ΐɉ^ S#8$k/flU`댡y f Ӣ_"hg!,oQaz{M94"ILoą6v[S~b}߇^`LPRݍ;xߛOX%>N޽0Δ P7>MKi\>iHh#WV`8 y DPBN#FP+ƠOxi^͝*zKk`xpriqԶ籚J^3j -:ϴp:k"rXb2dnX?H廜sٔᏂ-CHTr Dk˥q[yLDleW 2<]Pp'*nЬŗ_ȉ:vRjm "ѝm(C)B' 2Mp/sPAs\oC)Ը@ P@>zЭARxPyZބʉ=4_H0{ӊ\O&prP[i݉8 v -ca D=?I`cM穖undis9CZ1h,r2O`I+W.B^T*ߏ9B _,iM=ly -)ݲ| ^2[VPϟ%#d\U44וbMvlص2AtGF˥ޑei<%z-6 9~ 3&j~oc(1S*"yG;-T|{vjG` )ņ+H7q>`bYdžWci7\/$LNOD#aΎ}Iu>s`10@_/zw *|6j<4oԁċ!35dU 2Z7;ɾ!i)ZBW+8edt+W Ux.YlY>%y$USO$#Y̅g0M-^Rqm9]+)G2,A@f]I!"#8ʤ<&+BHCk1Xtnv/TX>* P 6UOg!0cu]߭:*[f"}HJ*mފH׷ e-c=6j}6"+W$ao+iI"T9vN[yt5OA (Nt[΀h#]"4] UM󳤂%U /}̦ƽYʈ5_HBFv,_W͓Cǐ+[w 8 -D<>>ig^ ]@)b e,6.9McX_)ud6l/u lYV7@eHH pKYi9i>FI Z([ Ɋ, >C'<_lá%ǮrUtڕ$qØA9䯩SbU^hKA< ]GEv)Sc5k5q6}^skzGՖ uHC0c:g{cy " -&3 zq xZ?$si*!A)y\(ܵu_:TzY#Ue E^f a*fW(\oJ!y0 q;‹j)kR (c6[wD:2`Z8g2l>H+&9?Ɣ/$ јr?fO1J$Ϟӳ1cn+" ׻ +~V3Nm "nZƯA |`p3rJ sWozCV|5Yơ,%-,>d#*v $>ZHb/CQ1)K$稪pkY?wh -p4OrV.g1A 3eǰ`GLrk]~#̏?/98LqrM\f+qwN3*l_'U|}Mʕ -c71V H\'Q/sPh%\zly z'F1S&HSr AdiG bP XHK*Hյj9D$憶1kC-CDՎXՒHn{/ :xX H+aWhHճۙ4y/V@F_=lABt!&=,U/$r1ĞpXCqb{,D0!% 9. n  D^4QFZm?fN?;7UGUEƸ,׆a.^3f*E1PO/U/E+oIP$=wO0X_ aA=Idw}aXXuVVյ/ޑ W*iN:z+3:Kx`ƁwGrSŊs=a+L\-Ӫ{h*yJs֋}̣4أ ؚ-V2I3)o@Ǧm3[sBFj)!Z'~?3l?Gė$l}u9;~Jq<\7tؤ6Gl D%^w"bߜ߃f+M ChZ݃Z]e&hR1IGe 7#|D["#5@dx<iQj@`"D먨o]?W2l7"14Оn.Tɇ;>|3¬MzCcx hzz%$=J%rRGL5#Nچ9%h&3$5b23dhhVwktS=<\2n1° |um]I\=D: 6x]ш3Vm kjݏANl+K'o$1^󅨇4 19b܌t>|K 䈅%cވE~qƩ9d#VH= ii(+͆FέBR7R# -6rD/E(3II Yk4hg3ڊ.҆0,5|={tRj.Zn8;haPr?z ,VYL<ÛDgka;NO6s ە@ﱛ k/yui6]_ׁl|QS7ַeEA晲1z(?, QrYwIw+:CGg;-6zl+jWWqۋMj~ԗ xLn?k3^B@[=7AzjkDX -^Pr&A|Z){PUIœG0k3w<)=V怂0R< Djc$3-"GXF-CPNt CЋ( -/llNIx|;$WWGO*S̤p}Iϣ<7'Z%9+GYi@vaJ ؇PzKV,ZgwiЬ }dшԼʢKdH=yg<>ӎ*maQ?ga{7M/iXj=^X6dbE<֘@: $K~a㉍}`sø5c' ^AN̤OlОA3 k'CЈlmySnc\$̲oÆoEJFJh&WS`Qq@*%_Br2h~VAo.wꡣ3ʛy&"zIZ{0h.H=̓ԉl2cd.~)318@nwܧ -\0N,FU !̻؃ݰ]-Y:l+>`.j?}-'*{ #ɺK hf|Q~ -F CLOdlĒ Ζ(5o޵hg -MbAg.2 4ueN5榒Ѹ ϻ?".95?]ƪ'#>uq K0%0+˪itYAV"V%a0躣i 7,\띟iҵM_؃YkHAl7^(zP-ޒKX]N̤RhGMye #f8vUrbѬu}|7e꺮Z?0„Iܵj -v ಎ!Icďٗ֯ <5om 4Pe>g`lxG>vmח-&:~e,|زw[tl yt\ sH[$^n>QRⵝ5`O`m%QyMHMKF"[X7˓t>[wp'O/vy*IKe =z\/ 0YTBOG SM aU8n a4]MD*:s]'ՖkQ_6+~~/K-R?YцvNI_a;䊠?g7KM}He,<}õȢ0RٜŀƄЭ[!fGG}! C$4REO0bO^I5A%7ISq,}UE/_fЋ/!AΑ3Q ،d-V[gH?Q5CVw%gt8d{H +=0<0Ȝ蜜B V ˓{ѥF[wE)+£Q߼p-!9GhJnI`8dcGy``,Ihݫ'N8PK_V侽9Ž ٓFɪa=^@Gή kJ`(+7(pӋ95h]ZMqvTk'z)% wy h!r&P̔TK:22_Xlku>kcv> l} -븃=s<{Vp3$(-U -yM-}lN%8%r -do -c0]HV.ˆM9)}&x: ,}p0Pr~e05kzVY3]+0bipS?I'#\?V 2( `2Q{GBa]:t-@5MRRܥkqTj݊hJb[rV'~t/|s?$fY, `+3{Sk#OAo.p.dpjQ9T9[A䊸VY卖,jt:+ *I~EM>;TJmͼK ٱu ={a -IgzE%mKO=apU4O ^+~Y{C3+}][Vp5?!Y O5b?639N!7M:wt`Nv:x5$<%D Y'uM^E[oЈ3N(ę1\QǢ -DS/NY[.^[&z+oR&`i`]+ͪoGRtNC@N)u0s]gᱜt7\Y@౮w;O;L}qAnH0/ t$9;>m$w{쓃KQQz z5œl/YN:8丼RND"~ -SbGIj6dVE*Ěcb5cVwm1c!A 1ÐU-7Zt QF*K1b6-ͥdzeIpȦ薟Q䧂$u`S;43r]kSM%ij&/=CG#3|7F KL ,[50-MDI"U#]ndZ)Rg\Eu0)rjlUs?L};SN~Hscjj,3ܷ`X?[,Fgiާ~ږ{Uﴢ^66uқ*5 83ZJZo`)olX-:k8ND (j7w 9E< U|=EF1tg67DM9!`]X{9dT* d?L@D/IfHjWp;v)u 0<]%g,ݛdV%zm]W26Aq-j5XHi)-k{1\,i ܜEBGvx'ƍa) ?Ci -%6+ &:CV3>q?M m;$NKz?7"Qu2h8kʠDA2`[Nt2hYkndдY51m47  E}e[]-2WGJ i;dz 0 .2ȼeX AO8d_]/dH}kʹv U-m jh;n4 -2Ήxh7v&k%m[_v|:fLZHFz[{:MxBʎER7ow>[BW,#iCh'7gRX.L/ U&)ͣfC@v~m4H&7;h_`C26\ 5&wNIn5 `=mč/Gbg}CA'k eIdE#Mv;uTR7gL$fE(]l{Ѩ%mX=Q>l}l998箍9gkn[y2ڎp4T[eqv{QcD/ٟB9 ~ {_b~+u.mIKf Ȥ|| Z̄"%8b/$@Mo{,'yX3BJ!3݀9꾨mZ oWm!;.Bm8#@ҞaװC<dT DEuF@ˡwu_%8!0]:Y㻗mxA\Ԍi3٣IrՖϙ˕:k1#h9=Em1_`}ƮkZ}"ƠD+]"$y9Κ -8*b^TL Q ms=omh~9BTŝWC/%ʺe5}M/%++ h{@i<ݱ+]e| ݋ߛ#]luǤ NK/iܷk|9 -t A{dx4pPOlU|@+QPg\jKMW4cFJ=fV/Xm\ $Ϲhm8ο8k5цFw.0kQ4lI#>z8Lk#.L&;[n?%hk?UDQk}?oϿQ_T<ke(.Rh;(qb0o0/|5Qe;>>~e)RG䙶+_cGp1JC"}n*Q6Տۉwȉoz-Z %@R|ō<>, 5!ڍIJRmae$v "|BH%bv5Z -Ml<|ٔi3 .GqHL1Sm|EmY޾h_ז%)ղo?#`Zct} =6[2nzC3̃Cvgw߰՛s"/a {: -+rr#w IznyD⾂+XD2Iv8` -%F߹8& pUr$n=FWXr>32T,݊=cwhWcod=E7yob`.R>58qiכ'T+8U 0it9a=y Iz8Ds ᧴ŁJ=OvabelΈm@ eǤ&^Ԏ9Ș}mpύߓJ*5LZn:hf`2ܷ݈` "3k|>L:u!tllmY˄W@Pn4֣-$J'rA4J92>;ݟkH;}hT-kxq ,oD$U$ jt@FЃr;m&*|ȹ&B=p0{nMm/Q~$q) Tbj } -[8dրi"Ѳ\y. L輋S>^JZEiCTr`LџMQ^y4Ht-CcI -]cJ:Gdѹ"Q2ył"p8ƂL:6p`I8$*t&CF'; -6#X22␪nu}v%s}` 5*KwYYq98iCc2#RM[UT鴦'Ĕ|ݺ0< *,%E&|[Xb1pa?5'3#.Zιƕnh:=.]gBK)+b2l3TW>_+Nk|@e⒇6*̇fեQP/,Yj.y4Kߕl89wL/h%Cn#&F'Åq|8o~0 0b,_Uv -LG;-gD& yci -K~7$eЧ9gd:JnY^LC+4 Va_x`dDT$0q*ȤM+jqtHq:"dŒm8Bml SaɽIQKZ -{ھe5[V_kr K[97$ CѪMK=-Q]7KTi+}F6J8Y9IZIJ?&۸򪑝CK}85!Ra5kk;bX̨Ge{RֳaEJcV^t{{c5XGbG`659J)4#^?aGgtEKz8yn>24pR2w?DɻaaR`ƁpǷ`݄?~X>K|S ^:"WňQ"V;|oWtmO~oE2 -}:=n\g0 s}يs-iApW#CV@@#0Вw3g0EP |lq@n5ǴM+:XgN~B9~unYah)(fX8 Y+]@'dT0=})"n];pu{luc›6+̬`@%-phLg@d$nךJ޷A\`{YprȢ5L-g9ЊGoymIZ+f2''e\_uYj̬iaa-eKtg7j@fFZ4bB;?b3*=|5ԣ'<|J8T QT_&kXɰCT y(K+Ħ}ǻ,na\YzXehxXgHX3Ju-3^w1[&69?whk\sxZ'RFj OT l(e|=tǼGV5o=dK|"Ji3rtKxB4΄̂zJbg< >(uik!Pc[엫5LwN)A $܀a(D|{sMpT fG; K^ K GK*IC -Tՠ%sM_%5Z6릈:9ґq'T!'abEM1Rӑ/Luk8 -+N1Ci -Ë8WFS gpvեVhas6!:ɰM=Քej#OQ$F1; o}e{Fz@п w0v=j&scU^X -’4sn^j):=|0Fӑ)XJ,Pԅ.E{8\Zu&Ɓ{,So]Qb_40$tNjq{{Lnsnų3z#g4˟`2=2Oؑ׃`3,Sxt_I7.8v>S~TiK;OOrqt+hm4`S/Ttݦ$ve_,bC]hcM.1'F+{fGҘ!S՘5tiiuiŢA. -1_aN.J.`ȗVba-t'JDF\Ai%TuA߾Td:@{EpUTkS7:3xSQPÈA0KQƐo7^jl 8(hU0VbveFwo tJ;w'L_XTNQ0ph~&%·aJ۬NB7^D$W?[sѸdzpb@fR'XL@{ъ<AQt˶sKޭv_a"GI 'Ex6&ܹS=f{"S16vʥ+]7C{y0epiiL4Gz{\c&I,Zr$Z:c @&6@u]kVYƑ{pq"ai I>+48, hݭ2qͨ) (3Ö6i7 #s(S-g!v 7T<[G/ɒetFQҎ$IW;[5iIl5 o1ĉռbr(hl8Q›֞xFϢh1[;_w4g)U,+}(rʈw?aJbtէz2i~0b㓿c[}VjLW8Osd36>Ajg%໏]q<{0S>=mspD60h ǃ3~KQsAA~&`:klqxGL\<6+j7/__q,uvֵ3`3auL3:NЖU_=G~1Y?#a M - {%6+%`Y\cW -(In@Qװr#b/t& XPОJ@z}xZ1A+Ujy#==wö:nۖĚr$huW\8ӊ/f%uyu,#I,/a>LTXR4ʈ#U:c8M_ؕ <7](/|e{&p)Ȩ@?Kux ԰>\5m.rK#JBcn YMw5JK=k/Lh(J7c9̒5H-9I%̓jZ.ZHMKD, 9)5lS6`=S$ey)v~]iQ*H2V%>,>g3%>J>ly>sH>(01#w#jWV+{_|]%֤{ݶ+@G߻Ŀ_j,tILk ܟ?5Xa ~aNߘɱm__yV7\Tُ) C6l((%~&(Yд" |IF̗#~ )~{dHGGj4P/_=L - N+ \SQ 5˒jURLqhxS@ak5AmXo6cٮBv%EY϶WM~r2'@`mK(;uKzXk; \G+jhͮ[- 킮C #@#_@"CF i_U*Xu nPN$@Cv|a|I,(Y{ofƎ.z6zXcb^tl;R [5[GZ [aL/7N>f/]&0P[3OmouH{qP0[SOMd'sŎ U ^)okPMJ2g>$@QwqaTp$w֓[S΂KTnd6D~ޚ=Cy η&nABVln'QQzh.y+*i -J'g'08+na|!|ټHB{fcT\? PI -endstream endobj 21 0 obj <>stream -H|W;o% p$!RHN6Hҹ3wzEC9ǔ76_69%F2w2i\o}?ZoӦm:Dlxۦ~4fbsi̤ L|6=>S[s=ouL -`mu2}g1P',%{ӹ.0HYRӵ!CRRsZtĒ# 3ͅ -ТQsp8)"1Gy/%dG({Bdв,NkRY$U<ЩBY$ǿW&QzLBsnP h• ^5*n/lK+ \ˣ|*yHH.uL{&vL!e5QPJ_Tw!]C]Q2/Di3R1TͲȴiLeH=;v( z54A1󎩢 "T7ݟ"Hu}&eXj`DU5ډ<(|wWBEIMo47pBq!^G>FF()B;ޏldG} NRʇh -!F~tMi,0{Bh)ݙAOp:hQ939.yt\CDti{"J`qҼX`OF`r> cЅ+ЙsϤ$H"&Zt#/o>O `wH]䰸z%X(J7Ƌaa8,l'GEY,}PX$X,⹛ŲIb_zʝEn,Ğ_bZ N%q,lr {6wW"j?_ .BkHH Wu~6'9ʣ, ynF+)N`fx oB9i ڏš5% XdQ2uD5j#!iE{iY5LˇrjI5p4cڬRڱ eDǤTX/)Q)`K`;{q.y -zr>3d'Tt9}WvI~L&iUN@"d1& ad?V%K]#th8p:=bQJVr(a}|u}g,T ^s`Ʋ; O~Z)?bc-ytdQf%;sޏjO+&Xc7CXhTa ^uhHFRw+h&@Fo`CZZjWKZ%cޘbE;adǡ `OCi2UA&8$9YZ8Z4gciJaVCN R6)Zm\CzaK9ѱAsK+=izn6rw=\Z=]&ĦZRL:'R=DuE@, `tl-5TR q|!t`&-}$z{nE ɤݹ81,;EjסXu+C:2OCKsHcXifރd&mit{d4i"WȺnL2⫨>2%۪hsy %!*#^ZXG;zMg>.v| Vq?v7ܜM'&&v(\<)cH}4MY-Z[͂gH:uKAɍ:lW <+Ԕ=8KVhUa.L]/ 3 ^O3@a%75Bs׼RFln{fKQJmVFzEvH80^dז& -gzAhmb=E-Pgt:];((Д=xF{e7e.3v[I"3d6sF :WkSpt9..v|E~b#4>}ޣԨBsbș{Lt4-itΜ)d?`À"F 6k 87ۙ\졵deeчv1hGgƠC4:`ATkP*9s 9F{5V~T8 -J+)ѱ!NF2Q|treL:y8s x6}%G9FkLrʞ0Z 4|czO ,Y..n) рӱΉjױơCvEI$ްs;w<g9k0ܖAm#Ohjck#|gh"d0XC"TWMkzv u)w^or6Rl}NQR6$* #-ҙ@<^S<[%~T;hYQ3'LpYWǞy5lb G*@2q=5Hg{" j+th\|ZtlaA6o=]kyE/¾#- ;֑_'vtH?aGR{%H?ǯC'Im bfhm7oz -s6 7db҅ nzۋelYX]$#qk'.B]DqݶJ OIȖ4]E6a]*םX ζZ4YjwN06Wټwp?)7!Ӌ .)lN2SҪU|ACR2֒-*n#dp[!s ͸!ث셭 p+y4.NJkz/PTOx(;$[N$^W%֔C,'6+fҶq5nb?bLmb}eK*S\$I=~03/"|*1yj'5gK} 'L֕rĬ-YKwFHV{`.& -DA7^C,F&Ҏ-qheq]SAsvsPT8$ƽ׮ъM-*e@[0.$Y/cCL@7V=}+}FO^??ł")6[H5#ڮHƯ>P?G_'2y6αz,6խfw0,^RBImgH2Z84U*D{^jg -6˻@HQ +\7ӲFY0C|Uaзgb#~OqwxlF4g<׽ )09d9M[ ;UqQxѹ qy$\/2CZDKPX~fx[F4!u" 6\ZVxH6Zrp g\gj:  a4*7Q^]Il~uu4ߤY'WQ'LNo}](KzOBubGneXdy˞C~p1sdey"M9%Cݛhѽ 6LOoLUg͎UaFVm|5*.pe,Վ|}I@Ggwbf! V݀U3%O^  -;WpYMP!#c㧮J ںd! YUO+r}f\u7 Bx$Wإ$y f;33Q˅1 t9evaIOGÏJrYjSԐTj:c򡇌5cJ|Fk5V,-+ByƔk >+cbF{\5ŊpTyW#$g1/F= *QN-_@y;4ggtˋ \|4ӨuMU3)ǩ,X(+~&1Rj)P1cy=q10R2/y[ -RTh'-hn#RPʣ+)IkiBlHc[@\Uebޑ+"ڣəJ&UVm__FҨtxK#H鍺7@(Z@|,8c1^ k %\ht%5>͔AA ׉]S -ڥ6ו;lV;v)0x>}'0dg{84tҖz>=}YVFA/b/L/V{ #Ƞx8PAW-+1t[aL`,͞C:q̤0(. k{P*9[{5l=mN=L -֑aC^)Ϗk !%' -"'~–tX:Mv+On͓a|타`| t\윞:艡P ؤ>DP|[No_&#/(<VPP=[}.'bSKzGa9ڴo&7F&}whQ ¿Kpwzoԧ=;${ -)4Oǭ_ߖĸW q{°7XNn̋W넂{`=@PI^-wգrM/]%ycG;] S*Yng16(ejJ-Xh6fB17iT4!)%dAM PAipP?x +gռ`6`}K2\xdm}*$t/ "} ټ3vOV'RC4>sFx=k_|8J0h 2!cװbqC##za}"3MC%|a۳Np;!>EFR\0OʾN4[눐>Eoj3g]-; #AB-3 bRP`HVoŮ9+ʹڒL }kLy=̷^##yZmpwfU|'X)t0ptxB\7 -BrN@}¾g:}^^ DpKaF -*q`=AJS{ް0޹L۩7}NX{FCepFAU8֮;9GwÅu9ݏo ??{|E@ȟm~ο삣cp{ Mw:{W*h#Xp6Y E>/~B⬷8{y?/y8:&vT:#x`p(𦞩nb ?J9֭`7XdS=Z -,DgLcS {o {`CzK FK, @b+n=M}43ƳEg +'QȶY\"EGsfYZz/16.B ݛ`@)~~>GɈ>LW@)ZwnJuWgvpZjNyMc\HrtioY,2ftfh4+:z³,ElD)O⡷L9R^_d5yJ8ox~YwWGmk뺨"{>R@; -(ck\pJLck͜%ZhxfPm<0ȢU)-Cͳb+K!銖"qi{n3t_){>+ F.a@mE.X͎DKWC\@a?pXr_! 8 Mw},½ p3G`:J:c<<+R.F1 ]if&bnӦsr?ʌk2"+2 >ra.̌MxY14O"/?|@+:!1C:G[H ^i/E*TᐵWX^7Fm$=3v&y36sT>}V)1:DŠx~o:.AG-$ +@堿˱Q0E, `i9o{+dz~k &v!P bQCYJqnyAgap-Wx Cٛ 9Ӄ[x`TRsp`PZvxxv{xf[0[Xbh -2NGwfg0N118?^. )57r *JZk0<$sԯ&AV?*Cx- -j`X#`EsaLT9QaƠ$vU=N!ZBHeWIȵ) 2ܴf+/oi;S/u 5E5qx>6}N'E[ >kb@ܶrl  -0X5/r׊AZ!n{-jΘ~ob[T wyQy?H+O'qfDGޢВa:*'Y<1;R3.S{b8*د X&}Zsjԭg N8n↸-ftzn aEOWZۉAa+P5!w=vĄe1FڶbLd"ix+y8iѤnJȟ)rc xë% 7' j=RgD&X t{j`gtG x "IuX.?a#^vj?\v8遡-Q(0/+Uaא;WeTZ1V&GGo=k2$m6I7ړP1V^,2{cT -:h/Q=!fEBPR4qڔ$[(9Q`Wun1+`}1,#yx\ݧ[EKccƮ2dfD;Oۗ慶vV <7M5065VםM(`|Ħ A7weid'&q[FgԲ1KnXO:9h͢DT"Vjb31$a覬EBEԎ(ZT9ڞ挹_ }~wKN >*ȝc fyVu Vo{ͻ'S(̇ -]hi'l_*x_*B//BQ!uDIĹ%6iOPᴷ }pcA}=+#>LRίYnsJ͂;u27m_i 7Ѥÿ,G#TUc/aFho 6y0`׹{ͨ> Gn(^M 랋` LZ1F^gznEV F7=v|ZԼ+1/:f-.x,C/B(eK@9JxB蠆gmZ $z }UxJl@`߾;ɔKyϰ xQQv}^01\ 3&xqz72TMLqU"VzK+)}j^f͹}v!k  -f!Ro]y?maD*7ytM)ur6Yw€ -nL>'&dpktD t@ bzq_B&ХY:~v5?TY4L4"eOhbd0K1 '3XЫNÉ(84UX]2iϜ8ӵ(G7c{!Gj*3;@]%,ߪ/@^cѪj:(&yf'#^B9hg\xwz^9} bT+2d#&6[?M gTTFv*7hXJ$-|2BojW(ݺAa[u:JLQ(X85;-UEnnn,Ϟ;DZb &Fk[C|U{6NqL!fw`mGĮt=cj o<у6^KfM)貰[Yid i4oVw]+  TrEWjyy2xvOd46Jc\fLh+2ɥr@ -U%xyz ۮ`0ʈEfr"[DϮ˖QG4FI*-2l(uC`4 ݎDѢY*HLбЦhNY{X1 -RՕ*,+֧,4ze |xB 9#4/ge00ZhFۢ^΢n!F-鈓`McV^')bnL.vu0De.: 8 TUE^NO]dCɄ:# ȟ{b`kwtTmǔ#{ēFP*<8Ƽ"UoQ{GNTצ^WܓR@#!5e]%>jclȺ(:2P|Sjb6F@^w^mM^M'c%@Üz~%BQb&<>~ J++C.$|Ѓp'ʇ.fW]-{-8| -gWj--ltޱ+!nֹJBˀN?eiЖ崹7z~a}֦uφ?4k?5vIMd|rbu.:V- tki=kf]2|*҉bTf3 W)xήdeFw(}Hӈ65\-2y)`],:!Ltjdzoe 2)c<7n:4 1x71C<6zbv[}'&ژcS(#&o%Iurv[Ao -BaI]r8,كW҇N]8|M֍$QDh_yW -%IY"E&37AC ln_@X'2 ) Y [@FͨqnKNTfbԀ[-wuZbQ=?lṢ3)>6'H]Yw֙3X_ߙ!U'>XZ^OdKT!^c-43z` UP\ h:z[E`y3.7B"Or#0(zdaXACk$l5⻘2\d.;ZkhS% -gWD@cwEȯoiz{aA?90ZZ^c '%3uI>#{?$!f:\Qm|`yw{&IbCir1/M˴(.]?G>0]6Ȱ0/(Looǫ܇婞f/Ӌ]GQϑH@ · (~ឋ6;C|gj%A[5֬\chS`5h{ЋFM%MtϤKX#nm杽.Z `:|H?{eglcϓVz_7o/ A늳̫XEÌ*a+>jZYic5GR\9H2Z8'ōj@Ho7},aEVn~q&a7W;ڟؘqh$ρay6ϫ`N@מ5A.F̳ؒ`Ru8\H^f;n} NE=q3h2ap`Ѓ+*bkh[,*fsCoR=Gbk8˾3u a5:k%hv<{itV({|ua֒iM"MMve*F%@! u^eiMp>L݅-(p5(rh.ug.F+: -e`'})CU,B_<邼Lmѹaծ(g7ѵ'k78>0aԬ1xru<+lDtIV|$'~ib!QwP?d-N\5.hkЎf+)[63eBZC>]k,i -( Z3]Fp}r*ѽ)ld:+S=3?"zjm{yaw~=1­]ovՐ@9(җf#ݞ+cߒyzz-_󨸺I-&V(KCGh|JKL :{p#)8no`t|O5y-;lzh9{/l6(S_&ؚYBt#Q]mb l.һg~)YK|̻.%afS[CP1#٤ƈ|:r -C.9}&oqv2áÿn~|oΤ 6jO0[KÍ`PYr}H˝Es XN`][j319T{1qzza+1`r3,nݠD.l_G2ǷD.`Y2+&0(`DB.]s4D T-*vՎ s{}fqViF!ΕikVbܳmfHWl3/-uKYs@c٤gDw>0+=$زLWw:,2#B,.-%H>#ed4Zc.Ke<\0 KI / n"r`R(D{gC!MEMV4;Ŭ|PɁNX6lUWU -Rq[~fICKzp/C}_bQ@5]/,Wx~6~jΧ?~Y#,kD=wu0;&B'ёm;^b.r=vҩ<ɰH\rC‘*Łܞ߳NdENd >zQXЎ*Yc@ek:Nږd K#m=Z\5|!!c?.ndY=0cƽ?;pνrĿ)^ku4N=Mo`$A)C"k! 7b͎9o4G?:Uw -{]4cd(.tx8f>,U5).6j[8C|p.&33Jj -~ b6Ka7Q]j;%jhãײ]e| C<*;Xu. -6# -7°.ɛ{lG/́l3ĮRwe;VH@++E zS#4m9 #<9v=fmn3K=+RBh[sYVA!>:OW_ 7l7H04QȌ.uL!TW|mM$L5v~\E2kU^u-kd >6t,zʁʚ3n"V > ѕn|gt"ΤffAJ-Bpxԝ=Qgtk ~q~сqtzozYo_8tIɇ8sh;erV,#ԅx7v-퍃Q\j{uQFUWjk\4a^}.v'4o('XArC4O`Ģ^{2 {y ~mRR""&f6N陵Ƣqװ)sA)jH*1ꥮ -LM3V߯`͜pi̲;o,&TT ;)rcWg֐C6'0if"$`)>]FOB它i-K%Ed官U.44WCRGt5_= pD)It"2xאFijeTf%ߙ/VsʋE\3@M4αٲF\9oP4InPBU_&#U~ZGf{\+{^,P$'Bb$K.Rqh[#Egp {(VW)u(){x\ҝkj/͙U W X4%S=)EEc<(L0 ラp99@1 w兕fi}v ׈ :*/Uwz؂)}9>n(1T^ݼCy;ujjI˨3qf!,N f-#TLg!L> 3e7G[-JTAy u]]ERꞹ ND=(/j%Kǚjx}m:H>;6‘@MyNД]ٖ6Rj4?IZO -Fޤܹ>gק,<]2e%UZDم{ u7^Ǣ.y(YL#m@߲4L]89K phzaUms ǁ 7zDnhJ%>{܊(EԴ&PlCRK5 -_4X+jM0XOgʰJ $19[zjm՝j/J=!w)7!I?/ɻ$TEwqLZ1t,Xm[ٹrj[|nwhq4$LfDzfk: fx<ف؋5 ƯcED%1)E+:/.^&ل䉓F9:u7ʱ6Q$t^]?8y|5>NLS.Ģ 8&r LzټgmVQ}|jMcg4n6}]e9T 2P|+_9.F@K~Br Fh}?(NJm|J %Ƭim'޸b*Y!(%JD cWpYd9Z0Fr΁BA،eVxWEh+|xAދy;q}e⠧o 5651mْ4** -sٍt+dxDy2k X6 @%ЃZtɺ̅I!7?= =t&b8Β0tߎA}. -ܶWƢKVw LfOxPِTԣѪbx{-Bٵk{(Ve7YYExr^H8ȶ& YI6FLzj;H-\QM.m}3l%΢Y*MTQ+nLWZi>dV40&9;jV?bUOTGdz7eGJpPDwH>{O+< \[l+OjWW;`/tȎh,@adU4jW$h)p#hB碵Ǽȿe}=$F#zH*2I*;o'KRrx j)iL1BҌݑIpuKv*} -=Cd2*9p]KjXN{uw gt+g#x˙*r1o; [/-3PS? 1e)C:JI{IkB(FţFPʑP2 2>d!z(wfJ? 2t=<dZH_Rf, 9'<: wRACaBʼ_ ߏi10)܇.X FLy}c8V >@5\T.IuDcLB=Ld#:va5Y"bFۘ /0,껀2@ "T.gR`?@XXf!GɨŊ®G7PPp8š&4.|aWXbUأ -ُ*Dr`~c>|'`̙1Y+*_'6X}8`gy ѲZ'u(lʙыM\'F tW;ɷbY]XՠY0DAYI[Lf -.󪵏Cw,n^0Gs%ک0qgkYgW\e{]uk=@yDp Nw .zf-{M53#˻o0:/FdBGBtqB\ՅT(:g=jSh!%V^PϚ>2~}Ϙ<w!=F94WcAڕny̔ { -<oK;4ZH Rat:vNIl 'CH ŠG)Y[>e"4,@:()7}tzw!,</;9ˈ;@mc2}j$+,%֪S_؃S\C@X?1[zCzGҎ{tjE&z7ՕV*l <nig+f``S$k.[^5۳6)u^W5.m5/ ET .%S*@}/қlhZiU7hyq P($Gxz7Gy|=:r/G}L|tX:d۸ƌrQz"Ɂbl~Y^Z%| v Z6ls`*DMe5dXX΋F&]'qrX>+ {$!82 xʒqrԭk^k% vHb_gjNlOuA`j :T -n.픊idpu)yAh`j7>` E;zs< ^@zSVQ\ ~bGlEee‰A?fU˞!됝C-b8BahE29+l H \F&Q@|7UTx);n'dzbMN;{|]e|UvU(fse *+T2WqބO o67V!KgemUw$i^ilՍYB~PE2GohtBmN`8kZq.2^h_ĬRxc*r/KAl}2 "CVlB*{F >Vsil3/ -6;$Tu2ԇ\՗;Em("UIȵШOVWjjv(a[Tӷm;l* ipJPZB aܴ3HdaP6=^wg?pՅX) ,nn>eD確 =="z8dH{ "R Jl;m ԭJOjiRm#}Qd:P~ra) -y)C-:b9Ej+S?T7fd!-qj嘆+4DDDkmly16^ЩzX[6S[h_dl_ Ҷp~sE291,Mra#0W\s7@nRŴ-n37r䄿f$ӵq !^v+|E]-㲑GV02ÿA&ԩ6x?jKmu?]؟\&kxW=h&{v'ԆU2, MM -endstream endobj 22 0 obj <>stream -HtW;ne;{p(bK|Y8[`UZ0sv՜amci vvb*Ȅܸk Dد%@BwL:T$k,{L{9O 8v\ cas|@Yl2*;|SNJ vr:ƽC94AFD\x⧒Ydaim#q@_' C-K2>n<7%;A\ʔF iZ@hr DZ bKJW.acOƁG ^Y| +_$A㻐g+!sј{$`_-ū)YҤ_zm1"u惞47y)ωRGO-^LP_ő 6C - [}tC [āMq%Z1e:^dt߹C `DܠViVq.v6ꇊ&]2nqx$Ud۷O7O?G,d|ZV%eܰ1X)?2nv˸C-E`C#cR2nq[ l_-' Gm@q` [N;rVʸ m7.rӃo7z5ynlx+:n)q긕ȡ}'׭o[`@/к:nazƊn?uܾU?Eqߨ:nYtL\Z~5J˨ `9z/s)d_Ч %c9zj蹵=ر4#ݮ?c$saMGJ j:, Kպ7DF,Z%g5ΏOv1ʠ4Hc++$aT}4@}.jΚ=@tؑ\D\7l`@$qAJ&ںG/S_PޮwO #娠M%Kj ո4 - -IbrV sګ畓Z]qm=H7L&~;\}ct[ߚ|Go#M~ @¹j֓r%c8B#AYeFo{u<|f:[cLFbntEa ctN/\^s|8#1ioc|\߲܌/M3Y9NL -̌slpeDBʥ/c5!M~SekPKB5kj =:';ցc@?.>#=vv G*9k-m;2g=פucL:l!ٔ𘭶T$S|B -iz-e(_Rb0yl#$$>,u@alHhSqmف?;U@DbюA-2ů/eA֬M<>iX{hB\GPwrc뷱~Xe(o&7cS\x5'A|=-<ů\`\{GO5Y#y{P`=&$#[5P;j۫$T-zMd^5kaGSc;Ku fY[IK34}=h}c;{^GkX"Wxo<]`3sA蠦݉8XG ͳ**bE -Jl@/Z?-*)9 D["8pE=(SN϶ubkJǜSx*toRJ?+ -mE7&~}g4 ڬנ:V5@JY/aA1mV۟h\RZб (3!ӷrqhL bY~WTl̍YFܰez5 }ccV-1|xƁyc6[X"45a"Ef DRZz.N!tJ@nzO3^ēb|K- 020SgIIZIk`ixa9l1琁Zc#_|j2ZHu^'ևڗɸ8W"X 'b^k|2^23e;PD}Q?˅kk'x3O]Ish Ojʯa3-wg[Sݿ׶5*߃ DZ7J;?&kmvJpWc !pn;T!~C^d 4_jkvZrNH#ֆ7s3V)"9$ݍ2[uٷPU]_LNMX-;p/̭R 4g[F -]Fq5"h7NGIj>K},Ygcփcת7ȄN+9.1[pt%vy { f,Ik8W9G(շ_y˻(m\oC]Qs7 & Ui\46_Wa[6YZ#wo@)ܺ2#+ح]XYA#˓ؒ<>gd brW4{DrW`hbWF[жF.Mn8z]'ŽB|kd:6ZW~k9ħ\ZhzHGY,qbm6S0iH10ɛ?Ħ4frȆe5n3[md2ODvfbѦ#``bFAi_T=t'K!E#̲v} #~~R`֤^kelm5[741\=[},FO)#J:YK8=[:ٽ,=+ٶo; -]tyG 9 \ ћ>R53bH -p$"`D#v| OFJ+IЃGŲkكJOu`Im;f@Q k$hRlQԫňբ[u[_͹0ܦo-ks)sM -H .Xn_<&q)2B:r03CDSKg[Y LȘ'8fC}7dVnOGv2p7 ,JpV6?ZKŽ2@bbVh (y! Dѷ2Zw;jQ$*>s_>P|[ dqDpM2dlj*m.؅\eRސ:IR7DVI#?ԗ]RV r 4_\o6k~BWmw&͋_L.66H?<7 èQ'uMF77UF2Uq]((k d_Vc4'L?3|f@oЌ+liEYՊ"G3 TZh Mb.ܽf- (m$,{!f$vES({ Wܴ-.gw=Hnsx~ϑ@ƋL9ݑ }?c#FvҗMz$E\'2T{ 4J5I^r5aw)O:@3sװ(fU'Y88ͮ!Yfc]eG 9frBFMK^f&_@X_x%aw_(Gko36N2l3Բ1{H%^ߛ ]/>"/ڃ3 @n3oz#$RkA`8q:rΌoIc|oY>y8\}_ B@|1~Y}ܵ D2ޭn%M:(]yc|5g1q>mlHxP+`)nUYOn L!.jzo+^e&h%/ijjJOfÿ*mYUV8r4;&N+?5c$*Is_i͗ɮ^WY\-ڻW=0/}2}mG 5aNqhMк=bvR&UZ7>OfޟToأ5R6-wnA?9@\(MwJƫXf旔v(!a3&2Z#Nj[̠Hx%u"_%8Z岈 r6OǍm oj>RӎDeÜohh<2e,ٍײ!((̺\\Eww  FJ3c爴yU7o7$%i}d ' -(G~@uKVrzP,<7 3_3 5V6z9~)ݎh,3s阌||Cz-ʾw᥼Rz(E5{ 桿yI}#O(1dazW/R_H#2Um! 3_kbLaQįK?_B+^WѾGڨֹ]My ,TL>W^8!KRǪ -(3X``tc، `@zJLѣ ?Ւ%In4mݢuY]г#l YeFD>I Ւ/R{ x",#4A}X[("$KۘlfMо,Áx|"36M+]_{PR>2k% GGb10i @9=\l|TH_D$Īu㎀fNK#`"d L7Ӻ%E^bSkZchTXzpǂ^֢Z'R]s3mE,_Z6o2I/ r`y"^.5 9>W"}~--+Kf,TQP,Gҫr}O* RW]vGA4=-~hW)B `<=]vdqP$" gWsZ[{0t6݌d"ƚϛG+1 9%QEzP_(4 ɥ=8<\:lZSpVt^R,Bŕx9(EA6zi5\6&cY *eaaqB dj)Y4^ cUZc k,^UӣŦ75:*6 #Y'v}Yk54 fs51PL6mT[ N 2ڼ09glf ,ޖVo4R1UeEZ" -Aa0Ŵ-vu+k>kca&!s0b'Cj7S&OzC' FAupv5ģ^j9J#K!)kR>C"ZF64trr,);-m lnWrk GU,#!h\Ś~91@D;Z&bXDnҾ+V؁{r *\[ybMkY>"]\Ƣ˚!c{-c 1(co`3K#c XD:",RV/%kNU&pZk"4xE Ζ>6]\ɢUK#_JZ٥c?~X^;*Bձc7jtW1m]NgRye& CUlGDd4@WG12$$;P&!lY~ k9؈Ϣ1R0A}t&Z^Tr_=20͐Wl<1~oydWk{bb:DRKEL?صw%l|1}"*v8Т1v"j<ʪ4K쁣#% -Xks.hԦ\Σ=b| lm8clbYX[b%m y]H#Z&-0Mڌz6[Rԃ6CJnbnd\_ͨkOb-`iyXk/>˵vvck@-&h `E%vme\0ETKi2߹Q~psg^*,6,uRH%Z=AN`z||]o`CFhnypwb(kձvO\Sa =P^S;?)ʻe~Tkek" ]UTfbzEAQCh%s-ae.Ojރ|7a/v&ͳo N>Ru& mz-[ \kȦR,/ah d9c -!1!GTƓh`Ͻa5xT+@P#HD/`'㖑.w,r:t_Fel[3ӹ>>TE -p t0/N/'8qpt, ;.rvþU#a\ ՜R/̀"r (Nt6'5u'~SJRK3JnFƹ[|k)M˞X5.~\fi$ߚ9 :vhUsLDeK VOLx%DWZae>,10!>aqb[ O56;WGcLb${LbhAkvò:cTo=i2ے%{XmqE}<Է/בYc u3bXc^#tT][)GyGߢ^ #?k]/!lW[4дwiadbj}+^9;L;A n'[  -Ky :D%0v M`!4Ɋl*_Dд=mI`Ӥ MôSh֙EwY`:.=D[gLbP*rLC!3Cf22Z+vL2ӕ -֥ izL~w}L}~̫<-3oK=e&=u4U:_FKۏo.cV`Ǖ^v{~e,)J(s[ɐļF'A%{i}eļJ*Oa#[InJ~a˸seJ1NXsB.w[,(٬&+8'7@ v9fGU>nm5r@~?P)3WNW݅URK џ={.Q f*;RLGL,s`Ɋ0(בgs[-Y;).(%Nqʫ[JV%qrG(G'[o?!i_`2n.L,тIGG-.ۖ[,\ݓqS(Ɣ_M#wO,a'_K !PKt8ɘAJIdիtU(A~@gm ( g(̓kR9P#.'* VCỻbuE@y;;wDU`3Rp gF;C%ş71|dH,6p"PWfH8) ݌.EReidM2oNU;6%|QQY̝~XsL¨r|ԴaWߋ. -6-gK>O9HAokv Giy jŇn.BѼ[)eeT0 䶩A"( Hs+JXǰWw omVEG`:FY(.ޏou_Q|8N2+&wn?W -FY= k! R[<OhhLt1}H\5?cG]u Q_d:˷NJ&Ք|]7,'=N_ahK4I33ÛvL!"r >WHr JtYTy0{MLmx; [Y; Ԥdƺ2;}@VG#E#{w]ؠyቌ=VD53I-h gH"LBiIxϳ5 ;YҙyL -5+P3] 3eD4ҥ)Ջ!-hX4y.jsCP-[K*Ai!`y܋,vl[mlo]4ULcYI8u,ӧG'fњ -cX,¬ۀ=-_heJ$N=di~y٤l9_sBFVhkX/1 dy{Qʨ.E+| -FG 0K-tB؉ªb6|Tݕnyw.JT{(-W*vQmؔtWC,**j7MSѶHqKPT? Z?&NjʋNR|NS6j#8 -#m1 Q{#`P|Ft?lB+$Uw@~ nJ3_n֞e:H޴Iߋ=dm/)nb=ke#(D g,j\-.@tldd|Iϣ! Ki>$7QvG\JFՄr6f+J1N2ة$6G(YBQ@ ۣ &2+(t]juàkϮ˛?!P91UKKǒD ╨9{;lz ӕ"- -^$Vgzmj,3<#z>7+A qs,AfDl-IC>1Qic}ns7,U0 zaGղd9d;:o ߲y,Y 1W:g`oۻWm;9ONRSH:GrVJVm;u,P -n|" -ޥ.}ǁ%Hȑfy3XZЌȪR.w@F4i(+5IlVC,Y,٭xQx_@}Ǣ -vQ?H!Vm19D%M -CIB$Tk{ -75ded0GvGhuĀG9H=URSUTךo׌`1Q/kJcX0ɣȯ=1yY"X]A#'஄QbQlGz~BxRR*<*"V#ȑ/W>aEb6qbfV#6CY ٺFO_9 , 63IXN*d:}RHWY5W,%}!7+l(?UW+fg[@q~NF[-,MG_] uT`ҕ:^ʢL|uJMLఊ^6\^t H8|~M[R$RҀO- }M-ra`pK wC$n!%&am'\wgj5l'&TvcX{"94ck.sn^)%OwנԎ.<˨[pd!n@ҏ}gPb;>!w¼$o/tL;>w%սK)'A1ae*0LFVk 7QHن~^t iVuE] H|};h[992fĄit́ͧi@0WƘd&P6]<{cԂ ?R;/>C=_lCކW:#&C Ll^ls;ڪn񄍓d)03 -y|QוQ!1AMi0c P'?*²6Mf>{S.ՅX%/O'WX!$_{~(£Wdgo+jTҋnSNQ"IŔNQZ.O|(U]s -`^sp`3Jeo8K579YLX@%կ&>uRrj0qqޓ1Vٓkg ^QUbF ~sa$ &Ԁ8\0sp̭cF]H,,|ik秪Uɩd czt:~/Zà O%_YHUXzP[nSx𯅝ziO}cOeiOe1,ELn3JIc;Yz~`q6>vyg{$glcQwfs ?tTm\1:4dӼX)@0d~$6KYC #mIi^IG=ٔ_B"'Ѡ9+dm޼Q(̞q.ؔNv_Z%Gb{5gӸ15ϰǧt6Pz6BFjNɎ2h̞f89 3 j 3x*Y\dr5OlHdeIkqh#hOY[&yp9z%sV :>kuoO˿or9q;@;k{ Qս.ilRi>F}a؇Q8l'49sJvYݮ yo\=e;tG[|r%;.βע>gs~[ʓٻP 6;-2q-;i+exURAwkDa{"m۶%ʟ$9v-ٲvV~Yn/&è h؆"xVKZ9"1Iht -o81S{.K?zںL;x|?m\X= ^%r1 MZO~֒|IRG ΐXzQ!wM\bK4K.y=Pt3rQ4ztT&bt(2ЋNmcAx̭&!d=̀2| Y3D(Qyc79P)* ~3?< --sq?cb^ΧXĽNa} N_tVM=rReH1D UG1Y hgH3_Z =nڇNƉT#0&ofaVix  gZkPj1tz{lY򽚃7Z|y? -f;t6;dnAtap?e_p?Z+I6'Z2k]m -njOC 8hͨ\A \C0rZ:X-g,nHg&^ZgG(|JV9@x*}XsoĖ@&5ꙵ&5 /,6GpEKdP ~d RKAjU=weJA tb.RYKTeYu v|::>v\ 'Őǵtf$Άx'gYUɎEgt}BiI:p{m魂^Ig{|gY:\6t?` =|a2o.WT^w'ߵ? '0m?m̓>KYʆ*7TuvyRn*_~Py(a\ :*K`/3w2u,@Uj>V4K?cyKuIyDQΑcBjX8iڼrW%&Tƍ{q$}?Wrlb]ldɸ5 آ=!7sy_@T5K=էKd i2ƾ\7S}^ijNjmP|5+_@FAeQJ62#ifN<;l+&JٛOˊ*MawbC Cs5fz\ӠujOJO -BW.AdZ1n$J͘*{ -Uo緫ݭdwaԥ #x o+"~?IK8zӑnhb^> [ l!b_-2D;HY$F*D/gwA0y0;V#nad-//`DaM+A΂A -}tꚔPcލcLZʭ `64kpՏʋ`m=0D3cl~s4\őV\oFODZFp@vsPNSLʺ,?Γc`PqTjq:,w/,ְyP f22d!D-g>y)n14뤩ϳUV *5-EMת)̌ lPz.;;b#s}X%$l`^J7Ad7eH?aR3 ~AJ& e,0tŢYc;&3rZfh]\R[ު_jI Cʃ`~o7QCܥxnnƵOl۷82 -`cdaB{ sfhCRZ[F_Jcot$;0# 탤8g9Vbaxdmp Yu^#XK$0Z0ܩISA"A܄}{KKǬO稒Z.!IGɶ"+¾ߝD{m~=GN,qx>U[eS6O}fS>Pe3vHQ VU,(^ -, AU* -۹Ŭ WYu<bAmUfKGۣ&v,Z:$@mVQ gؓyH?7uap8 (Mqfԥ)%{s3W2ElЪ2r5\؍7jeh<ݎdPd"<.0<١ЛA7ϋt#>^XX4Ӟd8mcl:{Vm^2H3 /:S)ʱPgX3P̾>XQ392|L#v*{'XQ -@LIxJx[;RsV.Rc;Kuߜ6ڸ-BJO'м+w݌XjQ,%YgT6;lob귶aoS}z7^. l,쬖w^.{:awR"_7ŝ䭏Ez8`GnFƾt7g!_P/]*Hױ7|Q{P f[=I-O]/[C# <ezKyHdp;,G -Z4Y=kYKt@p7QCrQg5bt*ę{U~> 2*[>‰}vU| OLl3><n泟՚e_-"Qz& A|>LZg-̇#y6˝# -H`ԜBpNl<~ebPa+%SZnO9aOMb:+ .pZ r[JCГf4ف(+zYk\gBo+~do2|Nagvx e -'FB98IF{?Mi4S#ɠASX9} Kc0bXg@.Z^ >'rk|4;h=ܟwմ@z@ڡ_vRGI$51j@!0tFⓌS0C@SREa'Uj\r>~7b969_sUԕlb7'eq"T| -A t8͝:ŭ.'YrהwW}(q<)z~I7}ߠY>-B/l*x{w075Jl,xFN|Lv/_Gi py轇Q'u*; ]O]͓ʠS/.2C񉝱xIN)1EeZޓ,V)f dT"(p8u Kl _ހ7^4ve탶cFo]oa`P0pIgKyCK]Ȃ9Dbd>ѱ@L:bMƞsT]uvznZWTaz6|^`OzTo쩖^$Dj}CFk7w<^XbNmͲΨ}H2 qP_=+k.5Ȫo菿a7}Pϭ?'${WRxW6hʍȠڠuP[@F]I-mm"{Ko^m;eKMy XnT؄._|L΢ls -7g5seK׷J, []6p4zU=M ɑ@\]}ZBDHB<chpeYTS<]tFupLּ=M3٤p[)nU7?I~"}4B^"gb @pmuf&1vup̹1HpzJVZ,9&&ٴfKqVk<%ߕ5ԜI"p&{gMȚp!H#qmB%IRz j W_Pv7e5>Se_@*%<5~?jO-gڍ qӘ֒IF\bRҷy ٤4s`-HpFQE3$w8B ?ђ3E@W'V~H%=/,)T~:I%7)4]^ -f 0Yw=WtGQtll]RÈs{1AS%Nn\M -sj%a]z9Ӧ8W8#Z} YvZd* P.qP=7kz o^(=n+AZӠE_!ᱣq҉!sD{lH#̵Q&Yu5FJ(`h,/ϐυDi$.Ԓ^g3m:g=b[ҳ -01 zSO{ -N]oܣU_6f}K)!4X8E 43T5H9!|5# }w)z0p_N> ;lc$Ħ$^g˱լ/XqygSr=AJSɦa - 3۳N5y܃6+oY5iE8<(Jld8#Aܖq[1,䖛bik4Y{:g4YB,[-c A_KvàEX c-ֵx[$u &nLL7<`RJ$}q 9Bg6z 扼y"M ]>$&B'dEfa)"Q -sHϝIuJ8#6yz7a+ʊl1htlg{!O)ߛm@3eGNW`qF yߙUτPlg89(GlD^NJbGd R"leE^r.FVqqO@Ņ7g:%GW׬97m~>St~_)5cot)j*k=_<1hF% dsv*'a3/,zFRL|:>stream -HtW9;;<{$59"Ɠ9,ɪzj} .@"uoq[/շZ+~|Ķ~~oXB$F{~~b+3`/}!y؅=v߱qqI>1:ߺL'cցmvq*liO.}*+1ᥖL.mX4Z={inHw:%nT|,xbjʰ8tsqk+6Obl\3D]b00# -T 8|}ݾ1۹ -s%X٠ؒz2[sYQ}0>g/"^\" xP#IΉ޽,ȶQ?5`ZlQ`*^/c՘3 aq"wV7$ăITUz0",mb$1ĕ^=#?uMkMCfWFpА&V ݤŞ ȦSܿr딋xcn8S,YU^'4vNKOT"~jB"ha"BIGO["{xX˴jfP~P:IZhE}QM"/95o}ǢpYCE%{h1rVE -"эwJRb<">?Qs:F);H'I ͛)~R\Ǘ h0lqz-x&)l߾d%̶e ;t)=ˀe!ĩu $;e|)h7Bi*%A Ykބ"6Ik__Y5u|N7l ~?cqɃE+Mm)gGzD cQI%_ՑU7q5\K. #'6uJe2r_pOE/8jLg?I…J>xM؟y/ }KTn4|UONJ&xFn;bȬ\߿*ȧ -:#ٓk4 =xG+ZDue!r@..YH˫;yeח`:ZU~bX0r{c({، 7Fz )('@ď+Jsiֿcnk-4>z -lLPuƯq_@NsǢ)6Q'O[itZ#PJAHsyޯ)K?'㈕O.\XThı -R(";_e#5\kR2T"n -+Z,]J6WaLQIgW&bnlL(qvlyO -l&Ɖ DxmŃQ1l -=. h%KC OQz$検ރ }VS#1SN22*N 0r -'6qJ/4ݳHB?FKJ) Z5ۑmͣ抓 0w6*0j&HZ021sDO<~&~/R{K^'\~J@˯ )#O6@d_*)Pae%ֈzBx(Yg,i4- -՜ ƎNZsnZbqKH߆Jh8!GtF'Yyƙ߸V^Ջr -Rt\<Áuǚ MZX-'?iԡX0Y\x}:貪-#f1ϋ+Qag2&b%08x/KsdJF[#ɹ&5*Sh+#Jlwt&Qt ]&#4 C V'0fègE+l)( 񄩪#(cfE`sIc%JW>NO+F2OSsȁi.*>!5Tҋ4Ի_c")ޛ2D|_鰊y)YFe=ᑕ"BP^nJ%o̖}=5 |W9=0v߰Z_u(1kvR۪żD'k軾բɁZW+"z"̄b+{69h,e(zqջeI|GeF?ɥY"bL/}7y=KhP~c5c{o 8"m~z@EE\PC2{eU'H5 2#FעZME\M`puK7xV∇ Ϻ6f"Sq  Nk٢''g}u+&ꂛLx~}ɅcAz(_tNiF`迭NҥnM|M4iEm <j^ؑ5rRV_hKa{Y$^1#\Ą]bwis^!*@a"&9yo\o: ⭭{8o|F CʼnoUN)^n -eعhX:@٣%a4KTdg&+tr`3E wo4FmX["o jm}"ƔRT_ q刣NK,1$T wY* ^YXg8C94G/u2Sc~>z[ZTdht=hMeWrwk'mvweu!Le±8H齋/ -pz~, wEg|qgE3} E7N3Rꘓq/,c+hAr>)ש?N@N3ggu.5oC(\ a<)hQwՅV{}rߺO,2Z^Gl Peԗ&SNT7qTehAdPá -ɸܪA1 *[t=`}")OXRsO\ ӥLĩasdJʝHdQx6jlŝIzUS@d*-O`Icð/\;R.ɩ޸߁0$<@))mf^vV.A+P1n5撾48ׇ*5bfGt;lxb,?cv>];;mY 9U4u;~h¨ᄾu@`f"E: ЫD=yV]Ta nh'Ќqx;%oF -j\RNp'o[,ǴEt~J)*.ьNy -7ȵi\̐%Ab37k'să0y*c8PL@_*<9P1zmguӗԹ{ˏ6SF"<5Rl&6KēVJkv9s[,8VA\$4c8ܭ֠2M3ᚌ\íф.K_ZnC/_N_ڤG^ج oC4);:Bs -J<˭ORІªF4/ɤkT~i`5ߧ#U.z8X5yʆ#?SZP%QS"/p25l -62VI~惍L@<0\\0S! c1]Ha\ɒ?)9$qvW`mD]@Hu<ڐ;kO?)F!&wƬ`* pb;VkV?{Fbu5l+ZՀh*CEdAD%vk ͯp=)N\ĭb0(+0d+; ->O33ubcGDE5T13v}tFKU>@ e>a>^-S JxĎ_x׾59鋂w=/Ƙotܬ;6(,kB?@CQ &Qu)u1%2HÊƩgݤ;|dXET 8x!.1z;' -F{qEN a*=SGrQEF-LsET --i$xǭmc˶ěGO|2wC^LYG=ha p ZlYuYQ[Z=82mJǬr 4whI mЉ9&*($t~m -R ̉ -W!lG[&i9&F$ ˆΚ=) FwЖ |9+X$M_`cG/: "9! [@15  -̽KhAsJzQ[J Eg~:`T3u˪LD yhm̐d%ZZ 'MIݖuxQߚܿìF}@g~Lc **RabO %0<&}=ۿ?jtVFO`Q*%'Q?kĀ -ٜѐR jb C՝$g+$vdۓd,VZԽ(,?'^R[~0=s9kzCйe"@"cs>qq,Tc]i> $[,{Aa5 Ug,ъխP}W1 /Η24r=U&O#|l?0^b: R^98F5N,Ion^JYڭX#Zqoƈti:U445 Y%+yJNI{s_'+>}`Zn;x5zc^6`6ߜFӰ6(z"+]`HJzYql""ρOPi[}ClA+2>oC'Κ>5D}; |lUD?DhsQx>ƍeL\e{hF=+E=3^ 1yNrFa$3Mɇ?k 5DdP( -(A0xZigEkb TRn8% MN8/3107bͷ$%0=b|Q)|0LyԸӡ<S]ӘئPa$nhW) ->9`k*((=kDGU[`WXT^ hoܲ DᲂT([Y M'يo{ō̪"k%-y?P똌mۼdPu{kcQ+xJ1q/2I>)ZqʠW43k( YhM{dgx>NE֪P;QT\J ޞ~BgI2sࠞX'jU2hrUF6']E"Q'cH>X3< k| YOO" ->90juQ.o L\n('i]R"-H#*l~rBVMDžn!-x$>H r;K))VN>p@T*yEf4+*¬ I߸]Z%]$7P -`e()ui5ziCy 죘6MC3)UP"PD٭;xh;E5nB=(%7gIHf eb{k(䭍Y՟?^+E ;;ѤI2o OߋlYz+n57SZNy.IYun;K(yl+2شHID-j/ҩnF]̖ -o"'%4>q]8o28wFE`]ֺ/{Yq"P٣4ZR1:+Me:X,] bp`5ͳQù_#ŸFzskNUk.ۜ2\(|n]Tu1w9[R4<yo|<?Ӭv<-qvCpwyΔH~v=耒9 *}56oP"ҍ.LH ~hDro*D<! y.)N\x#!9Stt ;z{ +.M7yY36ɓU'dQӛQ5p=2{tl@L(e-ÁNnͫ:d -B4DwKKfFwO%PHtmY&(9*>ˈc'Zl S@YIi gY[>{""aOHGʶ6%w-e;MvG#d*q, 3rYsUOqeK>T<ϡZmk@ DF@tMh -Bq V"ێH_ fI!@DfOH4kCrYZ⟞X%5;!ߞ_qP-|]uK'ߘx{g-#ХA hD]Su={(/3)Hwmy1Qȅꪽ_QSC]cSX걡=be>c/A J/noaԾ?/vdhGi8|кZj- 76y+8;Ec-v }#uƣ6g4w梒MP 9IM#kK9]₳&:]+㑆H]&>a.?~iEu04:-:`7A |YVd!0=ϜIz6+~M",x1=sa߿D *ލ@WSuoIirr@\L7+chF鎭B'v^ G?/Fv4t9X i\|ᒮ5$ġUKlU*;>%pq z 2Ѯڷa\cM4GūFi]!2v,XKZo'uQo oxhucLQr}~.H_v5::0':^ب6ܵu=BLQ VRѮʁ)r}[(2 صtߑ.eaOG'x@׹/ lEՂ;$ 3k.bu 5pEz.F ;t/0F[)@BN5J bA,bN-Eھ5<-ŦbuN'B]xC t ߖ$ai_ O4%؛z,j&%:<@1jEYZ񬀥],2Uiz -;E; {ZdCM$XhQ!mtג\_"vtJ'؋P1 Q#0<`.aUTî(zT -Lmz 8D T iUmVԾ^sX"lmvMwY4< I=G2؅Xע C0֊Z!a^[slXL?QiByl_w!(" L%J2ygh*eqDI@u/mnU6a#Zޟ`n ^1#GҔ9سougoS%Mp |RV$w{vm 1 0m%ۻPF5>w2t vբ EQ6kHdorL 27L{9/߁~V>N qDŽ]lm!X%|g.5%1ɹLvmͷJf3۵(N&aȫ"Wj%m$>_oc/)i ֖2zi"ZQxYnMS|р9( +owba[6ˣRHMOB<*9~d?/?=ye_XD{pVz0Ux{\\X]@ٴvM{y\h 4B S]9y:sUH}gC^qxXwʒ#4f^HƉ#i׻WQauwCY 46k+K*_1e8c>BckI> X}dcljRO>a;tLߍe(qr})#\c^V٥H].EmɌQ>`vPw}:(TlR~3S w|am`e_XZSBkQ(&_LD;#W4P*SqQѦF{3 :ɚU䊞y9Tҁb`J䡱e,fM 2)8tԲ.oN?R}}[`Ɂ"SP2ގZ2Ǭt9^SDS$$N. +~5DIټuޔela # %߿p>JQUnEz+㦿aG}8/yӏg\'N|Ыi>ԅ9P]ClC5}J3(|-zʃ >11_C X.!Ebg蚍{*ױkÄvd*s/Xde@m­f[zX|>o `w{X`z4DK#{nzg 8 -$z,iitc0]Z5Mr{Nq m6Ϙie=4w>Flsg5$RfFc̙ȒoH.2'4뒍^=1xwbe5[Vh'ʮt3wE+*:eVkzlzygL@)F SzY]X(Gfmxyo:#T,sԌۮ A;Ln#Ksȅ>)] -m@V$0W捎vYY-RYJ@bxSOù LL<*hn*W1FֲڣFf~}VW-;FNfgI^HcGiVez:] Fs㱫/epr*D%KILi@}#cUh/XM#|El/ol}?Aw#Ye7F.hF`#5F:{RqeqT%rA9@0-sbiы[lÚ@E<>'q jOo^c8>>c:_$0G/3xpaQջçkTE3}3$]:xkk1pByGi"SDύу:#qq\7~hwg.Q/{4+K9[num!Nj $fX-;*^5 FY UK~tzՅA;Y$j"6>kU@ƾ庠h"6ǻRkb `@[g*pW)ڪ',>ȅmwW$w]N~>ixzYజ6G\ayu ^"Ay.Yv[FՕjxϦN&ȱ:Zď4&R*DP*^A-A3@zEsmdh۱~|,vyW[nýKbj*{e`Ў62+]#CO[EGUN`mPpĢ5?`w͂""+kEͣ$/QL{a-9v+- -˝ؔq ư51zΪɑ᩾{2k5t~w=Gۉ-1o[w s ϻsj~ܹBϣyƮ Ic7%^S]K_-DyODXn#_C12 oݥ,)s4{yXbkd%^}}hA˟6Z=7v5Wo^u_Rya*[cV!w{pB!YajWcs2 .0@hjDC׉6$i>"yβMG MHm%kY+U2Fښ&oNH$36cJo̶oi]-ֱ;BM-gN6=S[@*JH {T^hO긾 )Xx 0jAORlGR|j$MǼ0$q惘{]N//1L˥KO -Hu߰A3,g#ϖ`gRJsާ%tn=4fbAcÆz0\Q`XPy y* j\f~\ﲈ($|O9K8U\'^tf -1K*Eg#I3Hk]nu:PU:;pKlƿ?"tڱh :VK6i^f:00wL;o7ՃݨrO -2Au` h^#V({s>.Dh Zl+6+ e40Bc0咀$/ Y9_ -n꜈]}a(͙Åmia!4=>5tLF u}>guh#Հiq['42H/1O|}8A 5ޱA/}M1/B_}h؝M[d$"M6zm_С+ѼMFRYC#:P"mMc6e|A){ ZuZƮ2Mqk5Of 4FP1AZ6 -s`2d; -K,M=:eЍ8za7k&\sO`#jY8$ek0Ƹ@ೕC ;"[7qϳm +Pz?qz0iAgv:+3{4i%AU_Y\#.v.-3eypފe^NOg^\&߈\C&̜+ -(Xړ2K"mp -< b$dY3 % IdN$Tn)u'Qsd OfxI'P͈ *BF+%j;s<)^SiN"KHU+45PDVJoaVw Vz]}QӋ>`h-*ĴK>쭏zkMhs8zD,‘`ʰ}ԀQ+C9uق,0j GS}Q]oHs\7gISO;<~ÎRxR`)ر5?`֗47<' 'hM=hP̩E`|DKLЊ*ۼkiRF`@i WM_̒VlBê.iG;a0-W Ih^JGY㒣`U823de e:J:a!]qy^A]MX~ead3ߨ;/ 7Ԋ2z 9 oTyl m_.5C>}sU 1t5V/ԫi8ьJ5Ffo@2#)Þۗmf1z -Ͽu.`<@k`k6Z$F N}UHt  ,eӂG3.- 9*e,ʶJ66(́166]=CDh9o!ght.LE*7uHX -I0ex@>#*5nUAʐ*T=80Ni '|>__nmZg3GY#`}{Eh2Oy{$ tEV뜰9hZ9rxd86t} J 1sfto3bVѮ7%V清2;֮z܉ -Nl?ӯW@rsb Y{FǤ"t8KjV}3&he`@~CgO- @mqGj=kvd|Xˀq#0%]/lix?R؃߃]̊`wc>,}#p=ё#d=m3;s ~ltYM%̩kwxh}l9+NsCҭ>1{f=rg~4&|rưtGh\0*D <T#w/ ~SSXAE[18uTPb^-M -,淶0FF4#s<Ļ#I_90\`_7v3H_WgP m3L"cȊdavm3kjNT*7N1X櫏~ NyAHHJVI'󭛎Zw/'鿯of6Aza 5Î /遯Brm'v~:`OfEK8Q]lRgݪIbXb)t1 }icqm6F̺>m @->m@jcĤjIVn`{|ϗ=4 O=V}0bקMNwu0^O§̻œ ,aLG"{7\O6g׿?"U ه]cXmݺW7R {8`!5UŠҘ"*hjAx2C5V ª\d>1e$|RX!e%^LB2po7t>&6^q%fO+g)L)~8Eq9$.{fb?naJkBMG3^ʺ+FD5/0 YT%Z=C-n ;|W+QZuL?2r'( ٷ=1:⅘/V~Ľ5ܦH}eDcI Q:2ZPVhPU$mF-qQwL y"Z_fLXM%are) z"f(]c<@X2kњyzdAlҜly3c5#޼SU ^ @j @]m%̸^P蘾AkHZ&sNz/ӳ4)Z۽z}[m%ރQOaL`x9sԕF`Ж !ଢ଼Zs4yF(J266 :f I~Uæs וQDLc+^Z?#C.Xdh=:0 Y3sf%ҫ5 -ʶy+ZWJ&P142*Km[ #^h 3;)5Ab`}.}17: 8*IfV,tKn2bjpypjZ`36S~=eg)s)JkiPk9D<!KJ{QiK=d%6%.J+j݁Vd̠B}ra&bKylRC5̱T9d;}*}(\gmVϤL\p%QU턀:|">8q"~֬.a.TȦ7kQ* +J%D6׷ t.90~b1wҳRm]',L>4_4d׎g1Dnh26ͶVɽkk׼KrDŽR N"Jjn3"Ή]>5q'4}+1&jI_c':bz9J-*kݚ@Z#d<-Fͬl5u5\bXY hvjtd1Lb1-=ǜ !\l7u^ #/AB5.C{Q\ 'F|5Vk/иL&3sGE$ -1uRPȰzA^D#>Jҁ>k22ukxf x #;vZx]0ٚ -`;"4:J6s"V\t[VZ}ZrDw|^! z#oU_R -endstream endobj 24 0 obj <>stream -HtW;h{ z &b=8X1&xH$c?'<%٧ L>V|+ EI\)*}gs:6|nz-42j,U k. *\__Or/13\Gb<0*\_|&v~q@$ ]sGYXQ@ZYu[sz6Ɠ5">ܸ8lד7R^sxKx|)׶mP͞F0Kh]gPܘMhJE.<jsPܲA&3~k".˹f4 aQX&K0K^[JhUې(ƴ)F5}M0,. 3md+@MX%UZi}gpD&ՔVcIX1SfQX2fe 4Yh‹hvAFs:9'1X(ı0[E;݁1 :q`j B#A ,絴5[ˊFdS -tkkeeԑK8id2_ET.S2!w*miKstjy}pxP +-bQSHPn%4hڝm^@oxJ]HtLjPcG8eK[X٢%ՁթI5* K6湳š'= j]ZrgbQYdZE//RSqN`>Bښ7^ۣ9_X3a rhV3t gzLF\mf **LF#H) >al kΝH|(^g0H6 \4ᩊ'rШٷTqGvF#I|aްPLI[#v5;L1UNna{{e+J}ôo]ކlgW$/[K3VVm~YYIYf?gJ>mmI_5_2[18=8wX~|_6|ck˯[{뭊B\+;0k4 yu/,+֧-`<8;M,VIѽHSɻF*'V5jy1L@x'. ݤ'hu28ԔZ^n/j g4"=Nnzr!)a4 -@Vpud岢٨G+t.*L_c_9 !%1q=u((Jek9|/{Qsp -8Dv\.ɨa/W\Tg1/NQSv e_x {؅Q:dv ރyg3eKQ7thN4i$Niojx+[Ҝoeu89#_syF 3.izc%>ᴞ:h!`},'zl -Jg\@N rbdpHAb ͎8|U='YbFU8n"x8>yg䂌ͭSo x7ݚ<~󆏲.UP(H-@ڰw'e,H|, j WuL{]ٕ!NMoB$ҊCfT -D@מ,$eU[:,*cGԸukT ߾Cx{cXckҨ6)qn2c=]>yhh.d}U;47U~ZdgLw5Pk>PgmyW8w / ymߺ[f%1]wGDjհjfǶZd`Uƶ"p43W&Z%R7\A<_eEdKTT[xb̘Q:2l<u~q#ΑRqaRhRM3S3h -}+Y87>B |ܙ#{k\p(L36Ze -;è$c$.,g `~rACVXH*%4<5zo)ۑP8V2jhJf0:uznأ>d7 A\ ~msfǵǝ6 bdA},bw.a%LY \xa#1 p`dtSm̘cIr $U{$I&]ڽ=s.Rj]Q!(*˅͍K#mr  0?ĮuC;N;[6-wֽeZown YcsHna@4K6+f'!Jy*ӍV&*Vz$ -txFC69+_LQĐa&\ך>عemZ)s\4-4ѕX[^vfֳ|?tlGsbwOfM-ӻVAK);6稯ls죏gTO`3vD4'L׈ s=hORxl_F_FIQ9(%cI&$0 "Hc_0q/Z&ce:cԍys"`ѯ_ѐϴ^+%C#c+Lh%Ki׃RFA"|챉On呥 {B:;@GMb ҙF"Brk-6oE/ExGC0Y 3wN!M-4tP3A%C3>0`(` .=96*o# Zc\jK5FDtO|jҹ 9 {鏜A?{ҋen-R=‰ᑜ[aY Kl͓!< xHs Ps\,gߴ"v85c_zy]eJXCacE+GFE$}T<*E@ךkwMWM[{7i9>mZ&pb'@|m-N4%E62gLpI KǔRT $"1bP*ufICL{wyZSܲjNI,74tqk>1үbJp7 -;TXVp|f.݂)w̮Y VhM(+[w)mdm]3°1ThF;O.G1u$[*JݱG2~)!vi4)=HM(݊.}k Dldk*{S*jIГcW!_Swfɽہ5ce#{&~ecI]Y}=55\AVd{vkZ_m7dxm_OXLbt\J _'vށ]_! -! ]݁UzzHj d-a$k<=@-6m46Sn237UsSuT[n.^eNy_Gi$۹q;vyOnTقt`ՅL=QƊPo[ѹ@򐉀Ow+qUʉps;vw3TR"H4v9\RLA K~eA@z=WE=FI<5taJ_6R=^QmӲb"'~UP$)gx"$_ ;[T}a;,( ʭ+{U_|˔$IAs%߿$_P`5gXֳsEcƏe"鶰xrkrxA({9m[ I9^㜚J3vf^vݖV;b%̝%_0l?^Q7og Ћ2.젇3l>`J.s -/6(o :hCB(t!n`$Xc1u=@c,i~)d4 -Fh{'>0HNŃ'`9L 4i [. ylC -MgXYNSxQƇ7Q4QEC$O _5g@r};,d/올 f%-kt5sR+Gl}@(?CYS,s52ߪy\Mw&nw Ir( -&c V~RG3QlV'ԺxImĎ{>1Y=gG-jX<2{{1&3SjI*:=j+@܁N|eB`YEhHܚZYQ|PBR|!<;n9OM?P:Bv7)h;l^)Gx4^ȹw(n/Reر3M?Vt19mFz94* -c+nc 1fvcL}|3L[o{4k1h)Ac'vL ؉ sLvosLcH{9>AcB'Z}昚_Ԙ9 ϞcV0s%= 9#kϲU__ݽNͻWjb$-mG{ nϸ;>}B&tPQcyuf!*mzaKx֍lmLlzmqXUm#[ٲ7u2Qim"b3d1D)33X,.G#M 8UO -6x:5+^"0xh\CF:"b{ɏ,.;Z*3+,͑’y:h(اF@uۚ -mfUӌi&+.5jL@GF9U}NZ(ʾQSq" klu%.f@hk)z():`-_Xh$)e@Ly_6)O< -jY*6$@'c呶,#}d?J /5`姒p2 щ6zЁ@=o{`rvC[QV@4>vD -ar(cءDX\e3́V#بXckQ˾ѡ@ʏ73= {(5@PHҳY֣Ǎk5!X9c+$!@AWW}/瞿"]dM0ok'rS9 ~DQyW <G& 0ZBQ) G fH3Vr/0nb,bRښ@u#eʵ!T}l!ؕ@0V Hւ\3ϸzύz(]R$$^GBf 5.Iudn\b{i<Б(Q?} @fd ĕ*0֒ -2:jNĔ X#䑬7H<5F@YmNʪm'dV2;deY]e}>&qMmcG5 1ͭK ^*= !< -%rIF.@a3, 8UO -6\Mb lD,?U\ Eo -Y* p`7G1zHV/4!4%n(!?(wVhz*Ǣ1 м<9^ZC;ȹ -IDU-ժo44DU=+n:P h9mK-7k͛=6byG}Vh@*$m]UM @>HԳ2+"̳Eޝ,Ꜣ*zrP1F@9è~"Aa-@%%[olۿ]s ؁ (m%G_9p$EQc^ސg#*h`-v&%S$-IEډrbg'(`Jq@2|ԊR7[jQ/ߘE|D6R#^g!ȄAl/u )"yNvCvUb)c S),^bpfshp,4h{ ʇ){ں<'Qh^j5 -Ǩ&¿Cx>?2$FR:XMR7xz࿭A/r5a DUi &35 } $O@CvJ́"f&}$ 4c:yD?նjڽ@#с`.@̱>.?@ nМ! Oz Bv ri֪ipR.MvuD}ReU.@X#? % .wL6-YHs~M\怔nT<.:tYsovBCt_TAg(A@ͧBA*up? 5}Η?x.?8rTevp9ftpR{JU<AO?B'oAsUew:.mفwQ05#M2W )#@'`D@=[,6;'prCc,.{[ "z?˨AO6_`λ؟:#wwn4'/(:xp V4ŔoHߘ("*Dz] `>;%$MI6B̭5h"T, ӍH}(MZU.X17Biݖq+NÔΎ܋} cŮSTCL;yPύ=[v'D_1^Z[@RymW( m>(9x٤p"UyD z -H\9չp_=cQRک5٭sYYG5G![! 4bYOٮsYTkbh|lAnJ#| %y>SDpG'2-\eHpa^SF3cRqkR?-3A.4D1gB}ډTJh:hodmȌ [ˌ1Jkң,fJ=ZY^P_ua ͚CFYE6W'S!WwV-R[hyfoѪr܈##΁gG -FJ!Ա-_.3{.0aw)GAfZGsY2b F_+eiNA1ЎF3_~rЄUY|jUOQOhQwk{;E?SQIrPDc NMb̮`bR@!4plJ@m;R R]v:J{Z ӃkUlo)G12|e A Avc 6@w򎀉y PMȇ#~OlgC6p$".܆!ChİE_VN :€ >mx?(@9Օ?+Ms~iQEeŒR]9o4, |BHG@uͬ"ŏ_5G"_j{lRV0RU()Uol9[9A'Ho0R@aH~vx΍dE%U[5ѧ<߻ap7v\NJLy~$eǹlbOiw= -a oD:}N bͯzJw,Pr톕\풟գ`!^ Il>EUM`)P)0UlH^o#/y.DZ{.{/Ҫ"r=Hjv&E֔$RrʪA;Gj|#\gstO@`MD*2E"QʶV5K/`9*VFWD]upaO$yҋ]pjW#lGTohowh̙ՖT$ģ79AjW'>ލz`S+])`_o%Vσ~T7GwY'Gm0鞫|sRO`$ϤX/xyY >+1z:'0KFV)dBkFSk-.kL JUnh -'ptlwmUSk3&3yAH5qȪmk3صN>nܔ6U"^SVlIye<&]2BwϱNjH+d]:r(Qi%!Ghȑ$0T $ZmUxQ~ySW@(һetS^&9 7>ʨA=/CAΜ:?!Jd~ k4I#f>V 9bYI'{= 9gރ4)&u*= -SH~7ʧj."95eFzYw -Bbj -i -}}>4y7fvrB[?.(Q@_*]_}xq_eJ>1GmBL{aٸHdWG\Eqfq*ֳ¹j†}Zc*ꃫANˬex{TuM{GI;\?ۿE} j4O8:YCBY 6w)x:DǸ7:_??®ȏH=@j[ 0м?jh(U=5+ȪQ4sefb*ۏA!qSvbTTKdxK?*d0lJe@{ ,x@KkH|(̔_Bύ{岠^óS\5{r p'zh[z.C;QnP0]PvDbK`5>Le_D)8W7~_CL6/Xi=x0bwAKI*M@t vlOhk6E[̅~~OhP&rG -vxYC9G(:0ƌڹ': -^I=4@Σ FEٷX4Կ 胶ymg)V"iEh.GE -J_w;Cq1)WY';*߁|~Q^m -j38La!'Y+ e1Q%B"h!#gɛn|j\/=6)0Brh[`olƸ*9"aI}Z-Rdg 9jGm]*MˆvQm% =J{گ[/;TP. -e(j1#  -F4h& gwhr - H Y4@pP̊7)jӗ@Drh@ HJx4/$0 ja^~ -2F?}'2ic9 Qc2EFyB;I+X^]Z҅g{j3&eIWD{4 [*yl@#]鋭!4oQ(4fkY  l#=@e0mҞnv)^T-eY\arY|JZ$ݎyb ޾ue{ 6v""M베@n `" ^5I;zP1i͔e"#_Ȳnp'uv@=Z0 ^p/ Cjv(cWùWU^꽣4%Ҭشc}\ygоǭbY[sg OjI0Lk4SR5lW"~T_{6>lA't=&lHC7:gL `kdL*u8<ŐCS#UD@8-1)iBq }VW"I:C(\ۭޏY{pܲgOΦWmPj|aI"ӒL{+1`IzQ 65e)U$8ҟ!XӮUy><ڰgמ++?X}:soW<; 8f;{[otyQj&Z" 9grÓ/K$0ڂU -a.Aqܱch{Ѭ hw'|k%cK    -;Zh}OAQx[JH),Y܇V52M?Lt"R::J^nrcV\p?Kcugl)0cUYH]~1fC*DZ-JԠ1ߓrFY^\6)AWu ) @6e>]_lגXj"Qr;ừj(dA^`*;0M:JoU/ToR9wː~QhJUFaES."YC -4E_,%jFT ]"s'cx!㦦o`J!LZG49'.MHvkae =4Fm =Eذjrb.`l-A:7ԎR5H9_w'pF(Q#7Ƌϰx]l|͋d 1ߦAc"X V>YdBffC"F Q={2l7T6R9|ƎʾC;Oqi$Β.7$_1PSs!EAOtOc\ODXU!YR^PkXu'3\TjLbpX K7̨Y꣕,5oW t! S/#(]&rʰDZ}WsS1Kپ -Qx-m/sSdSgyժ[^W]^UXұ65[&ӏ5 :#d}CYl_ FBH:rB! Ydm.)1̲S`;\.Y>Xb8KuTڊ4ǪO1S Am0A|iˡYb5AG::ۉe V 5ڌ!hyz -v(r5nKDyJ3]>睼QM(=y!|U57ҁE]]:g?y1Ԟ_`8$b'ȅNdL5-INr+Է"p`ρ`^%;4G7!};JbhI9veZic񠢹 a_l߉ I^OYjB)Gr#k?JKp4Ft`-f )E1T%>;y7>?_ܘn{>=RZv7&m&k9&l}+][ Bm(#/XdEP C:xCAԕ6Dv6nOs!RJ$ -$1UU[r~<۹>NOd1.b$ͮtP.z1.7+{ڪ֖b7-J?Yy̰1DKA(K,TʕK3<, -Yak/_;쏖O#i6DYHx|m#G>{t?Nܺ`յ ծdnvr$nn7 sfήJnx4xs7`I3P|]9m2SHעWpJӺZCv'wuY& I\? Y(cxhJ|q̎,/JjR -tUl~4lB秱]UHS0ӝ_ jta2yjWzBسiB֠!>Մ[/C8+ˎ p2e^'s0qG_7F[0ƟN@hB^`x^PS:~̓ 0ICs'eo+bdU+6B9ªZ w'N ]):URidj.Xյ%ƚ2fU6ŨSIԍ "[IR˧ ۟?OF֘d'<3Ir=4uB-t?@wTW.|2/\SS8HSBQ%. "rnHHl̒dbp Oz5ѯPCHwc1MI2\vt`$H!S b1\}tep)y"J_4΄^7-aH>앙R9as"z]ZHՄLLRdg -Qsx1؍\RPfU -Aڑ\FQo|Mꃁ -#k1NY_̭ B&Uʄ,?,c*v08&]5^>4^zJSyi1jPO|q2Eݨ®d0S+=߇sd4J\I~Y4~6tC ؤEW z12жmW(e뱇~c[YG-L. wHwbskUZuVnlD`}NS2ar>󅞋E!=)QMa= -ޖU"R!,ødNtpz#vy"A~.0P4IRedME~g쟤[oNq`V"Mm =c٭rnvTfHup4M:eE>s/ WGvM~ʿn]t|)<\F!窙HD]c{J1B+u%o _Cz9YPk,eV'/؈:d/ MAbw6sjd(2 dsq.n sP`=MK'Z/4,1Fɰ4)?CՉ+4: @ncj΅(ҵ0j+ձ!rˌFjp\q*kmzrq9rۓ]kxVN -w;oP(xl/47rPX1hM4ԫ.cEzMS)%ilvw|ˆͺMj=u2"NM -G`0+1W(Dؗa4'_3˫_[2Z,ʢ# ep)MYv@ʫf4aYcOIJt!Ϭ˪H@+m ]ITK["h`0ܢdΈٱ !ʳZT'P.zh)|p9ތބ05:lb|GȠ,wQ/:{ -JHSv aI=p2ɂ%p,{7Qp/c_LlZԗeEjWEaTom86yW0:7 {2]r)*ʭ,T)b̫$(kY$ӯ)BiZJf=Tkv%Y:bT?\4cC5|+B$1$޻0n|r_ -us{%ws^oI']˂'_wpl(ӝ|;|?u#z-_kC`L\O -yW#x798?O8͵h - ercQO `)Kd=@[ܕ:4=EH5wL!5WWT"DJ" Ac1fo,^u**!فz5p2!G>a(6ᅌNecc*ٺ"͔{} \aBV+ǵH+@yZJXP5#i @+?~!vuV%PcHj3}c6d\fb .: -`Kkno7״Ymڲ]RX¢Q B_Leu1.8UZt?嶉1烪WW=ܚX4 -6'M!W"4 J+ρD6"¹#] -.H@,nE2x{W |QH_鋁VaF:v}1DT*=k1ѡ|~"QW9\`(Q%(@ǼرŖ3:ǧl}rx\Oͫ>]C::/q0.j_gڸg.C!r.9; Pu4yB e[ -65Q@ˬda}2Nʵmد2iD T>e2{e>nI*z+l${(N"C:w˰ʎ|dVΉtN;~HNJMz|ڟY1ut;Cs tDi4 ւūwg=8"M1.[(lw=\q}&f!ܷiRs7BR1'-Rb[L>.k/uƒ_c,_`Y1ZQ (9H\x95/>,R.G B.TܒBylYFx)hUh}L~[5A,$U",DIS=mt`d?Z|ilRZu._/V?_|9 wdijCE -wzI -h ^ceQZʍ*4t.8ݒ8RM}.IM[Usc@qgcHfR asg(7fl$'lh?V( j0i7}"eM~m-uòwmhӇsOE Q]bиxNmBrG?f3kؓ |vYv!ṚW[aLF5*dY'C|b;(t,VZɽw# ^Qzoۦݕ 59/f粔g"] w#uLj ɍcI{.3m6|mRTz2F3WFz)QR9ߙwV?i%K]ŧW_#i#Ywq l@|V2_߁3Wj KH8>_?lt).@A;L}Ͽ]7VX){7a[NksD='FC|Wt;oV] >".Uu7˺dng"Gɂ7&Vl+3hqY -CWp02 *?œz܅`B6!ev]2SMA*.k#UNKPㅡ;˸>1R>h>-႐cCF\2%HWC%spJ (x5qd& uhP2G</[;/}o<`'U6s_$}!bKaXH]ړvdklm6(+yW<yT o2@(Xɨjmgfy}hrKFǼյ\r39w_ҷ':@j1cBbZ=Z#ebuZ4eq񔞝ݜ%GL|޸T[2NwەAg{k?F?ȸwz$4Y4ٖl5Ca"lldp*T`M`})|z:ٺ,]r[a̺:ˠ}׫45spLA ٸ:}8ӥ#%\o&:GPI ҁ {#F,sk֢ȅz#SaN簽/4p -sUS xx_Nu=UW-y77Oz4ʏulul!es 3@2DZ9'49kplC܁ñitl@FV HñXke.!k܎ j1ۨ[m؀ILб9rw.p;8ʲ”YDz9Xhl; F_Xxqls8cdV˱JWh4.c*CVñyH؀764lh\a#ǰA6?4 0ra<,U"6"x66gۯyZhm<">X5}~͋?SdѯkJQ6CHQ{Z`ɉ횃?ˮym׼îW# [<ػ?Y>stream -Htnenh;+ vހ[ἿkJ^ЍO,ꯅ^ofƾ珄:p2Ehŗی{4YĐBc-emYEh1jˊhVn$?v±SviCVߵ EȀlp IE -Yϛv'^/i;4nH Z}api6Bu\c7nOe*2^Ex|dQs*DQyV_\!sIR;e{vn,64?3nݱb6fÔ!H0TtoWI,U^EFVĭnAo&0Z$+XB7d@DcȡNMX$T955SyV^>vPle:.Ce[掂*(Jk]a1z -1T\&͋(w9\T $!J-֪U~I#"\s.:s -YgJ|uA0[7QS;ãtN` -Q8O-GK&o22qc :C何@2˵B D/iy# ڲikj՞\d#T{ I˘O! v{ue$V -r\3-p_^iOGOڐ4Cf?%_W?+J{kIdbTE1bl qIIdgK<#=u]]_gqK=;Q?~ÖmD.=[˛-~9Wv7|:/{>r)3uߛIVdqț$M( Lݩ _m. d&w"x1n%٬c C zKB1<#jl*5ؖEC=MDvo{N٩ډ1ݦ-㛱Hԅၑo6`>U}֞YU:8 -W>7T-:\9+D)i!k:8_)#UE`gH4$F(R'KOENI# DB|eX0m!Qѡ9)eHvmƠv0>׫=O/? -]n4\6G]9}f1'D ^0L^߅,Ȓ5Ԫ b:t3.S%B1Ѥj |s `JC4L2e)7RlXkJrJ=O<cڝJ 1 a:` nGG [_~{H=-0GE':&M!nރs阜MqE4}@ubԀ&kry*շm!* saZ+bm`o_w(JEa/:hU=Ə%@wp߿79Rqvz,TvARE3cHࣻ73NGN;e3ZVdg%aO)ž\g5m9עnc|s<`CX egNv=;o9k`bQOfi' 4XI.h!@ڂq OFFs횞#].bgz)!4^1WR -< M~ﭨ_9G4ˎ}]l*k3spcgapj,=F^F@`eW+L))C1}0>m d<'S-ħ[Ə/juFaF QLzOh}|*j1ɹos-q<"W;',%ązqj;IsO 1A{+T%F׶Z=nC&pFX mR4qQl}]iGQlqjEޜZW9GůMd='ԏh}UIys. y,iA 8PaH$14ACOw3ّUIwBB7͙yOҩ^@0 ]F -"0tIkFϧƟk,gti;Xҡp9VunHl 6K]8z$1K?k׳-C툨u '\#ZY c}~%C%#CY괐̳!I>fIKbeW: gf=m荴>I癕D.ϰaƛM7Mf*^C3ת749ڀ븮Wל%Rβٍ0g]Wl`4\qb[ZzΎ -F%RSs%u%@smcO -oK!SH%frngeQb |&3V3q5[$i$g#8q^ \u0q{qhvpm/mE"NZd!HL.QQ-UCUDfmNk.w$%@erP3ƥ-D0Cݏ7~fJ3CErJ~efxܸ]@IY3(e-zRA>.Wc=IJVXWʓhNmHx^2]c$9r='=:Baf!?zƃy u!Xcԭ~;Wq)_o(>ɣP?_(J h9gV,w%5ktF.KR;+Ko}!?xEm ~ב@}a4?T.2|5Ez}=-S y\de>HCWuTJot`M ݠ{\.Nw{`Z ԌS9HLh[ۘ{J~aLdKn'}C@M ȴɧ:ξeJv$UL(KčaHx^̢{4cy|R( ;Ȱ15kO?:ÓoE .s)(ά>I')UZN6(k^C\% -@3">qnތ`6iv}@&au+٦XbqdlU,bH]鴦& y]⚁)'1L٬ (Ķ漑GM#ѡT (ݖW]c׋>.!{s;oC7pD |/6K pX4'MjR01 -,zxZ+25gH,$6ˀ`Q ?"021^.Njz hw o2 ) Y;Kx<(=ZK$[6.jQ?J:'7^#`DjQ%]2>!'͔08ݶ.:zܼ\|ˌvvZVgTsBXן/<-`sa_ʮklW]4(VIǠjsh^)!HOm]G -SϿ:*Ì -2cY4.>׮bcj!|HL(HMCaߐem^)eVS5L9)KtO*YbR&$[6ٹ Ο[Szfa=CSs;"΍9L-K5KEuVoI=Jkg JuwK)(B~>1 ch"u*O0gvaq]mٙj'i{XѝYсqVU]Do#-dC2m;/@j9/!+'bC9tМd.7Wb_OL&g/V>cmT"]` Ơ -iQEZ㎋@릤KKz׈&l:=Y)F,Y+Ȟƺ՟vDJyIoZGW[1Y7=MW߫N9 Bwx ]mQꉬzb9rm ؂weѱӭhѨ75lMHژMY*H!oƉ˨@Rh?7N[@˺^aξ %|  Hun0t%6LWEj};ѣ&""0/u5i;~?v;dQTj^Ƈ2I.rn~iae*pf/qx.C*W:y_lDgoWD)xP^/5sjz`_#v6ag-0"hLtlQʓ0C%hDPZ8{ j\JE| ߢR}bZ s֖^-E(+ډ&bU Y~bU-2Ƀ>ɑऩYfXjpp#k..W5" "SV821ܓnNDdw⧍M.|>!n[Cmk!N*~rXR Co3gҩۘ3,L_][Y5y/FD$ t.S >dSA i'TţН~խa`5*TMk*'sȄ{&2JJv zc_mFZ:)_f^+iĪfߑnIL#>F=dZiU4֌zKDs%b,Y*},;  hz]^{P xLA\U,ZaB^'kwjޣx{׹6c<~he[x *+GA^妳TLG,O/DrzwO҈k‹GYU`1Fl\9ߑ$*Ojv1~$b#\_\ΰOXjSD$]ֺݣuWb0n@</3T]o%&[ SνĬw>$NǪ*҆RV5l[4MZ]ƴ8x$\jk* }b9Ncs/-Wwk `6x3nMPv_]"K@\04)Qg#PxJ?ҍZ#]G7h䒝,E -ns^ojT:aK.ih{ůK??XhܸgwA7LP|OCp#Hu/m:}X~-d`{LD /XDfDQB2 060$'`񰴀?ŷIfh/$6V.殣`lAg_ Qa"Vװb 4r# c<.!U7#jDz~p֠p_A1}jgv)l  {0& B 3lL(eiL!r aqK1aku5Fܢ]F0q5UΫC 7Y.22jLk->5NAG;(wԳ3z }$MGT!I()!J,S)g uߴeP[|[M,d].bxR~PZrnVEvOpYE8A0d()ۺE!)r>O\v΍+EYiJz em-O_<-02,U2yWUcb-"}IK K,<4.PDŽq_`;,0]˒@lwso - Jk$bh`fQp;q -ui{ e5TmO6*6 D (1^mNY]%hwcʱ߯ vUt< $QY>2C֘3ܘ1O )s*NpP;>.IDh'e>+v-뤘d:zvH49͡=y- !ٮ.-DOx!o -SrTe/Etg7~ƞrךu\E|#3X6O  r3baCҪme'2ר/$7NcDgp9&@pnY2lvزNZW1]-DUxꡏy:FVF|o%7vTjtJrX6pplQԶG.˦0Ԉ/aut&0EܘS -zr+cXu$$ׯ - ">I)7rm| 9+|,+Cl0q`BzY挜 9lݟːi -?Ƒ P -MYYH\p/zKTxemV)6Wk]=7Bɾkq -;hYFUTjl^H{htΡ_ʷVkX@u9 dict_٬My1 %'J eWv 0x̱D&?<*om&27%(fS . `O$UZڢ|I_]Ca4o~+L.OCa]aR 5O0mKapϜ -sq-Tt~( 0ʩ0gPa(Eҩ0ZY!? w_05p8\JIiO^p@V5n'8ӖMtYïg> `ډO0`A Evg=iAs|$д^@TPee qM3эɇkPxY>nGQp,%K4=>u%p &NWp!72- 5"|9h0r;H:Y ZOGpPKٔ -dP5վ'³z-25,}#4XW7|O#9K @q4{' - H;A7C`Q 3ÇÛqpy;σ'(˘6񬦣縺eAP;<ٲGaؚRjU?h u ύ^F'Gc_ɑ>=yL'wsa]$E'e2!cUHraa+.Ë4h'IƵ,u #ym<>Th)~x sX 샵zF.b -^bÖ(q5}~[n~!Awh}YKcJutsЋYѫL*ی'*qGF? ðbMQ* \fy=]` QvH:CFO:7Dlzզ9znhV5;*W$mpd/OH\pLs Rg3bPUE=ه+f"5%\Y6xIm_ܯvӦ=[Ȅ_ӓ^ikSʬ K4 -xO"TieYuu*9yVQum$k&gB +)YR{ʡM ~,a8יִaXRk^:BKZ)[8*-Smk/D7N+ߖ!LsWu˚պ7 gh+W'b^]#i[nM -?m@RM 4#Wzu6*wkɘ*}OF `n:, Ysu3.^Nk|J4l&bCŘF^@*MJOu|~?[eQjFxZG}[zf|>#ڎ@XfB{!x^Oe7@ȮbU76bc)]TDp:)891Il [ qn[~t$S*v8rjMmEH-e@-??ciJ10l] u -w䗘"Җ^QopjLP%j5-q^`lMKb Ofzc7|w9 emj.O~?_}.T >vq)~qj!ЮZPHu9>A{{|:oP~~݌) v޵6?8b`i\CDO*՛=@(Y2(DYn|6OEHK=SF~0">$6M>Gǧb ю0N@#{_`PE$-j~2K4<ފrq)DMxob3lp6l`I̠åצ`jz?ծ\ǎw+U~op6I[˥6!F99پV[A}4;{ [BNHhʄ͏4 ް}je#SX֎ "khi9yR-1 cl gخqrl:vӃ5*̓R -S7ts#UEd- ZN湬]e{:bo96=Hŵf3Y=9Em>$nۧeЩW tt%ԅfuj̪4c\oy, R$ 6*k%Ydțm~HHاgϽ{B!1Y=Z_}ײa\XHaìIN:GNU7HLLhTuvӿi.Jjې\Srt.xUf^Bq@G/H mO @ =^FD1}s@\=JD@uKt -I^@fO|=I7\A z  pzAj&0arz/BR-3+T^u ,u̓@LO>ʸ5/hНc#Z"a||TO^)9r9xd&+]~nFPHFr5}kYk{wi9Y4lՓ:[9DV"s?'x[]!^SzFv.1G@}2ffbվ,AAd\j}Ç +|3DV Ζwxȁ8'ٺ5;A9+zKam(k٨qfj׺=K܅!ړfPX+jlRjYk9PnN޴qZ[{DD rw%u[$s< -Ndf)bUu:QK'{$nz ~늩ϭp-$ ~]>vQwpiv$}ϕk}uwI >W>_bT'v}Bou:E馺^'ZvWHQIFD}siXCh..+U A$c2!CSӻ˓ZRx^nEK鰲m`?YB{7,Ӫ |ߺ#NFKtd$hmֈӮsIN>(IoJE`:!usb1U stα^խ"{H<58; ܨiR^<{71a/Y|Р Ӧ^ˇ4 O-! NogD3( 8͐ gQe`k_p SHAOp \@I`>V - Dj"ّ_E`sXRi@, E@yIX6Ջ6r\i -;D׶V 8(x'#s.RWq O)1e^o;zju0 40e!0"wj.M)UY% A\w#޹ Nf7?#hkl>[3g[D#;O/Ai:И?|>? P(;0eJkW2?X֩lιMեߺ{[=Q#cj>UWv: -bl<쏌`QAbV:B௫Hsv=^|SsTzG|GE 8[9T3CCh9b}NTNDˮELo.a;>j# u{{}볉 -cj%a=qgxn>-h5s7j|ldw -$ F~(Z]ޗ8&J n\_W8=gUF%=U.*)a=c%Z?yыqXes{|j\RmWgYҋfҝS; {Ӊ_s184mGP^ [2sǜ}X2W_;'4ࢇψClJk\6J;zX)9H 8z.zA3,7ƿb3Jstu;0JB[dU~p65٨qދuY'XMMs3AI18pJ+EcY$S5eL ~)G!=(|Fo̽?F`UO%1@y\Q#yu&Elg[8Us͍iKlJWCQb,T nѓLO! k,] O^Q#_QK-sc{7ynB[dHYnLvuW$D[\"ڈekф߻Ikr1g~;G0 ViY --lWJbi<9&vIvµ#՚[㎴tl;*V;p1"IvXjk`]zqyY*{x-+ԙZ}#(^-+xgUFԥډ<ڼ+⁜Y1+7^9ֿ5wj{bZKE-Oܢ@o-Yk7f!J=c-< -j ljKI\xZg&UJL(R9w@CereTkr,rj=fEB.^ָeXiZnpUIosUn?_vlhxB14!A;\LH4I3Bwl)1~;O }DNlz4 d ~̍nr pg_j}{dw?S"6' x6&7SǢ0 rRMI\c>'!6? ڭ c}ɨC*@OuÔ]<ü\p_-"wDH1^Y -ٴ%EH*m$&egWbv#~"%XhYVJD踑j!_`ϞQg|kz+;`ͥ@,IHlI4bbۉ5Fp|tH^0V+遬1Ėu4c3m1J-r@*7AF Y<؃}E&)OfpA* sI1јT_[o" ]ܕ|GZ9J2 =ؕR̠J[CHb6g!E{Yǘx?X*/N呔Xgg:6jiKcnTkuj}1kMz2>>Aw\u99W<{P/*e ?3v[!Yh+CRh"D UrdQ/tjϫvr%PzՕ{=ܩjz.'hZL3GjcV0ߋ>b=1-@>ʐ n8NY¯|$|Q.V;}j,B6`{6հ-:!a -iT@jz&Ш'#Dn3epI{fH14Q._ v\8QO1=,OAk2o,oZt<'=@;u%+2R>KTA0>:{u /].` $>o偦LI -c]tNh<$w$+( -/lܴCFy -w"5;3~4d0CSPhҸX}iOy`OZ4dCp(`J1J/1T&r=[XɲRQuM</^Qv_zrM7`DȲzf'c=Ev,݈ z*ug՝ڔUhhG(/wIn -ʆvFƛNn - >dk\.)9?&qYfZ~PIӗ EL͐Rri8x:.Vv=Z(}\8/h*m_M!Zz)Y<{ZQ?qRq5{Ĩ 5GGU/YPdz-yQ9f'Ji?'eٱϷjXVM|Ϋ~4#(U)k(Y-,Αf80ƯP65)fe|UP2di0xFyS&P=Kb]g[VJvVee jWՔX΍Ԟs&t;pDoct8-1'gMɯgRNIAjO3ԁcӱHf`w3uhYMa0uw9զ ?Ϊfoi!ؒ*4*/X2P4GMC`K%sDK]ߌqtUy+42NA!{xs߈102CSa@HNM ndFHKcRq 'j,{c&׎ ?{_x;oEq᧢yt'*dֺW͜⠯Wfe3E+vg8ym[jrտ'ȋB(exQZg -7,eeջ0{EFd9ѫ/K6agX1f5PŌE$Z֭͟{e)1^$%uG*aa\veM(%曆³ЇCoIu[ܸE0od#RL#:,j{}P5I VKh~_n9R<:x8 #xg]P0 V iS.(7⓹+jւ!B\snog:E' -WTMԷB #1qXd8".P:̔UA֐eƖO( Ei?2QJA(oQL0ȊKy9`7Bc𥳐+-[tR=RDWo(m?`6ab -q髼6 -(NAX/L7WV?L@33U>J_~6s7[yC'{C7:{Ō -%1fs_Ӳ7KӑL|" -O,?E/vd,r"0+k/CA%X(a .Ξ<{N^f!:s)U,GTmHSS-eϟ5\#tY|)Sufi Z/[Dt`%(&ԗx߉:EtU#KW/zQwӹAEL#xɒl>+%F#M(ˁJWÊom5k)bO!DEieF&Qf|CUTсJk/ڧIkmք˼xi׬ʎ>ƶL͑]zڡ0ITWmVҀ}á'^٣[>":ELؼ[?DVl+"&2<4xkv {`] "6C,f3FI0a/_I:,لV6/"+h ݑ.'{O 6uIP$u-(n)nܽ=:!ROl]vgn xa7*nJ9&=R7nLx[cF !ENV@0SS9'á[m6ZnU6t3h=|Ir%! D#Q -~T{T|rt/%uޠ{D/7t/=m,nh7uGx]n{ߔ8пn~boDjs h;߈wՖlvKБwX -]QBFy3 ۵|wڝaD+}s Z7{C=Mboj^'{KE7n2<} 7t[?Ӕn^ bMCw2% ;("nw%Vxy0<;C)CI};oPs{QI؇Տ0ߌ͟M|.E$ǒlN}IwSK ~! CT0WZ|21Nr:Ep\ev:6{-辠#Tk jUhTÇh#K57e{:5 DTe-& (29LW9Z -endstream endobj 26 0 obj <>stream -HtW% vp!8԰'7=Y⴨Cp5քl^@ap@1d1_CfDl85WP@@?~`, v`sf8VIXuƝohj+;zPzZo#7_HRֺ*4(dMjMh[ -Bc0=#cTh#̓iWKYJ=-Dq h`_pj:)' #/  |[1(x! 3=.c"L мj JHʋD TQp7A|MZ)P7ǿ?PD1Z%ꂼrEUY +'TVqR@*<^5cJRffQWiK7~ Y9nChu-BOxcGݟ<0Nro&QBYQ3w1@^V $+G%. |<~Oc -pDJz=Pps*K]@,4L*ukU*P)ׄݑ^wz eNLlrNm.䙊? 쳜FF?떯^>4~ ~{'Ffa|zdo!\̓y!bY ?_\e"bknUp6C2B̕ڜsy6;CVY7`JpJtMI8S;fԉ}k Kr Ӛ,meJ!bOThxBZh~q ךG3$sQk؍:)䐑V[BcCjz׽WklM ;ܚ/Й_ +B<2n[tAOEab±nJO.S2ܢI\ӯYfɠɩ6=*Z9 S :CpX2Ѕ4O?nYh^wY {s -5aM*C^n&XnW鍍vZmm)UI]\`e)ZZ\_fNwk5qj XL`8 -('m[ {HiQ|ѵDGDz3T(fCwz1[kW٥):^hI0\vV]VB(~~#4Ǻ_t^Ƚ9 Bog9r]1 -ϦZCD}UBLBz?5\ÆX-h*ih#aEkmk\a6KjeazTtCdt|7hJhIA`RTF<<`ŶBZ%DyY:53u=Ԫ  -% ^6]B͍Tu*A-{mm%+ɖß׽Ԛ 膍l&VC.fteP#C)bM!-m!?)qI&H8NsM{F\8b-1f0mgmuKV0((ٽ/P5\ ,QrPIӻ%"`2^;)BVR[ 0&nkyoD1ef> # 8ϯØ+_{o})q(4f(~cC-/|NykZxG_OL~~:9mySch W}5IpXLQ8́'&Տɨ`Tquz1M5Ar#X2~ѺŸfgc"ț-n'b%Y XBcUS#H 5 -]FPb<*yˆc{{Y^Hz,E - gj$^nfhX):CH>\ R"ys#`KUOmfRb; -ۃ eN͜7z{l?vM]=F,DAo>im.kЬ'jRSZIۅxU1gC Y"i04p@,.xçj,{P) FEV kq"@8mrwUf0sҢU Wy NZgNQdoɤg 8=`'%~ި𗒙 FabI R9`(0۾%0h>(sc5e=cou>K@ l9BڐkL$'`nPc  ȊSeh5.VrU/EREDdmq7PIz ^;P;sGnAj̋Ef#W&匔x8s_T/PpgzHML|;]nؑ#܇mR>)P }Zw^Ϫ[ayK_?9BƗ:[ۮd=kæfChlQ4@Pr V{hJE!Kgl0Xkɍendō}ճoamDwtpI*UTwaX\j#uv6 - W59rT^_):R,x{!lk˂@,[FDS0QJNC:t7-lM/D^Տ1~,3e}1i[MF!M!)1myb!˩&-^z7en֏[Cj6XzNrH8sU6||nϳAjq:V+ č);_99eX~N ʅ2 \"^ecOHj.K$skA[:be5N 4v3}`v7l,FdS!hF`]-)lHIOʘ!QMv=a~|8*UV@ Y$&x\Ȑkr g FyFf/S=" -S.% 3y/M-E8^yup" `qdH1G5E'!w&8v1e1,u7# ݋ sX<.P}V^՘NCRsNCTUI˘>@(뵏w.†j]Fg\U<F@ͲN]o 2t[1#fJ+DiPRu =j'\гXjΓ@v:xr=5ACr,j  в4q/(R}{Y[L##ꭹulEot#((!,sYRK8Xyu*&X_:g֭y3^afs*&F>miR [fO$ۑX+U1*(V+je\u*tXM"aX--25*c帒Xo|,C<;*z1ɤ}V 3$}.0UkT@n }P Si ؎" $PiN,/d?=Z R:`4"/hǁ3Dܶ]<~jek0h_Qg #g*>73Sa> =Of {=1e=izdVQE(J7+iur3\g&LLVJD@16T!J_70G[ls_z+˕AW)y -d?i+، E(HpZO!YվUl3 Lz[mJ+\{}X* -H)=qOcF|wna+`="QPZs/Z@a06=)+ e̞ߊn -mBgRW-6b4a⹫qenу$&nݗg)\-S߅}.*O/;*m&m&-"+}A9eȢ:IJTZWz2DGT6T N;*̳N2J_[`|}0EXC_B^r,^I?/[1if6=b:bV{^o˖HbHs%S*%Fr 2c ń,KrܼB!곲%uD+a PI7Cj5JkMdOy`K1^DzCvwC="Ea_M{ -ę|\[/h|O~^Ot1BKJph␅nEKCЩa {!#bſ>i5?ϟ7#Ǽlmb$H- -k؛O [|(e˧RmmIE)8(?BHsYmG7oWIٯ)l&2N'YoNDxߧ(FX8uS[$]7ؼQu"UQ3DFo^ -\TwABSE%iS -LA7Ou =|S͘)ye..IzK;jȰ\slcyt lY׊M!G#73|q#n2NDu4{abR`%[6G4굇!}xM{jHn߂YXUڙ'U; e˦^Cãfܓh9> -AI=L-:M<6KU >V"GkMZϙ5˭9ya4Z5JM˫J:ạ]&I='+ ݠD}9%f/Q1GG] ꧯ<,X`'hyZm_*r^,zCDV/A=j-,\rL).K6^jIKOlγJ - )Z OphfSeWI}p`\wݧO^ "pupZ96KGwy8"'sp(;3M˺rx(S8.%zOkYr9ߵVϕEk_xoJX69 l|83r֝63J̝ -(T:I!8:]́iGp(mCp l9wWH;xhNDxxA?ՓCәORQ%e pexO31=dN1`Q\O~dcn4 -oo+a;=~# m/实InWx'+Uz6 -`﯍R z"3Zq{=?7=]Zo0NEەϱC$Z#gz8+7/o\kEv8g {$pDGDJ>۟8 FƁay77fon&PZV":m|Ps:76"U5CRnG;NV`ry"8+gHlg J/mgr\>9V N%{s0J@Fp*m^.gs48=O i(96K;.Y_ θIy1xmnO:~/ăـ_'ׅ7\Eߢ3[nC8s5"8~/Dgm/xs$p`x&Zn9$F q$a7J pFT&=pMqÁt$dyM\GoT)3ֳ)x|+_-H[{\+4\m76p*kGxߌ"N,/FgK@_:kրq97pdŤ~7J 2o79̈߮\?{b x7z᷋?ՇD(3j:~HzjowN]$> 6&G̎ULA9>(#B@w|v%x8f skbll9?&Rlv -b JODt2V)E{fC\{C3@Pf4r~ͷ.nl`SP*rn@NիYUΦ*/v+yH`o*ש)v@wvk4_O1pw -F5Rt;| yɁo ڷՒO)47[s Y^D57dCR#B9f͖ 6|GIụ_R#| ]3.LVq, 3wM)5gG-,]u*DD<1%gtgO*!axvZGm{=csﴛufx6)([A[@ɘC@]IFR6lç-j;xK[k+BiW6*ud?=t1+c(,/RbE`Pھ"(CVQ}u.=1XAXl,)Q]L6qa -x(VZ;ڰ<547OY?0~C3*wn@lqW5RFV"}u+XƣeD<DzdX&ŞwVڵ f0Tb]Y%'FWПg7dQ/_Ku8@L ʷmÏ]$ ޢh͇ZDkQAjU&KSm?L\ͧݢgxjVShP$uvkJ-{1sGQeJՇwkm=+&u9_CL5sԙ.wPL۰zP"w:ОotUյg7H _w[_Rti`A)-!w81.`. S+妸zs :GFel8@xgee^=|A B`=!Nwg#5o$m ޡG>j1 -I IVZFl?z+>qp^+#̞YA2ky %GhX"do yZxjO\P7TӾdqgmsr@([UJ_1|簭30pwjЍa @7ZL(4&=@BRiu(:=hN!q趬EnJ&6R7Ab6fx1~GV Y an$7D#Q+\5۱J6JfYÛ&9ɸ mԛ^^˺CfVݭV׃2=J!Ԑx% G &P3׊V (ig4"ڼjvM}qRaO3;#FXjIkWm1FgDli5'i KQ=0X4j ~N|~м7Ë麎RCfR#{aڣ-lg؇I[Nf i PŒwWp ᾮ/1'}|[-dZak.OD9*%7Wx7% T1( b@23Z_2d= -t*+}2HB\L(k.>(;&R)Jn2^; I/#o J»x<`)Cqc%bӹKkؽ\@!6W|xS( D}crXQvB]*z9rsv˙%s1e]YjH^v1RbUFܗ ~N#)vg{Yndi3Un5-=S-b})JS=՜lqxZa5.x#]F&"s*pdz"몡H{ύ|}2M aIy|8vte7l*s?WS|z$m墕EQ{҉/\ xPBkPVʞc3WŪ09 d0@F5`Ng#@J˄ZJ?%~㟿WL -\)h#q2̜/ fU3=~:7j/> ({̢M'߁әo*!OZ>[Yν@%h6Lz6Q2CHe@#6THe G, $<TjxHȑCbbHHԩFiL$nE DuqeoKLu/ -VQ ~טbcA4'<by=HFEeszSQEf}K8P nK$$pW.9m\is:9Mg -*TB:eR-_>7%e{ΔΪ\[yx{Ed9+nd(_ #/nqie -y.?Z2/J3\^(=?yf3wa٨l5f3$F3 *WHlI\ѭNG7Zf0ZE*@9mheN"c h4˩'g9õkS\V+7RJ'A!::s* {3.aMtkp``#$ H!3ccI`tֈb.a, ,(NSrXOw#ٱ)9 -MKw2 ~dcB.CDJcJ#c}hDvOlY{XkUTa ƤLk: 2Bth -7^d[Q5V<=sd¢^fk:JJrj1lxP^ilq3ق![`Ve-gYNz#J9c<Xi.r䫰ss{,F|bH,NMz[S7JC7HNJ#L!@Jxho1@3ż/+VU{LAQB!:nf?xj1nbѱe F47`df&^a0B8*MDriL1r͈ o[Vk41)4T 5ϘJu%MmuLSƔ1_yYm%߳ TYSah'OjEhi>ZoyMC8ȭ/N7j!p5,;@zk 413xԂIԀFuB@B]dVG~`4Xח|%(!h,nӘu`кa+s ~颂N,Das⸮@F;$#_a~v^XWYFoFM>_MƖCБB{d.%cF;2Y9-)>sgnH퉥7VX%X;^~JcDɪ8d2]:(}d)bmj7hSaZ;Osr_4<꫷"ސd/) rQPMĶCBZ2Kۖ],2ĿIp|Ehz6K*džcs.0Ye( h[`~2Tn hI~ o0-@9 H[)qqE`X6<Vޟr*< C~FHqGcpmjs \q5ÏFB10|*7h0cȖb3DJ^Ug̬b"r\@CJ_夢[Zʖء+sfG- V?GOl:nCf]ʼ81Vb`NmҬ|47# T ^k$KM&8Kl uj ]ZuqwKM9j3#ԃ9Y-8NT0 R0$loC!BD[0^2[ض=tYMv8u#O*8 mBg=&j2s||ƹ-ώ;-{+|=Z ܌K7]Enipi!v DL/ٝt XgL~|*H룞.LZ {~qYC}d1c*:gͧVS 'C\#<֖cW=\aWV.k+b8!"g )s,^Cq|_qowŞs8R#t@R#Xr_[nl9K 2'ڿ!NdZUo%N]WBr{hӜR)x 쥱]4?4 x_m>kv{S΂ڂdltY;C0M5㈔ &\j`ɓo;K=0olkq`&Wb]mOrQ-E‹vtUd6ϓ?_oBc]ս1qw)7-*p@Ì _m|2y:^ohIgE!- JH_\3AӒ Tf:z -;Q@2s5bIVc~_0Pk8L i}|؍QgPB^ϻCR&Gʟךs/~[| v:$zԍ+ځJsg֦L Z|Jl`~wsJy:*vP!~fhFER\D;(`\Hm.*2_.^:d |*sGu5=c{V}b3#+G<@߱ -3a~:T0Kp~ 8N̺&:,BEM%Mbr:j"@3lLt8'BF{-%m:"VJVwFH7dLp6 1 cH>"; ɥ3+t~֞HwjLB^µk9:' tؕ望4 ܍4wLs-^Sͮ4K 1aYيEaNñHaNC#2̡M/׳JZ>,gHzɳ܃\YI>U_Oxe9(1ˡ}$,#V弅C=ˡx;ICʴ4Sd9RI8svWW Ws-1jhDs\Cxi[d?ݏ1XtqW[C.\?d)zWoX29-jײƁ0 Nn -m-}F{4Ax -~m.̖ȿw֡#Irv 겠YUթ­.V]k:1l] -D .Mѓ˩/EʲS=z I*`J)vs_(4+>3D5ADqc([,Ays7fr~>A~vNL1@=^_ -tZ .nH> J>4vtJ r U5QqpF.EQ.2f,ȪY/ݱqەtUV>A'{|w\7% d "}(S.kd,Z=?ZvK]Ͼ?LY -o ]7"+ggËA@NR%K `#"6wSZB%-eD2 -dAo`8g  - b<).tn+Ӣ -djO8dlqAV3x5@kQlǮ&U'%55!Opʊ!e?S1@./q "$!w9 ^oWsݍq7J׍BчCEZvSg.P&t4}@^W*bCFԬ;!7\445KH7b{TG!>MY5ܤGW6 %dT4ŃCdy3IEɢTzDcR9yDB?lvĻ[SA,gPGGAQ]ԬX}2&+8d1m϶8Vf{ֺZ4WamUr-ޱMĸr<̬.wm;vX|aqT -X"4&|Z=w}y %/LlTG).&5ݴb|0dT UsE/4VY(̨qWRNb?өuBgfZˮEU0e!6O5?뫼- =B2쑬/}"#?s irE1?VL/N|!W qغޗtoZҙ2AЉRMn%/R?9 Ƿe>K "bp A)R%OQۜ0 ˚Ʈ5LI)$ ^k~&-p,V=N3ph aQ^/!qTe7F4wIFD2n^> Nl?+@$y58,PTǐlߣSa9yS/1#bg+:T2Zç.:/}WfFS֍(XPl҅կ*&0[vD'm͙`tec4I? |"YjVd6՛,vgj -$uOrJ*)04x(%fNų~#JD3Q--2PEϔ Өw>z:3')_p[%"5t7n"* ʨ YoDmy<3O0~HĤ}(Ѳ7i;4ן\y T8G;-V|CL6Wgҷϴ翼=L.5!r!YRGw5TO@T#.0; ȴ5|CRl>j4\#DSr -rP7=tedg 7wPyW1x+rdЉa!hҕuqSZ,xQ-VhZasRF(k Ly[bjcִb^$lFdw mp]]Nq{i/BZ(_g~S&a΋q=@ hڛs0)7N;cHdvpClh;r H[_Etm|-k!{ lAAzBcp56 ''JȰuLgXjU8eF`6X&>Kae+]IXpP:-^ew$UBV-6 '-vsUU#ڹ7Pu!7de(PU"i/:*MĄEd:TwvK^ -کpcMu6+.- )Bl42v,n -GJ➰f: Ynze58 -"Q_hjaͽEG z:x'Q68* -V*r\'``M$dA/;FjlkWiEkUYsPV^=5{OM.Bљ6cmiZ?s~ -bqs >f}؊OZ@lH֘o!muu8MngخlyXҷ8G&3 -%m>|K&ߩ:7a#xG4Nݽ;)肫/u0.ű~ "nSoi:Ϊ_yE`y聩Fe$0* \Yvr@jz W΁?ob';16q,+4|l g&A,iFqu -3Z\vIi(8q#.cF"&`On6i㈟`F3%32-Ks@t( ūk -p@;?Z-,9qߵ~/86Iq!DZVhBZC u -_^':dTȨss+/~1y@$iZַ/Ė 躐dK:qGݬwuYgg'RwHOcWٔ3弉QrH+(48%pe5os$|pLjLJ 'aƵcDz -zq`R,8R- h}kHXם'B !1\:5n8"ptpȼ sF#*Fw}5RDړ F?<+A䙁Ja-v^b̆.)_G}(,1+hw׋|gc gL -(VnCvhuU)|,%9"K1DdupC9k![Ze2-x"Є.9q_& n}ʧ0q?|p o"#b~Bb~ 6˯woܾ5jzY&q:pщG|TϺ-+e? մQۤG` jv@(8M *[{X0Av=НOo{3p-WoYx!6?rCf~=oSHN˙Hxu[r\Y-$Hs8Q X^|s 'm̩ă-s@ni GG>IglyJq}oڶL]uБפ5%+0ە3 VIYῬ,^mU.+<Ff^Jb뵐z%WMz"4g#C;yvA52d˘ +T q1Ls[J -r;/,9 )]az jdHx_c -endstream endobj 27 0 obj <>stream -HtW%x$G^gv@4"zz@w4 FiF/"/‹olB>2@.ہHsq,k)&/ی5i*ƹ%LLMkх8y[zpo'g_3 JP'ؘFl`)1rBJ62z -`8xwN7/DT{>ֵ{& sezKќȜ;n$ HG'rq -F`+jNN Od;D,aP R=TL&'L{ui4\eJ)y?#h-|1z޿f`g&gbMckKVjn%$fJMCE[~ދd"e+g]rb*؈G"̞z2;mn܊q5Ƭx*jv^فqKd2֞I Vnn/JIhf`s:*io,Irkiׇ2u⺨7w*C=T nx.KtԂ6F$ 2 ݂y;W/ ->Cqhɥj>L[w0; јNݯw%PoN2RO{'~KaUV\JC=~Rhyz9a1va Vz(,5쉌Ar78e/uWpq;H=@wF0I2VMJETRx@ ԺB8W:])AWePQ䞱u+|V ŧ5 !V8}kǢyg͖YUR&C3Ш<Q'2No t6KVk)Y8VrUr'sy'du~iN`x!KSJABKڂf!کJ hq2E",R_or Y뉉;`!!F;~a ee z"2s*!} .2 !͙y3dEfZTfPl1d@0*0d@Ϝ0Ǒ>|#BRTKGvG#b˿8#IuHGd5- -ǫ\LK\$~Rhzz5C3dehwY7K2p'GZ2pf,vҐ˒:[ -^ iһdݒY˒)* nJ.*ZB|Ũ -Ryj˖>2(޺Uٙԭ%QΉ5PCj+d5~o=AP^[5'Z 6좮^H^<+@M[qU+i P&Ref!j,ԙ"3l]V.?$&3m -@Zz-i4_W sb̢LSN1 ė\ڂzHyD{'C:%:r2i]R}2W]ͭ Jw gtW% ]Nܡ u{`HˉhLQ2$ߏQf3TKo[ -V -! -Y2Z4*9-Y/3/|alR=x%<F6֜e9̓RVUwࠩWg$\֪\u|aoƑ(aYdP ey"M aE 'AKSq uXΛԢ[U+Nc,م(9h|۱,ZpqR+im.Y-C1,ӊ8Tl^v F'-tH5.D8_Ard~ ckE"7c^jvuvKd#%H 94mƑ%Hw&n͑iA8Vڸl{YY+/V:ex;^<=5>㡁mHZ]q6K{" -rYf7k$t2/At{ukG?AB iZB%C浱> SIQmc$U ۄ6]ƖY]sT!r|}fp5Lh"%9ܖsZX, %Ddb-ix6a:ˬܞ̶_ {l qS-Cjӓ!%'Cs'z'gpZ0.)<ږ~Wع8h<9^ eumO[ݓӎ1]-#gZsJʠ]:ˎ`1?J ?XxQ`zy1G1f!/n Any/CbCF4x۱϶cN;VM֯HoY- xl8OAuj_xz_R>gl<1Pɉ:$9#,ނ # jo3~(o&U[-˳7sq 35킾)wo f?<(8e 4ZL;3m?_d>N(]5ȰW,>o\'anǺ&X Z(Y٦Jf?d?faioh7DZcL KçZ ^\>Kb1`NW A\tٵygMxϐI|d -pJ{#`arWC͗btQG(L6 `AHPi%1z7Zr,I}>B_78!dCfc- fimŮfu3$H) -ҁAÀ_QjWv594bU&OQwRe(,_Ǽ/ -h+%^*/I4@0 -.{B-_4y1xP' -ؒR[Oe ,JƲX3!F=팶F X\қ8\+SRN)7Ss:O!! gX*{ -P+DsovC ad.9#9ˬ@0rIr-kK)1"(aDf -B9'zn.wW_-w7r{RL~WP/͇I Cyى+̪.ء0m Zb-X1X h9mik_4s¡3f~jᮉ--1FS[bLi'< Qi.ߪaڸKgG|J?-)XͯT,Zs>egTE'^$E}.H1~񦤆K 7{HIlXTr/Pɞq6@- 9L vYS] -K*B"Q->܉Yz9h|۱,dBCR {MFy̸h\XWSsZ=nO7x8A=є-!N^~,L!^0@rUS *Hi2-U|!^W<'%hN HqIL> -H--οccي̣]sCD4AqkeU^-UV-/3e. -i20؜z7llrD-g\\&Wd v:!R";><Քo [$x yn}9RVu·Z[u$5-պ7ڐ^bl2u |m@!PK =X^]LqT$}, 4Ic Bh\ŦiVH2)ϽQנҬ`el6lIISΚF_'f%E IOv8AHĚ -źB EANl|NHӉQȉYrbV)e%vb@ Ӊ!Xr'dpX1`h,vX1 mh_X9 ֖vm~bWb@Vrx12*3)0jBS"Mi,BnӋŐ]ɎߏxnnmwM9*)QK`㠌P 5"Njk/CȧYͫ,7BL,hcM^g]ʪy#UaT 0Vf:Y- -̜Nec#:ه sO=#L&?xy0q>[[>1F)y0l<Fhİ1 !eɄ>–`f)CdΧ2o&d_Nk~/cΗoi l)! v מݦU5-* y}2o{~L$2|fTH!KZ7dDP6q 7\4t9og FaM.*OR ϬlL$^bKG(Y_/d6@+)R=Eys|cٲ[fTxw& W7^ s6"nAq\mi씾/r4vX.No`J0PgQb7zފEߞ>]%4?`ix$ߟz$cGL^ꑰz&U=ucgH(%+dÖv)Z~0ͬD x{f -׊uOœeXвbm'jm`,얗XnjUBis?|B0,)fy+e>Trzh!r -Q -ڰK+AڪTxex͔G{eerϮt"Lƣ_mF2>V -%6vr!dUOd2`n3Խڍں#<>|cgE&`-DEQ;; -#NE8{S0^rXruNPj^` /VzܓamRCOugݭu jb%( %ԨښzB!JBOM͗8WPk+] -"0L[V{m8+U.f_bZWO"X؟7jB(ޱm[>@ &(yN6r#?6nv˖BGΟ*؆"5f\#iy ^}Wh)A=foAqQyP̌4X1Cll̜\II JK_M>u(vDSDm|J>2Hڈ*3g_P͖i a<9)O$oJgbkY}*ςHnFLnϿWr:}MQdnnU_@[;·QUR\dWǗUQ{l'<A[Z}d/8yqΆ^h! ckNXR71,4&?̈́sз6jtv+_?{χ/F$xÍ $HơɀS/$0S%dPPǍdèHǕ/C2(-|3s? JiL(3}j.?`/4n&JApō+ 0Or(Jsː eȢaeHv,2D 2ԍz'katA1x2:eh`,6_Tey.4*71aAY=y*<BN1Hөl{c)|1boT|;q?p QZ/S`:/8ct<6V)e*CS@bem> -O|Uz^Q 3ckcBZ"NeyE?m 9sYE_8@<\PVUao,0H`xӕ"6ecʥ `=)yqڶ'Q򩌸3:Ĝ(cYvxh ѵ_EE8S2; CSž77 z !j޽T 5>6F`,I~%,~{~Xy ^ؼP裇KPtN Tfevkթ7vIlۖ}Ju_7=Nr%KnoMQ@5ۗ|ҘM AV73ѓM@%KXk<ٴ cթ1ʌղ)}.>Ot} mfv:t$2Q5OPu4sT\ȡ;u"ȯ -}&n^-Yu[o>~?~Oq^Q ,X o|kAukA #H~y/n].yw'޿zu"<;`bjPLww>.h7 LW@#X+j Ƒli'ȏzR!Ű=Udlpi8F^t B 'WxE@ji@bHD@`q5 mv@I~s ]y%'Q΢* * ޤ+B5d{bt@ǍEלn,s̖_1ރA8K=P'/yW[O0<T|7#a g3J ^`5_` |t+NF2Dd-tmu" X5AoyqJ 48"mqʼ p/~E' mp/bBdxe:Q:-Èz72{ I5߂Ue-) Sy*UiAaB {?u$ң~?c1R@.uІumh(E2ѝ}H c_` N>Q͌-C^?6R@`ϗR !` ;bg`߼W7w%>y-G{Ѕx@g4-J%,Uf~J|T(zqRcHAҬrL|M@WtY,~j=ɛ6>U2}9#ZԕgO1wr quTy$ 2]퉈ϩϴ#x/ '?] ~(Zً-˧𘢫ȺtYehy^BCH ޏb@B$ kyMܟ1ї zCevƶ\ 1eN8jzo;$IA0f`nU+˵#{k~3;7MN;ޮ}z|6W?6%AUJ@r$; ^ViyLJ?V%̹ gx d9v+@h*&H,=, -Sa,wyl>ӎ=ExSz@;Mn눍FI2=yDB4cehsU_YYn?)|Ӭdl(mxAե ʃ;]ؘL68zAk( +lM+՜"0络n1vfWx&&Jsu" -{Q/h ϾX U,UvըՑQ#eX(X&5nWK?{u1D*o:jC=iTnX{1^*``)LudRtsS] 'C"> B9(B9le'v'_ #ň@jKM@A`ߎّz^Zݧ% Cֻ!D!8كb/t_G!~\;Bȉ@j۠L -94ș* I3z[f#.V+E)juA}淡LAmN/YC\u̅A`7(5l%Ա9`bsE񘺚2"&8vq M7CǸ' -._> ЙME+^n:ٗADeE흳RЛksdC^{!jι ߹e\hXrGKECRRp HN\sR2~?PE-+ -jOh tAɲ1+ -TݒnRu"7Ztѽ_waˠx &&ܕycGi?)OIˋS~j64Bc-J%C,:A05=voQ>= FwlWwLȮe/mhu6mfC]dRUNFO=#A_àO-CX@!]`kUxv[}?Uh&C7"ϐV:#74olWf7nW%gT $zVC/Ǝg=G^u=VIv|\){1Wag)޼fã*ZnYp4oڭe 9؞ VR{DO]>.CuS'ͽ.M3"bss([?ھC1 dS -OZQ|ol^VS usJTv7GF4M -!丁p8r`G<]ٸMp|PrED=#(bowK/C /Éxc]>ߓ%Y=|aX""33Nh`+DX - ~ 2Tr]&d3C6">Xedl1@(7Jd:og[Yl0K}uinF<* ~Ftj yMJo\P0B}+= -5o1RS6'WzJk Nķ/†Q.F i;9|=ˈbaEL6O R5j!Q IM4 .qWgW{ġ3 U)n<`x1~rJCEo^tǚM;mKWǮܶobEW30pUؙfAH !m_j(gap<12/d7t]}>[\a6>pu_8, 5բ kVx/ n;Z8\;&ȗRǪȹ|/`p..\5E`\DA&ɛ!feJB"H\ &*kUńƘANKmeQȦJa26^hg烶gfgZ18hc3ޝ0)cDFrJkgUWo̦Hk7b0N?L{%n c$-i 3_ H)+kONS9*sNa| 1{C!Y¾*w5CѫVFjsP>U^I 5VҠ0\. )yj"w[zXiV -2&mm]׼\UI5}yhm:jrbpT~~Us(zW=WJ/+6[z!e ܴ/^3G5Re`,0=kt"[&xc4* @-J#fquP|kZԁcc0DU?wb!Oy6N ȇSն&cZa-!u:2SF˔눟r4Y>ॴiHMu1?r9FZ^h}ׯ(z2?3Q0r2EڲF:6gS<`Ti9VodۨLsjt5=&)ۓT#}8$`ֶ?]+|]hk9qT(oqvI(_+t™ʈujFHPzg59>U UFI-;ZH_hi %{ % MFtLV=mm ad-^ EyÈЏrx`o׋0B\bT!A9 %ˆN->ي`-zGĺWarhs|' 0hʾdxo/c I1ou~fު8ǽJFO];s#E19$lY"6^e#$ƃFBE47) /lvY2G"2x?^ Vd,fcZ:3C|J͉&8Vſ6O5; _5;;@L%aPy@ɳvэFj JgH;7 -|~Qf-h_V&_[XAc|ySsMam"`'g&A8>WF7^`ǻbe iz"jNY3k8}{7+յ -+O㭸=u`kJ` ,tO -'@kSMWeegf.>5bt'RLډRaՃ:Wݾ[mճQ.%n<1ME - cӾPPeHmp|)4p&.+3r8֯|*(eV{.CvINI,6l2WunA֎d_2bSǡRm=uBoDK 4ˣ*u]hg $=Lx/jV#Ƣ`"69&3e3V[sŦPZX9>fG?|캀mv~,`<HJ7_wؗCp8eIo;1/i%2Ў͈׭L]ǎL@%R>]&.S؀wE 91T;ă_fcT*J4|xhLXØd*Ӣ{ch:F1:`:L 'e7v^Ǟ=qn^U 15k BiKJ vV& Jx}SWZ, 1(l Q&zc՝xGcHElD)&5LRLhL+K#<.Ԃ@"[)e^iUD.E>͑9,V+"bN™9۹1^W^`tN6}i?6ԌZ!t]=b_ 4GN0ywgLKld|Ѐq"7c_~؜v}z?CMCL> z}hm!6ȧ!t 6䝞d \ca(#|w uLM7iv-Qٱu;60#J%[wK6DpG) `C] R~FLrT1+ceys!NRBC+0V|! % D*Cy -7]|Z߆Tl+i7Xfv)/b;1I?UAkQuB,xL_XG d?4}\DYp]HUa0eE+r$ݡ]qO3|h߰mdq=s5fdI˚AQ,hcZu>N $%`sEؐQ20BRŴ.7%¸ jE:383zK|jQK[5mp7P۔T A-MsvLɖզ`$v&QU(g[3 \E=ɌDk5XѲ\< wHa3#VTkI-//;tDD2axN4slR)Hҳ\RӏumœK#Jؼrh4 *B3m]&9Fǡ*pfim;GuփEtYH]?[^gk%ǾbN,݃4P9TbCB|nh){*UC %iMW{R%.KZx9,| ƀ10W-עņ_>/C[FNܬjZvY^(DUH"u GP [V}H#!JLeK+ Qڟ׍J\@90f5epzs*!k-N1fիn1ޑ.oatvPp5[4W)J[F[PH_]zϷ?^0#4Fmb^mC%LYJn68s qނs)5dGH -޾}Wv͑36=?MyHڞ>1Y8Sf8c0^Qֿ_*u4jfJH_i_¶x̕C{366yy:yϻ;éƶ.%~0)N[,o@D L/~~r󝟏bbN'^m=T Ex p€Y‰.(0drz`$}w48)t cՍnKJżJ3I/ 3>ޓ8ðmЧsVcwD秔[a71FT6qPwbzQomcD \*4t!݈tڳW܎!J -F.z-gPw -D:D9r M](]F \{=-t">L i7snL(;e W|K. $ G5ɘẐ*C#>)v=rVoC.A'Ղ`'b468;aLa'3B`uzVn5|㙎S4kIkȁkq5p7MfMaܮRb"lkI em>r0 PӲ@+9cXwP+S/mXR"5j20F徇VU Qhu,,?Xxt,3cX7y#P]H̱UMb@PQgca-c>r4p~a+W`N3Q(]Kf( Y*e3aG9 h$:L HV)$z&#R1UdL>r]Ve՜79c$LGh+% -;hα-ldzst?cښ@T[3rYPo8'S*xȠp *ḿtq`њf]Jv:0WvFO{CvWə9ڭ@%8$6.r$9rFC723P8!FL!ER˼:̷E,fkzg2Xݘ vpJ@vW5(zuR4-b7̕O rmtĥ`on&n1J.R^[ -kMdI񗆚ZwnyoT%2-faukkf8WSCc80Ƌqu.䮎W%J?eL&}ץrt &Z Z&h35mi -kOAW#.g~;'=4zX*ޓ}}'"n@piV^ %D9r6zq.#:V*:YsrdMwrĐ+ -)H - x (9H#<e}tE j/m4f\TVe&-ܗu blU9 S2MX4Z)WǠ!$ #T6"}S&t -x8W&zeXQq[ꤙBIHf5&yk?O:jE$(f-BO80^0 g~._n"N/5P=!5q`*תZ=af -;,TD5W VV&L$1l`H;7Lv[ 5"-oF6U\L&1MZc3?nu7贬ؿ]GW̩7ut|ɉbl_S.#SS EKZ=qZ)̯_$,bAz(TxB*Wh+{407VjSISx-4XQbR}a#Oqm1f"72#[ -,4`Y"ɅQ3;jyizoTےbLc-d?iMxOQȦS`p¸Ըq3ulG>YBD:Sd΋&s#}W2pbGozzw.x*\UH]mDH(% 6?kӯ{x._7wt -&qۑ>w~مVwn:Pޒ)㟌B+ԵI"^Ӿ5u>_ 4%P{7 ts#}=^-w؁}=Q,u{ *;`p ;A7/aX|I&︺e#hOޔE gđ.q_晩J$ݛ#!`inRedhK /jB&(E%WyUklUIZUH>stream -H|Wm UVp$8er")l3#x4ׯLm/QnՆ7__mw?Iipr} 襦`2' $9 d*'qZVȠ "v?։ -YH9ꋣaiœWV @|5<@&S#:l %C#CLľ̈́DԎԇKW f2"ؑ T qlp]|A).Cmk{ѨNYLif8r")H=~ldDZlT؜6꽊=j/B,֬l %$w$H 78mUu' 37a{ڳ1z; ȅL41G\q"ehb=%]4k(RBTyxdiT;m(}9]$ ͡ůނ 7&NR_܇>@tv8fd3=+{b0~zC#([æBD-pFv " ]_] g"WCk,OJiwc d/(ç_J0Nk9k qhR 4=3ĪBZ[3 I[VTW4!k>FB"f5qS-{6g~e_Xs߁Hϵl㤹#OsEʞ}<;z*F7,ٳ@'`@c}7>>KǸ009c=; v%] &;v5LZg=x3|NWɵҗdczO:MJ5tmAR݇#:)Rb Wn.31iE -!M> 璌b.@ʑf@6cC,ȓ}{gZ* MyCg$k[Ƚ~ٟVa}Lp;ПV{@Yw-[=Ϙis=jcc{3(=/'xM۞/)XJ[9h @7K":#?o@ P͏} 7)^A_ -ޮٰ5O ~]A0Qx;ӷ6S樓jz˹S> z^~g~S|a)Zoxcegàe*@ÔVހ/o?$,;gOa93 nbVvm!CxU"˳ 9?DRCWֺ՞̡X*.0(Fg -w]ZǮ,;nXÛ+,wQ B<6)˱PA[2ZϡަDZ3EnRzU|d} DlR[jo52ˬQ4R/jjU^ž ".JGhO  W;Oeb @x:gMƕkG̙bҨY9L)L1:k ܒ[~"cUxP&¼< 7(stNN ()YR/NZ2AֲV+m [e֨^2оUG2ŏr2jރ`e~9O2yo{ -J2Ayӹx0S;bŻ -MRN+Qz(iHad=i9S G|9zz[k3 z- VaBfmj~ʶܞQt-c~P&:]Kὺ*tQILml4W@+@,[0HR' BSvf -]M:08!tϴ)iu0(?]SX*S2ө57!9)5[lk"ʙD`+tW,L{(%:zQ(^)BbݏӘ]tKtD 쥣䢠}gKtEjKȖ'H.ޭNUo[I5-p)uk\#~*(tMBkk)teHYM"Jl9%GPBrbO5_ȒCN?UC¬Zgez0r:0cBgdoˊ>WGf5I ~.3_Ȕ>7i1?Gz"|#-V«K,|k^>}.V< fJ`X2'zGXL*g,v;C}Iq7"Z3Ҭm@U6 Dl?P$a<P~>(*b4pvd`w$Lh&cLCfsR:f=04^}h6; q1 .,9#t3"b"9S= (;IV[wTZ8kg0E -KOܹ$ppfTn"p.4[޹$cx, 1z%i5-IwFÝ -VJ6Qyqċc}|kڐF;6]Ns=S(;&WaZfRȭRl1XG)&R&։D9'$E"= 0W#!^?<!݅eBJtLɒC>hP+pewp7yB[:q,[#<+wB9%VuOOԀBA$̦ =7(oP7(m+ ?UIBߪV?0q/ǒ+,~CgpLC dUddXv,b Zcbm-T[}=L)Q ,t? f?$SMvouUM/bPudHبd#z}ITO^Z$ |SLȝ: qn Xl -ݰ*<CAd4ӹo -"!j()Dܼ%j#kkitF ;D #)5SqZqk|fԥ$yuB^Feʙ/-q^I zb_o6K2tr/bӤۉ  ]v&o Դp jUVTW7"Z /ŻT#1<0},t~(E2Oz4]-q+(fYL>rg֫_9exSOz$6lg=s25DyZ揪}ܖUjOlN"Ȉ{kOq0="ZUCDqEcoĵק3Ħw<(zM@l85/CwhـY#»h:P3+ ?mbչfĊ繇V_fMqRzUv_q~8y$157LB l$l$OC6Lr[, q2"exRPã&INx#I(2=$9)NMt5=HT6I>b$_&Iڰ&΃$;,| $ܐS>HJ&!.(OG:y/c` $;@n $ 5$d\@I"}=$I+FIrfk~&I?Kӯ$>"Cڦ˲MZA ]${n"I(8ޖIR)ًP${l#I*0G9h'QWMH8IKx_NB~$oػGe)IS86Nmlaupoio_$C酓 t-P1w&@SK~әܶ=c=,'C,źt)n-5}q.x8C1?Yp߿O@'3<1ϿB U+:Lq!L3?: Qrt=F $XjfP83",n>2˖R*"3?o+ӹ̊5l*7bĀXj;H>;Ȋm(u-iVgbl/exn"sXk^ -ŷT=uxޯ)Rj -*^+2 -R}9sPRhų!*aG}=bYrJ7W(s'VXgo3+YUZ;!%ưyר%OU2<3 iKe^A W&reW1޻'h·uFq0=斈hЇ&CZ|Q\}:u#yPxQ|;xPWyFC4rf> FF]|kk2UՔaWlc۲\sn|跫ޮqm\E7Ҿoh -.$]c1]kG P^ۿt~@uH8T CQ=ButFu!)z:ĮՅX˧߬%W- OVY6QK`GP\fNe:9-T7â$Ɇ1աFux=l\taQbT2FCsՅ@ubQyNegEϲ u(|:?؞YHv%CAo IE/r:,4^z:~z(ˌy>`uڀ`Yb!xzznXgHL)Ks>=3qJ޸Έcי73Y̛{#lZgY:ϭ<׮7~Ĩh2F:z:D -ZĠ}%Zߴ֯o3?:__i=ċ]ϛpiѻ~:cq:W2&yhԤ7}OlxMN/ZgXM+׸E\6ry*ہ1Q.^l 4,Ͼ7PK 4_ix:@aNBؑɆEә2a~9y҂m*6^WCΊkΊeQvexiu-/ۗ@9W}rMqRcA"ed65(xYm@z]PbPtG\c m`4IvzMVy?=ٛ#ӖXoӄ]Л-jhA* =[phZ`f -o{٫UivI˽ -XǗ(nLYet5z."rz,K04U_DxUiǹg4e)=F32WyYe=>xjs*⺎Uk yO]*Rα-oz lEWtu{Z3薂MYZ8>`_g2R(tM)E+r(WgzʱSnڀ 4SP ;V'dC;ƒҸMMÁH5YѨ3[1uux qݕD|únE)o<`7Yeߣؖ{8bXkօg c ]Zv6W:;P+*Ȼt蕈KK#o@UB-Aqh] FB~$WVBj+}Jh4PRW$시Cq,8j6ENЫa~fԟ?cL[%,XP`Pi^ 663 $Q= fHn/v ^%cۈLjc Ֆ4toY^IG?ܽЩog_H8ȭeF5& ||-J; ~i+I~O SO1Ex{?L5|&/ V{DD&s.i7 -D#ewRyIɆ -qƇ؍U!k$j1CW fRo=F~r9<^#T p+PӬ[CCo3ȴHއSvmFZua[=&&ڟ vvo/ѽyψ!!7xs>yo?ɏa 4䟅m0X8) tXÛ ( Xy:]7jF:? 2®ljX ",)uG ,}m2 1ُ[˫p {̺xŲ냌ɘIvwQێpM6;jt+CnH"Jv?g$[ o"mb Eubl(L8PzF AwRoqЭ& :o,1WvlOe.yaFr] -DLs$ѧĎUCh 6`iSά#D(̈EP3ߓ>{#- WM eeMUddd# - ,+ilj`L6Օ-CVTod -_O沏ِ͹{ H.\=wZQ\%(JI=-`eZX0^Df݅KmnQ{Epy>f2XE)<\Q4߂s3~R~~I*6GfR -*$]= ê 6 M`dőp!OQ#%4% .~yy6}w~~ӈ­C/U,-\7Bfaظ-aWuyAccn ْbWvh5uSdkE)!9s70OܬwGR0oƌױԚ3s ]TvW-n Ξմ4Xܑ|.Յn_zҰ(߂cfUVT/QT$̈́j:(٭S}&DsR/HcfIKJ$ʼn厘] YctNIj+vJVTEr2%~{kc`PMVr.%c!˾a_ R e,K-r c4l**iE{oJf y4;*.ssҵAߙ(凖"&},,$ucŅ. -/I ǥ_{@ -g REȸ˙U뱥TugVUBqaXH]Flˣ]y|w)6%Wik>l. %} qŅ XʎOHtf\aqm_ˠwP݆UqȊrsjϫRf<fr [XXٸ0teS1ki*򨓼&uLcMyaFхȆP>Wm4gTQ54ǰΪn)sĥƫeо9>%Pv"K |"B0}IuYd%uRTo&Pe""VaԎfOW񃳮4U).]cEP:fnLQ \mzWR"bɖ^?]K؆ʖI#zn[&[4;>vၥ+$@Ku]HZ qә\thݥd󤻂}Rp0ϋ+4һX|dwy|;S"u1`MU -Թ0Ak> _~ۨ_r/맒%ywO%z!sey-mh F ({<P$[;PhR޳ -"W12[B)4.a;WǑf+ߧVeAPs/N¶:k,-i9V%_dFL(r7ɼeCfT_=1ݔ#Ap;Nyeyu vo,cn2rU=nce }6 {wu嫬>~gNR$a{G=p-]M ;i&?_]\ vUiV//?ٿq)Hdsb?=o;.'>ScUZb?Pza?U_t|WYlpuP3R'1~dIֽl9zؿ~dM09 }|a^{u'we f#_dk߱&u4~ZȾ0uVTc H}~{dߕ3`c#TxG a1$6 ڡ`e4,YJ)uOOa4k_@XCƀ!|L[ҳ-/ U8<0騍#2""ᠵ(R*+I]y7B2k=).ϫm g}r8z@A1@ rCTe"sటL(JmY+:cE kb[Waf]B9X ӊS^zI 5^LǁP+sL,謇i9"^6[ir[طd{٦:Kn::fo\tMN:nӡF0@[۰Odӡ7Qס ס Tw;a:^zf -9+Cnϡ+{=sXl{'@HrvCTK}9L w ס=uصBֆxx؎'2*lv<qmǯ$0Q>rsaڹe*ƪ ص ׁ|>˲9#)̃i ܩ50N!#Ūj빱ՋecܲL]-0K*yZ@]]lW˾mƇj Y̠]f(瀦~Dט^R-inS cml&zL>iKd;& yRa_Ό lt-1CTqN5JI,^S?T^ef> x+ll2ַľRS;oAϵs>e}g ^{KX3sLPʽYZxƻע+T+XTpR=hOsqVbt$=&< ufiU~]Vj.lz2PV$2Abӈ:Ob_ҺkGxQfz1ڡB1`h de ͓uTƞSȢ$"Fx P/d:3=1ԧ/HuD$$I!Y5AՕ\_2:܅6k5멵{Y-zN4d'bU .Vő'V36̎>ϏRivGwLFU II?8w ke0E_'7/:5fd2`1,j"f?(;e@ -& ch E=$FزAH[; wg. q8-a ~FLZ=}PPd]f 2ZSƋvSR`e|L-v3xL:n`S2dE)]ms@,~)īgdffTXjlMm"-R -Zq1ez:!4Im-2df6hKUv40@vkqdRW8--s_^QcĦ KfJDD OPLy 'S=\{ -?.V4;3~Kg\d;imC~9ْI#kL4KojGɅ)R(u\Ȝ|#ZmBQR|*Fo E@& }ɂɯzS^oi]t4X|7Iz㡡4aHCwp%Xܷ&.LNN1wc7`:m۱h Z?elgfۑỲ>z\h)"}ypcZyڲCnoMKdR -# v9BC͹᫅jMWY3fKPP bv*wOnz*6Fmz6鷁sdiU=4;qLhgHqoƁݟ_ TR#>>$6eey e"d<?fhv3}/v1ŷ(v\" -ϢSpcnG]B\ Vp+_1=b7S#sZyQ -Y>/1\ז/'8`A}pQ_I\W ,s#>S.KZx^q9PWrrS{9NE}eSUE}7R>nE%{к9ڛBw0_ҵn nI뤾~zqQ_Ve,@%w8Oo$vSA, 3Vi 2+Ge2z}߾TA} w°*"1~aO_)# -hC11#}?4A|m -^KtΗW:`HTuHIH1t -(G;kQt&V&H(RF|-׸]WěrsH5P1= ńm 3jͧVD7Z!EM")p~4u$LZuX%P'Q<1^qU^ !:6; e=6@OȔobZqQaS7ђxkx0 v&۝ǃ{Q{\=,mWPӸipwa=4|r(=4bH[wO灿- -9bN6EX<@v*.[8^8 Rde/~ɝJz[So'/Μ{R{]uW ij(ba>xK -5Qr;5uMV /ʚr }絬z - 2"I59wbIiȵ({tjɍ5-4ں~3rdh)5 0n#Et8>!"sR' Ҿ c1i8GG4Vq;R2/K鹏q! WթHjv5^WCf4{y:y-S"=?g>SX>BC;8Z%1^!z,' -sq_kZ8@onЉp)~J2OZ2Mai^¨%t@zF$ k9J??^k(>*\ĨF*VA$|LW W`hYUhGntV" -j)EGs&Q^zm\Ő2G!5-fu t#K[pȒ_ԏ$/WZ}G-4 H"n#e9wYߡw"jg`@׆BÔ@?u. -BYhcҖ Ouuw4@pIrjZOWךj_V`-K7F >)ԧrXʂ%D>`]"}?^3[MWr} -TMh414#t.+. u Eh}F b=>= ˯?!%* ײ_?-=a#;;R7Ɩ QkG[nԿ*2vm=Mi(h`4 p:5=C&b{ jCLFոپ[W@!}_{nDk0TRìHzy"s7&k2ܭ7)@q9BV-#ț_AL͌Le5tm("ӫ]]CAʁF1C,QzEu,+HJd g. 7%͟)4Q"1I$hC0ދ"(葷(%GldHkDw\fYqyj푌ƻĄX/f}ߟ *{}xYc;jw7bw΍ E㕒hf Rci^q<2CU{pl##4}[Ǩ2\6fAy!BVeM}%_DmEh,}\L.RaL`DU: DҟbZ/h쥁Y=_ )SkÊa…uo0|$eЊI(Fg fz6ɥ刚Rb+Rm22iҵ~~cEswb6x$  -ž/iYO-^EljZଆkb{F٨DzH>۸8}Oֲh4Pu+_m|V"Û\/;w"QxN^<|ڮYU墪q aRuc BCpLp(ՠQq9/9){9ņ}$~?vg߱zRj=(wI.}FQQVBUqmZݟ -uՁ),GwRS),^d6_Gvf`zWOAa]%j#2@ěi9nۅT[)䭎ni Z-=_C>YUe1ӷ0D`M͒Vj`KaH .d -CR[jo=UJp8bI,3 Ǜ-ZRl]-Ir+wm!vQӮspPmp -JF+eby`]oϼ -b~"z䀿^ .mND/TWy9.)q~:kq*߈A]""!Gƈc *'r1|Hy>vqM.o+\Hg}ƅ $> ɍk8kupB$e3ܞ/XxY=N(Cn )ʝH7>Ռh=@{c~SY+ÐNWc9hu  CSiXy̆k݆m -_db;^顓ӑΌܷW"c3$s|zYg5!GaitȟC!]C7cAt1>f!22z%wX@1+Ț;0EH(ƀfZ$ɝOJd<:[IU`õZb9f%vPN(*,9~Ŧyp`Yi+Rɠeс|&Cj;z v6V4< $ [&߃!PFzbUPtSvD6GD:ڔE.u; -6k).v="H}V1R*rIREyh'Z7RCo5O(&a[EG= lyikenRrGЋ1a7YH3 ._jm XI60V&c̕%P#kkOnC\$ =49V dJRB]zIMp\B\ǠlˍP-Ra4a ʈ TZ=."( AjE5d :'溜CH`eN, +O-}$Zj ױY3לHm;9Y.X3Ou#Q*Ri@&uK=Eyh5AN'0X6c۱=2kjPJrK -IS+Ql:jj(;\j-U>ϓQ&͌YeVNW;ETƄК5:2Je"p+&`lӃf}XvТɂyq+t/@ a,<~DԳ^0:$:cCWjJz4m(yjS68nMLEaZO-<La|q :CE}I(ܙ;[ rU!ș\bWN^ QKyXR[2$'$g ZzQ7<6[.${#V7YS dv:=$[4,W8DMlPMIkihn[ȭٳ,!4IK xZ=mhrkk6o~o7`ԯKS)c*EGbڑʷx{ >A27ױAi`n>=7HPOw+rð>3I)v> $g\7ƑF)`H}"QExpCVlBPIRx%/^02LPzNMO_{CX(0'^O-1_<^3@g4UzMdXB\JC6P!m>rd9m)t~cݳ۪[;ҺZ)b D?|A{S8dVMIм[sZpS6 -9 aM(P??0[sW;lϠtې4` U7uDOp"! Es#ҩ/nwB$<YG[0VDYd9A[On:1D-Xe%b $ZvW EDp46Por - SXzY:@ -+[yRuCģa1/|h8] E6 I%d0R޺2:ni<'C*~ur$fU`[{;'mu!L+>؊ SlA)Y//>K2!"m%mvKxc|}[."w0bƤsK=b24.^#5 1B)'_2@j*x$@!7UX͍cDK6>Ғ7:CAE lW|=V}.[ 1ܢT6C1*RbTXYCM:r9?Ґ̟H7\\>}C׉).mmYŢ{-7)l|MBqee3MQ 0'A۬CYdmb,f+QB/~|qbbNM&0:זć^ǚHdKHRqn#iEo#y3zXUؓ+Z rvQaJQ T/`0PxE?hmu -U Ynl@lwU6:9_܇3bYS -+a\}Iߏ,^|.e*D|δBy(~|/fX -endstream endobj 29 0 obj <>stream -HtWd pfE?;2' p]ނ^Pu(pӺ̇v}s(s"l1~pP-CH\͞myGjմ61{3k -lpZ'ZDWpk"SV Kd28u"$$#jS!^qБ}F&$43ꭍ(ǿO7[yeix-U`Zi*hn&"s9B@>Mf%4Qm|渤! -7ݢ@TȕO:!1,'5aUÚ':жNI[*y`BxyJզDɁtT͗=p!c5].HSw=teFQ-޳8T7h V1SU qӋIVMULVRRho-µih;J#JzXBv;kZ'[%U;KOnnn`E$mBN`nţ{Yѵ1U_{g.LFrT1Tgկz+A[L DkSefZ߯Х˶7e쎹B/o@ٱF7`Bap\żm4SXP0{ ^7_Y)ּTMքҨ8z8wp}r'F_拜3 v6LS8[Pou-_r66fc^3XF`00E:Xh\|dam.2@ΖOB "s8ttj4Si8Ѯ2^au߸Uό+~XJnsbktJ>R̬o ,!ĝ+hcq?2S3HSWJXJ+5"pbt -5K{bϒM8hFbD/02^ 1\݋ R_AOǍ 4z [iCEz909kB:EᗔJ#"'8K1+ڧ꣌#ƨsvnǔjt!E(9ӕ#αWT28PKB$3o ~˓ڌ(QUE#y8=8zGVg@UN g)Q𱍕@$ Ɂh"&̸dŃR^JX鞵VyZO9YS=C&Pdy6kǁUVZ64hXFfU3oX,a%goݧtUËNUΣYns:RvnH3,0ՊOb1\&!bbϊZXǨI@Iղ!U'fqA:7?TwU8ZXqMj( %dtYi#hW?s\Ky՞¢Wbc)dj.h`H|Po/77`iʣM"g|v! kX.UغmZ]kuT :s؜RrN"u5=8Dg~wE{Vp ޢ -q?j, %VnLX0{MGWNo"hLq$iMZݷh=񔉨HyI =AQ`(#ZQcUjJlL+0zb|/Fg"kkY.C#awZRQCݵbsvX -UO /FvagĚԬǹk u^}娦X"sxE/"fޡv$!}Wb$Vu`2Uc3-eW^K{am{BKmP4 |/_TBu`W(?Y<3v#Lb H'լfxB k.qCpF/D5 {Dr{c2dҖR'[JI~TRÐR0ub;ߊi!.UfJCVl{i$;B^.mmHYDlHr ";$gm9$6*/)@|fqF=As~T\XI;7·,d\ -'Oc9•l7[) =LF6b%ߴc%2Jޕ+T}XnA>g)2IP*[ϿƼB5Dm[ިN7.`ܸ,0QN @ViE{gcĞOص5SF8J!9<0(@k|@YYou'-#%FֆIHM ։x/ HD%k -1j-/zVFj6 Id Bחg<3ĺoّČ3)r.bvMNcb#C*BUFr޹Fҵ:$%!w{h6htAS/>2f ɛ=U܊74iש,hcJo3Je/V4)ƅE:džf!NIt<lDf:m\(*1+@;6{Q]Z ^>BJgZ}l-.LwEU(!Z(^* hQ -=u۝%Rg=ag_/glJ]}ZqI)2x1s@X3X"t1mEK`24zE0O|J4Vnբ?_-6S;H1:R@Ë$sG$U,7f'U)2hf?\͵yC:ˆhmpΜ'{rzPġfcb}D^'~t/m3 d%k6 ³|C&TG˫5CoNfJB+b#h}rJrlgYHL9m*wY~ژ ,+J^| (ُЦ*wHn+܎EʘC:$^VgsHf-(] (J z,Ԫ``O% !-O;_>r=g0O.z#kmf' 4N]צ81RDɅ"}2ҿ+}w1VO:^|Miwa -t=egdct+y|WcVX$̭ X,!Am(;/"(~J5dUu7utEMuX<+bnR%;}3wZfoA+7vSVâ1 - OZRRn^6SWy _% N^i. ړW^O^iHyJC K}4n'\+ԛWYWplz -+Eo^?y_۸x^^wjX4j=x%b3lj7xǞ$OZB2_?VN,hN#dn=işt޴)A+>׬(d[NeVlr\ئ߆gZvЊ_֟OaE+w +oW\T8bD@E.o2unqS׆at)+qĎ>>cꜙ,85Qb e- tBe@U,I{Ai ]Ic?=2cFjr`3Gls"{X#w4W c7 ް6BH{2UH:* MA6*, 50G.fck'b=yxuZ6ALim9xg2@+{3G_RXS$Y_`aD oXΊhY򬾜dnDW)\eϊ@dnXtM{oZ^gvQ#^xeLmMsШd:UxHjzպۯwq\.G#'< ΗTxaVe)PKHgFeWpzqH"qv |BI:$AL`^Z -A׼V_t^e«"Oxzkk2~5k?`uybpwȦfrhܰȳ7/p/#X yH޲YuHTee^ ]c0K2Lִufu升j>N%k/L]EgGy+*԰ 1בڨδZ SEp\Ym遳=qCrg0l6,jA2o=-fd-+U +LU[69!vd֣; ~uozFf%>.O7w 'csad7yc.-^n-{?̓h/aMk4(Ǡ4}qT=x -]V~xҁ~*Q26jUs@{ڌ|!2*!UL@غb @m06L: W2iRX!G]ݹ]?^B -q@ʠBf/Lc>Ǵ" IJs) rSPѨj^x~aopW/UНsƍ[;gl8ӖsA)mګsY{3`< H3qnQsB}1$Usd3=g\zg6?`qb1g: stzAj33}$yq0BǢ{ cl{8h4N`7v85I_r؜SH.^än^znLV8k1iqܬrH5-|('[CI?֠yt!݀:RҨ"G,g"kTPDq`qwHFO5VtcAMd62E$0=TeD)kP̭XȦB!̂F6#2ihaW9`gbj2,eK 31& 1 -|pC"XT /Q5r#+󯀂3]jL7X}p; XTHed5KSax,8?o?1z掘RX@Hюg`XC}}t^ 2hm(rnڱ+qVwDw]LO$A궝’J|֖9$d P^KB$=wq/h`@<"Pך;e^/"cl,.߯,ff_ 2w,}6*dm)SFRPmcל4U k}MmB >ΰ-!Sۙ!w""F=3%{_ݘ[xqrXK:9Ҩ@ j:TX9Yԛjj]wgXbW-ZSvlN*J'M91 Jo3rqYc2YuGtD oC$X -ݕC6,m1~*/b -]9#jx͝mgFhMkw* o#Xˁi-\(g!0qT %f}]{F2[)g,W\_e&W@ڊrggnم 5\D~%T[5k@i?M"{B`uMlhêdwZtp }芉?"Tl[C9@QԂqeMӻ? oNR~J[e>@RkQљFcJHLСdiYԑd@6cڔ s%)B5'XKĮ:F -Ui|Fe8H/p1ft3ZAmӁڼ{ꖞyOKs)7D]UrF3їa %U Clf -SP -VyL4{B] -*>3ޫ\,;7IeS!'JMGoڥ\*=foZ7# -nQ^ifiol]7!Č ؽԁ sEeR#ԚG݉GU|N|a~DUn׸kAh;αXY&Cf`7v}_:<}pP:]urL:I 1uS0ZwA~Z>H~H5çT,XMz)Q. =yTkjqn/f[,=+ľD8\7=l=li{sOS%~ -nos3&+f XZBI?>4j~L嵴A2l2O{MnȋVpui}5ucn0 )% KwQLc^ˀJٚ^>:eZVCEmEeǤ69%kPٺt[vJ?`ͧɷC ]fg& -IW 4$!^!Q-[뒫 Yۈ΅^x@TeH%%LrLA-(/gHQdU[VO5Ӳ G=x -Z]M9MM|PM|I0Ofh ˟z4_Y?؜qㄹboyY\T r -akV<bXLA.Bv[Voi"Lx) Sĺ%{jL7X: uLey?;f^1O$mŞT R-vh .XFHWk!MYs$͐>-}/+8v"T3K.)=vA׌={C4yet Py= ߁A'`j{d䬚A{8yеO\Gs,_A@2TK2U -6v CYF'~HԖ'LT 7YpcֳO(K]o*mD]J[Fk fG{njNG0 lIA>Яmz_D [)ueTv9 {|`7yޝ" -^R5/S5HÈjIPCV㟶wJ3c6ӐAX7ҮpeO@X6$gDl!jhKo⭨_L&> r+"6e\ݵ]$.?zx:ujIﯸ 5KըnHO)Ut1BR#B -ףĄ4qI#4E@JJ 9e|p!~UP_ߛ 7Ԕ>X2|,fB }Mr`75ORGX7|tmHPq/I9|0C |hJ<|8Lכ5hÇ#ly'!Nۙ^c% ͛G\EDsu<ETҙ=FWnY+qU)*2s#2nG~2n;F(S 88\8K!(wYJ{/+cf֞:Tr)w*MA4 qKAT3\`6xQ6 iLH6ndKc@ &Gd554_5td曖 #Z%3&"}2ܙrмV\N:굯v#hо٘ &L?M>z %\t+ Mi{ulޘ#bx\ < dTI蘼ײ!9ظ+Rv<;߈En$8blQ(6)f/W݋OP^@4$!Y*LpF$h$??M4e N3H 04 ĵyBj+1vy2{7^"+xŠʕnZNz Z1$'YxEpybB h*l^:2HLp\"#І@B솹 v l=瑟0 j3'@%1ew';p\`W`f6jԛ̰O҂2 -~8k;/NDzAF|~N\f)pJ#/~-.;y3}ŴlxN ! UyYrӑBCӓMw|'n6m` -l>W<]y2dd n\o˞Ii -i<iOtX4*6Auجc< $ׇ/ ;~&N,Ǽ -mPJ/-M,L}#ͨ;Nw#m;'*4( .!|(_C"wjV PDV۫ W=WS'-Qv؃n\v搄HE[Wp!ݘNGx=\f/ȍuI B;`X:uS YGܸ&挍ꍀ%ɷNs} Lesc'~~Tʇ|ok4T~}w)6Bớ7FGMVNԄ:҄N0An|<ȟH2ʙOo$ŐTP9kˆ.NWsn/xFdx?GXQ;y0Inni+UDnpxeܯb --_o{XThȤl܇œڶ7dj,7 ShUsFk01Rۺj,CMT q5̀2/!Ϲ4muE1D!!DFwn|ep+B er zNd4MҫC;wYl:x%6ji\3R_4K7?GťfjBH@@5+ ʍ2و'Bl /+z=Z{+L&)PC)!|JRor.qY^1گe|2AZX$eEKpd y60R:2YyjU|JR\)D:3;ش(E~![Ttql,"Uhp dsT>9$,ҩ{$JzG"z{2='hTÔKaj 胋3"EBRcZm48㠱<[́>ߋd>Vxl{6:iS>hi5GQesNE@]ڕ6Wu>wBT}uuv% Q(p:NA1a -P};e?- On~.7r~tqF{J}tq2[pLFh|>Y;W}0تhK.+Y[Q H>zyt7 *;1s3tU:y -r X4*63. ԝO$ -]eY(tZ!eT06cKU#ӂ?@|$diMݢ"ɤ^P[ K~ډt-OwS9XrHlnc O!+_/e=0I^HVӮ0:ov,B{fndY'/ RfsoJ+ȧ5c˜/4(NiK g(u8m^]p R 1IVf{"GfF^"Nv :Bj|u.Gpעmq CYTM90ǖj|t]8(yk'2}8\|//^Ak.LIA66x Bto־>SMsN 3*u9J A{'^2taK2z Y^fT Sn~xt3d L d" K:8 ԩvu#ƏN5TG؂A ܕc;mTG(YkpBսvB`v T+wUK(v J?Q -tսNziCɊmT*<|">q{ne %'0K05g RfKn3FQ,kjcO+jv985l] ]&YGM.ݩ ڶ"sS-J =YgpMaxd6bߐ8=c?-x aV{zMdL/](0e9e_MwF;e%=THȘyp6Jх7nsXB^bQ@&:ijr]Ձa7X] -!U[i-ve UpixVk=\'&{!a6ahcͶ ek V*b mWMeYЉeCLVg%o,ɖMK]Ѽ+Bq*K^PǢK6Ѵ(e$E;jqf@;㚖5w6|x _}Wp:M:_^ѵW)e7׍c"(O2 }=LV.coo/>=;ffl s8)Lؿ=Q CsR,D,;/V߲0k5HB$N -KCgFҗS oX0{Щ2^ͽpJ A"`hd\`+g"K܇ݨ޼ݫ@/o{u9֐3>dJ@ XfBh Pԗ.3`ϔ Y&Ҧ}s]; @Qؒ>&1'cAoE8H Hu=}UTv#9zYP; R. L 5c;Rجm0PRE"d :ڸ1EstʼJ >ʭ> -~Ka%KںV]"DI-Y' DΐCL !ӓ 3Z92_ KGD٢ i3H0^oi"5cCF ]XGȷ| c:17ϻ;%ƺw34Ɍehi%nkO~QH  3\D4zS9 śȌԐO(0 &i % C;"k"X¼K GFo#^#f#m[3:ıMi -3,zwĵh&v%r+ɖ$Ÿ7''$ s{{kf1E Pf虠@ሰle3j9hW:{[uK_O:3W<"V3qo3P)|<dp5pf>Xw=ꋗ.Of{}xu*ߢ `^J8y~sehPHSaƶţzQYHPݘH>v̩l aܘ85۩8뽎J$;<h6aFpc/G3p {F>Tj|b"H;kJ*PBfu>U,H(F#AsnuꆵDNju>]oJr]8 ad:jlc2P&6MlK{uTxQ(Z BŦ[eTؐ‹wi|]j΂]-HTqRU8@<~Fыm6oi`,g)y}rPK%UyhvUUCc5ޑ=Q* oC2c9YPS$0%Ol$fPQћ۬z>F7rC}o-%=d;ƍٲ=^\t? e2@3 ݪ!@moB֠b/+f ,Bfl}ڐ/ec5iB+2]</}`XhDfLBXhYҍ|pH9q uk3 VɆN<9"hB9?rCW?%XsS`3 A\R+GycR=@jyc{?V%/`/}LdgeA(J\?d]r,굽@Fz[\hx".ҋ,nDr`BUҲԽuQȜ烑dV}CVҳ{"s3uvzr7%O[k;4mtl\mZ^!`D>{.,7g[,J>2"mzBQVWKӬ̶.>}_o$_Vwe-tjj_[50@cw٫raussd_?_ {:_\ٯHBFl[/-!ߧIaO:]!T~!8$7&ar=lb 5ڝb^$W}U:®y?z]?%!PT@T6s&oNwд+WuȭyObze3 Xڗۍsfa"4 ⍠>OZ\2/P2hVˈ8g;<{w;Egٿ ~^9J͗@E3k $ |X9?5i$aLԼBߗ%WА, ,/Z]L[:fu=,(vDҧsW lN$a@=$u(3 KEIɢ}b<tY2m+rp)Sg6c^D62wqHʏW/rqeoba馭w{̅ 7b ?oZ, -ճpƜzj7 =ti /_??/09? -jDO,XT+h_LF+-i1݃&oq NgY $+ `2&̬?6jSZSLv~n>..]/c_YKP"MՏ$!Z>EEX'oFϣ -9Ǫ:~j?j{ՅriP3⾤Onڅ7ϗXhAu/ag}Fh5t!#C`nՙo>`>fgxUge2b;6|=66Wƪd. {6R1qpD΀8! 7jz >۴>eL"evGQu_a7q4O|} m4Ll@2 W%nMk6a*C.vO^'Ci3q_c/ M-7y.۲q$Qfco"ճ:D8yV3*ʱ%%(k)36:&1!0^䊟8iΠ)DžFL㹬uoJ,?7FGFɹѫ2Gj!y/]*yҫA݃FAkV}vr~ldD%wN!/[YUQi5 b5-J}Z.s d֐EL0y),[$Ue.Io!5rz73m~=nUaow;D π ;(7/)ǿ_?bkTyCVbӁ)$ےc)*f0F+kՙLY?yAVa(_wE;̈|bvw`^۟069={ s¢d}b帿bL}ا_g@Hm>}۠_P uxup@O{,5>+){*?b| ̴hnjx-vH4 -'"\fRA=F|{6y9I;xس0)K -]٤j^LeL qCޓLö?XaO~fEO]^9¯.MLvד!9Z *UmqO$Iyl{%V+K6صfDrfM`Zi&bY.Heg yTUʺ.lL'Pw Г)Dܥ{yuPx'Mu<تzK }R|fab 'wV.# -z"Kfsl2Ofi]p K?^` Y dQ9V륥uχA`G>Ȩ(r8xyTgAPIWCD-D"yZc5m1dUF?,آM52 s -+F/nTe-x[eg=NMJҝe+I.ӁI^56GG^׬>(sxv;x)J/^%:hm'g \}FFR#LLTjro\N{18VPC{m)㊱2kND|$*òJoFv;8Y6JG捳h(reZ.wQS}%Rz.k2gGx$1՛Y]oNg.㼐EA,F;`y?O½*ZG4;+ˌmLd@sU^Ym2c{WCeiA~:pہI>,/F9 u,1%>stream -HWnـߡr%Y6cxaBӢz՜P =$ $@I{ -H2ٵ!G(]yuU}U=~7ڑІӴ{lJJ YZ"7-jwZʔxr鶞`쭢U-8`S4qFbn ۲]˱÷׿_UթW`e(᚞=5OH׀hdCdqцXG?D^#7⧬G9L=l>5 @6[v-14V])4M72]G$Fd>s ;6B3& -aDFxl3SP;cSe0jxl~ $Ͽ}go?jYdLnB6wQZ(p{@ 8B_/%`# !hapjwPæj:?#0zDL`OSYS zyXjWDCg -91!2?<"GTA)S-A>v%# ġqacN auP"vЃ1ie@' ݗlyEΟHRn7[ʓlUa/܇`(EnxGbC,.Ftbd!K -Ffrؕ,ze.@D,'W\ -]¼Da'KoXQ3Gk9=rlxpl78 w00q<\$8B?'2cIL$2qW1?0wsj8&@kyС2 fΣ[QSe ^5_ 8z܁RE.%D)tNGi%֪dE1WS[r<2Ʀ` -dd!xT>,Cl$?J|!9&ᜍ$INpAMdjZkeh*icP]=cXpqĠ-ηbD OH"]tu8GS>_mРovG[ݮ̝Yan-}愹L%pY{ؼu_j1EgpDS%^3 K3xc,!Ǫ0[1ztZ~0ÊIw rNڳTsrr12n1a:V.̷IG8(]d<>kN~eC}l'x ďŘhl) -狇ܖ|j> -nx -ߑFkT/2xqzݖȋCFρXxXNZa /P.T-fn!Se*\džJ`i9ShnxBJWRٕ4rB 8b -}lUN^$M55&ᕭq>ͯ STI1i֮tviz:-gSTGJ}9֕)JLPóp"4ChU7Oaus.j=7+mnjW[w~Zc]F-p%c ll,Ք`0#ihf<(MŢ%$}$/)B~L-Y~_>3f,콿͛ ܦ2X${sƙRdbi d3xHWEݩ!VJ2d ZnppPfVΪPN!!Xn :\~~\|rD/ NSmL?6iϦa62MBU衔k4>ZuT(R^hJ1I X8|?ipqW~] Jas?(O*#I& }:?nM0>%|Kd\5(.r$RjHko .()ܸj*KZT@jo5@¥$x.`dVs[RZ36G[0 Rяqڶ4 -SYF@6"p1L+]-~v£ #`TrB"P0Ub.owW.x] 35ߠ -v$G*L`Ra )œ"iW$(jTI0`FWR 掋voPxQT'1Ў'1nO:)j)N LD$+MI KsAR!mŔ1u*Qi4 -p-7D6!1vjQHk{?'|mpGN5 1 J%p1k"\L< auB(JVt(xu7;ȌHL& d_((qO E{GRيH )im &7 j҂ 1Ƹ83=uU$v?M,*U$ -Ϻ$ @TZ a)Md#ia X*U0ڦyqMKKj URL:a),5Zݘ)ǚuAePCbN + B 08`uJ_5J -8kTA7tgw[ j9F.:nG& ],O+w񋍁]CPcny](veC-;D LhΑ4/nEckjW#6KclMG]|,9~}{oI DK?Mv׻냟9|y=K i7~tzU+H["uQ˯=yw|e~^ۇ<}NA^G8Ux5߲ͪ$J鶨2CA!8OeۊAe*_EB}vO);2ωˈt&ϳ|It[RSq񆊮}$2rK!8dyg*3 -Yh齃irꔪ]uإZŮ{ܯ,d(*(| vƤK_qJķ(隀9y %LRZbhKRnҦA" sұ* B[6`nih#C8>]O/ 5 ?T DaU<᛼}GT܈>p-y*l\rvL:q@~ߊ'«b-Nt;~"cA@lHz[4Dm0X'嚍>JtH)H$I6u]W!$q=܀;S؈) -Q,:zB}RΠw99Mdeg?"wށ0c5ݜ'aY?W+?QtVV -CМ)ܘJή7ҙtrdr':9K'l]4O-l-[;T+3td;qBJLo.DMz"&Nr+(;-$&>9[K喊zrʄ/ 'jئLulxbbmcz J$gf ʍ81 -Rʅjf,@e+V zk=_9&ʆR,-NJzr+ -ӟ]X>=UNK'ղe:)_WhLks Q2LϜZi jډ -}b7,.г!}|bGN.2+BB&.wHfM\+g[H|Wiuٱj܆mוkZ37 -L듟fzR*[&;^]P@vWAdoI皐3sf̌\bf5 l$2l0PHP܍lwЈQ#(cDT[qSMUРV:C>OCAɾw*gZ:)6].]hn´ڸ.f؃Q7FƑc'nK*jR, 'qQ $i\((${WAD_TTP ax4Gv7ҟ& -QVhuZ~*j9|zc@-M璽PʍYn@`@F nݒQ˶ScTwkQV:DB0[5<9.h?TԧzBC]0I`Ti:wk~=ޤI@E-  g.O&{ukOK[Ǩ(Ư/^2jJ:>"dқPB#"B^=lcLB~~3 {tMav'? n jf"|Orwѡ:އwV( -oņwTsg'5}k)lOZQ\x3T<@1-/ jѡ2Çlt.7~%:aˏ l`˃#U:P{F9=9|%F{-[r't˪JZtNid\ -pq@.+"ԑ:~1He\țעQu -GƝtv랷͡A\"O] ]b;wۿb!xCbS^˧yat|!" - Z\:ۯ"z /CPgg_h ~ffX6Cɦgm!W?CutQ74!F=qRPmy -|cW,~1A d!=Ȩah}Rg`KCͭF< PQq)xиV5RQ!'Z-(sꂎozY@ *hNP[Iv?R'WREF5|O%6ԫ(ZLEP^x00ΜUju8bArxݪxh}йA<ݩe -P:%ٜ{]3`%' i:x{a=Rs VW߈g*OC5ށ>0-sln|%,z|O V!ܷMM|ńuSRxd.{?"op^7#T|qe"yì!Qak/N|^Fo&;g듨G)cujPPKBoA)aDx䈀* I;u'>~eh"N.Oq-"'3W,9?KuF)E3n=-iSKnD'IΑNM+#cn9s`] %rbK -;˸{E3 U%p 3HhzljIQw]Ms(5{ -AeQlI'GݤuOhc -a5:XkU}k$/f[նxtΩgh -tW׹(k֥jhfRA711[1Y!UsuK{B}QZ -̈́0+4׿iQ6>嫗8DY= -8_ql)q[}D_<5E9.>9țC~дFk[uxGRRNq(h}ά4Jh^&RJ~G`g+f Ӽ`+:Mթv:#x;DA총h qFhnzO7PvR`qFw ̓~BxY(:Me?ܗ#4O&@n#k )9Z@EYCAђyd#0~GT\k<nD&=t5@>&Zl:IOx 94ߜ4S6㕒4VNsjlC hR[ˌ[mᲦ{SeKATz3)mLI؏$Rc Yq ;}9~CHUwH[i'<ϡ# N4Fw|gCfG\C6KO'4ho-PxzhB1ĴR!f umɍfB9r+v:%L3{. -^ҴֶN m B-fBz?' =7\{W3tە>;6*ffRqh - -?]PV|HWP^bFr(rj(KhX-<Ȗa:)] _K:Bm鳷e@̧pvA4 i0tZ&2}tK -%.NE;P %2o s4-BE7'}$=4$xP$Eb#6oD d5"޲Y3 I w!M gK0} wT$.9lP4Zvo ; GAA!  l)|,@<ƛY&=t5Hv#X4Uܩ6[ JU懁Ja8X2ÈZ<2C #bh<4 #zSR ydP?= -i^dȠp:E ^ ِ-E;N>OwN24Gi7yd{}N!;Px?*SoR}f+:MU 3vzg-Q2{սȤN)$NrD&JFĪ ~+$?N$zx=Gc0 F44ɲ#bII=M+ژa2hOAmR=i/he!>Kɒvz~ -Hyo`䢑jb[4F4fKA'U/k"IA0d60C| %,~N 0h"@ -ʵȑc/:yFhGA CS4{cR^~YqWB,rJCkp]-~ -m+5_<rT' ә/GQ _<9_K}k8Z/Y AsZҚVVWH*x= @ʈ6&<^AZI:\,q4B GJ["/qt$>%&ubj^`4]VO.V ߉57pgJ١oaeKԶYtD|)nV&1Hty ^(??7o#]j,y;x?]n^1*b0[Ӡ,sø@ܶ/ d/ ,X^^业d$G(PVm*K% a -T|G|E -KmmU[C h8T>ғTMD%㏍;Rg2S0)&ỾxbuҰvU)TYe_Y5Y{~SkryB 44|d\lq MV]:-+V[C.T %V⡆>]\͎͡4nT\«k Bޠ~j//i r?F&TgiԱMD s\sQaFkan|3*le`rlou9 a5)R(n\`ߍl^4K^5^ws[k-p-9˜ff(MOс} #6CoNH`w J<+0D6*A6b#޳8=ZdGL~M$U2.z;kR7g$?SJ!g{1+oE("F-6AhV+h8mz̭P9', ڢYA.v{0f=᪯Kʆ#j #wGN%&^4cuOr6d] w٬+@F=7k<#HӛM t+ 8ô^ۨD=bոHrUlԤAzĨCJ\ 4dWm]gnܗ:%J!-'9PEJTaMHCo'o4qsx5}Ti"/dMdZܝa5R6e.T`ـNv؟e*O9/5_"@]e`!WLrSs'f+^Oq'-h.Sm-?Ї<’kjޤκ'hzOqWNy`v#[4ZI t}Kf Y-@?_bV aWY _>w"ZmW+2#E"%nU9hPoΛ4? -WIEDOA_TjtK?h$- d -9:@<#CrZOO}_3q x ,-/II{Al(Qh똓(c*N ޕ+H5[90Pu#r|{C[^BV%%BdlCr|3('U6чG'CaF;XlYcA٤dRP_u47}h4B:$>.n/^$,mᾍѪݒ<[71ۃgM]oj4%PG~Y9b)"X1/ or3(뿛U{kJ|6@m|Acؓ ${J|Ȉv->s;IuxM1(N8|Ģ@2z;-^ ( 0xr -endstream endobj 31 0 obj <>stream -HtWe7HӅ;9=%X,O%{d  &–> ?j3Aa D2;BO \LuUȐBx>Gx@z~{?_~{',< s,U<}h>|! ^dw՞uz/<<ݓSY-?^L{B+cY/Kj`%HOt%WJ0^3 -L׬kd>'y YL+YѪx8)&g"7N Zp8gDf ( L8շB>U'6!Չw:vr -$͎k` ۘբZ`q&hΕMK~xN8*R;2dūah4􏯄X"$;k_QeH"CqHY&~`~gCuԢne"'r:%!QFm4תL;OZ8A327;@5Z" jN]8Y%SdzͫW2REuMh6zO#e?NN* 3|fjfKA*/0)= D`5Ҋd@ElU#e*.o/Mq(3V.CezN۔\;ers' .̞{1źQJl3iqjƕ*/{~F^ه•U8vg9JR$ )`EeNɩwDǢ r-C+J+O;@1-V%Y])=R,ԥh:&r/E_ejҿ|^?oു4 ^qϏvZ3d k0߿Ù|rMu 2+V 71Llz\ -7p̿ZBFH\7xQ2 6!LE!GSw3b4vXcGI 5Zf}%=Oݱ x$Rmã.:!;N?HӸzZ7OT`e!Mat6} "Uآmڹn ֪|@H;4jߛY`%/Nfl'Ey[娉[Q7xnCUqPat rc/]UeXaaA"{u\!k` VyńJZI. *w} Lh*0Fٕ{/?{iAW8%EjJ%|_&PX/::k'cz`hS'jykRUIH{x.apτrjX3Za>u+Tg]F#x0֒zeq9fG.ETFGD[ف33ҙ,ˇƗjoGԔD ~LHmrxiV;YS~2lҗqٷ@؏|!bm_[8E?OPBʬb=rDi"?({lFⒺPkۀڊNFB)2_90/;'-,]ԽTE!rΡ]{+71zwю۶PG]歯=aג?? a]䋭)q -6g+u׏ni$ߗڨYθ&w\I֖n"o93`P(Q&samn 4]Dʐa]}OYv8E2Qlc~SP-YvQzy&,-ys'O>Wx|D~= >qˌ[JLp.yOQf"l\L_gD ! 8|W1w21xJ=ԙb݄R/)[!BJژ9 iw  C- ^774I\}I13:d ;qF%)JT\Bܗ]yܗVҤl}J ş=YCŃY?jGICguwB2TS⾤\sѱ.HM,R&%Jz\S樞zD㟢d3՜Ħ.yݗ^p&律חTا_R|^8ARA' D (F8nQ -A*jpdoX5[8N 毟H܊YD2Q}RL):Z*oe76Ib -z=X cb\JytEQvG$ܧRx`Ɍc텭\49fw'8ЫhxɘbIR#A/)x -3'G0T'RP떥&&7\6~}I}YPP*A@9`Rq,(E݀+bԟ?;WjTx#,P;g'CܮX.u7@FiWȕ;uNŚ~p&>jk5ED\f 5kbƖNDb9D%:hpM$(l]Rd},%&7qeA|#{|aohp' OPGFkpX'*܇Ug}N$\Y'>)LINC3x8'98,]@lh% X89;NsN矜c"t/N\.:ڢNt:DF9Ώ9;WS~9s}'{85h a> ⼦K3$Sѐ] --] [A[`@Fmuc3p} -{8uwu@$+_8B)_a7 -VsmL+^0WR@Td 3W(&RV/+' 2#>f"W|g Tx.W80oq!h NWDLXqG,#)˓9aQQ#)MҌg^DZhWI]#7`IBKJaE_?2) #MaBHeB4}w MlO7#GՍN*>E)Ij?J\"U :ei(n<^DnXH"Vdk?dV6;BV8@;NhK:fQdRC e - rNc:]{>KJm:0MQ|01\hϽӳW7tNCt_7 - ^C gT?e~ S{} qO =,MXb!I+[VР,O2 ˎHUKjA+p2),pT ˼YA= ʗC -o.ĽAto{n<].!WU\Xo.dB ΐ'һ'ȈF -YHY>aIo{|:#HgLrq0|C{' ˆk} -iI* - -A3)<ubugL%-~xv^d\l ch݅]ORKѿndsyق`&4frP32oj[r9nvjM+z5z/r §aA<ֱT52y[[$C`k<=IF*}QUNHJB+acNřNLlC78C!;<IM5 -]Z wA(5]A6p6@c2hԮ FwQM^Q̦[)3" RhhA7E#wtL/"Gk뾎@E\~?Uy&,ɞֿ;տ$gDx/7,~^nXQn)ŲCTUQn#}yiQn -݊ ARQn2aV -Vm {V*Vx66mFá=킏js&Uod",#Ww;> 1ދ n{!bg!hd6ψjCѳڐ7l-e>IqVlu/7</zoՉb'F]AeyUv<7٠ w񿟺|FuŅ4ӳ7/+,,d:.5}Y3͙E4(/Z;ayuT8K?C: ?CJW)*=v80s)0]<]w?yQ\{HwhnŠ[xLڬ˫8y(3b+]/gh.uIz$X{`mЉi><X9}lşI ZľN9#KA:k|܉ٜ;bY1wuWśNS5O1$i|9b%12Zsv ضti5~5} -T59<3J$2*/-S׋EJWpcqwּ P$u w -ƔsWc~tLD׸LXTC +oA|i3a'Vi hO33}Iupz[YNzϊKbA*y;Q|B$W8RK0R('D̞@Kn,$Ob'@TȩNDn ׌MJ<XbWsmZKXQrkA2Z^^,mD3W|qQ=]6o^ȵf ,oĴHM)Ff\&^̙ ˘%m$5VٞlH/ç4&]b3eccxz7Ţz<}ZρѰr]FYZۥ|$[_T:]k8~Wy^~׺o^ nCK)w۔xWm7o޹"oF WFye33$TW@~| %n-~g%QN#Y~$/=NJrϨ%a4/1N,۰&^S/2 ^A,-xXHqQ.ʣ -[~NN5.^9殺wvDJu/ߪK\@3}*z F[T|K ]H|[¨f,`,!pWW"kLveـ0ZQiQV_DˣlRB2 ))|}ҲdNYz}b!BFL= v T;ySr2Ojy|ыұ>QַDԋRTN$`DzahYnԤU+nc{ 2cwB:Mk*ي;C@c15MP,]$W#\e'vU -@)8>ȗ>6ۢԯ!G* (X -= F]+ݯg:BqɌaqk:Yvf }4_]f@ΚjBY͊6׾6B[1FH!dϊ;ҁ||o&mb'DAf v+AڤNC|(i-X eDd@#WL= I CR.%=9QCPtb!N -_wѝWͣb3Y!dGwTE4`4r#ʼn!ȬkmiRm')Y6bFr2zʯ%2׳YfEthO$M=Gd B,(bz-9vPPFcLo^%?|1\6f Jٯ b.QN]N_Ǫ Phc ّr!I+&AE+[pqolN|k(>z}4uTyDkٺ^AcP5_[8 ʅ -YxfZuA\cwc Gp*W3&?h6e -ʰ.Aq+بvgcEí_z|" :X5@n灓 e%kڼԗz#?5A|Bat&ہ%ݪ_M):wV7|vDᒄ/\tA-,EKŨ)åy=dqXq7!E9U}-, xFqV`vL[rcvQ B^Oz(R3 8錿/}~# )Fl+A \^nOguǎQ2gp ~]mvViJ ͠F%0৾81wȎ"[߸C1K; բGz<nH1cxsİ wO6f)h khP svm~ JAϩTZ8!AY (VXo{V k;>J/䕺 #HlV`UVk?c[g~?i?ǟ ErfnB07 U [$k2~ͳ_pmga*$NIZ~'Ajgǻ9fܹŔF`hEi;| QJǬYzC|ǫ{Zsv`1j`u++%jڟ) U{'=X_1s+y5fk==xX:a!Q$A~n6P.HL x26lC$; öj  t7Ʈ[N3X#Xߘ{#^+js-tr3,i \r*Uqo-g|jH(4Od! (Mdy yfȤeKv|>Y=w5{".-<]-0mJjֶ6}QVwF=XQe8 -a| )5A-58fQ-YS 5|c#grTkC\mNP]x2,N3 -GJM Oy`㕧Z& En̤થH5d -^;`api@dm -.i 1;t&2Jל/ -TKVr{0@hөF1N]ƭZ4:㫩-[l|ٲ](L{KH[aZ/ߺHv*F 4J׌[4u W4_OˋC$01sV Md+:Bn -PV)ǻMӗ׷jg5' tT+^>n H=nχ&)[cl"D ` 4(^׭,peZ,H\2K•E5J0<>-\OЄ+WrM,I^j.\iz•okp8*GV}A.\SCxrk@.¿Ϗ?8Rj?qz ]m8 „kpA*x9ų.z }bf?Z6=ɿ?;>M?4AMatƿkU@!H"И"5_Gx"G^/o\S+wor d[T"f|w亪&j%Joǂsg!N@hz[k}:x?sY`6ֳU$$~Ak .^(:YAi'Rd4T 4ʗrOIzp~(z3yU6ڷ.f7|6E^Xl\ljFdXZ׵3۲pm[ q"fÇo|թ:޷|y(i|ӞJѺ~o7`Qܝp˛+7x^.M*(:KBW-]H5ؠ/mW'&u/η y[>x˰e7~uNk[aoռ߾_GG]7oGA\ܖ駣ݍɰ}6؎aQ1#vYؐPr`_PhMi],Hhc={ch1G4_f~a3%\8h8 P5?WCQ J@bA6i)~DmjM.w.&s֢6@OL5> L!hjao.vHU]Ȯ |(vh O $Y%c쭖BEʋ&QR SV]gs6 6T=-W6FbXԘlPjo+euRpCwçTU-ro-cr/ؕP0&fp[Xj 2,o!0Gi1Ff -E-{ f>9ٲ!5/1ex'b-yh-}zqc ۳#EgkN3*Sxtz/ۀIqWO#ll=TTݠg_)Vi؈bFf[ ʦz?J X1 fDLV@̴2sc}SWrMŷh Jxfx#`oBZ,tcAtvF=̦CQ=梌,9]C+xg8 u|R2TYq^3R&Lհ|Ԓ99s[\@d|Y$]!#J%nt k$t- twdf3]3ro>)oo٭z}?18/2f{ZNDW{< -"n1A$ZqMU%-Ԗ.Ζ^u`JىKk]833ڨV򺫉.ﮰE;/Ι< vJhȎNH䛚B!G(:NHA a6Z.m"Mnlb#(E_ӫr4mE.2*}*-@u @j] -$I1\)ѩ*WO[E}Į V=&OB?UѳxW!M{ ョkkS)&m =ЅeQVL7sR-jW{KzLV12c$BcDtW~`M' Eq; bb_ejP]&RO[\ˆ"r+D| S&4RYW?]W0AR|nn]$K9sSGRK|vH]SeVDӑ*t- lj-2k EtQq5H4kV-DBsXm͵0&^W80:[Cˤ$ ޖ"ǩ3oWeI`ו|?io6AwR`X )iP]fF2 rHiz90bXhQZwٺёxm?B0 ](H28WMV؋74?5R[jKaNXTԡ=ZbS5ҸtjidNl >NOJ~z~=EdP^qĈ7m@fQ 4 '1HY+<=sP -;#>Ɇ0Cb֢[E L&8)rdXBH&bmftē.NQ#{o[#(8 F@h4 ^d6 -$Wu"(e[T+քYR~2үDtroը%¡"3TӤfq -ZkuZ6 Y81Zop ]}qFoi_e+L e -:02ܵ1LLF)d NۻV\4Z9Q*7j;h4'r {wϘkuPHz Z_|*JfJ wk9^3ω .cMޘ*Ӌw6 %٣8jLQRA(e26 up`Hk 1n-kzy@!'V+{h52o5cƅ11N hf|0Yoe栽Ykf4+gk`79-^a w+yt܉ [P_7iB"Jz7*]2"^16o#pqh[I JȁIP+FCaƠމReNFTFVm:\o{gSLt.=waj4NJrP 7uد)ixʓ.h7BX2PjF 325ݔU}8%d\`:\b"&laFyO`3v5~>h<5p.VWthc<Ǻg݅>qcǃ0M&; +Zf#Np>䙌n<>iMw4{ O؝8^'e|HǍ==( tY3<Ђ/_A~La߱'e|Y0@-!niw `^˦~Q#⫎q`Vt~ԴxoEڸiAfQA!T)Ks./w>8+ekK/TCC-xY"0ۧpQ\aѷЈx'&[&(wOz 6cX[#N4hAZcV%T7&J2>Em;jg'v<02|QA[b=`-Kʖ)tZ,* LgC(ʕV~euk{”ת7ɢ4-ida5n ^E@)X=@ܥI^27z}c:sb.p\s&X_Y5$ -0x<>&"FAT@vqޅ -CGPt]S7~Ym}Es9Z!Nr͍x |EQ~17t{=nZp,󵴴q1'+Hv0zc)2e:4Pwm,B+ -տ5 Vh̬6jhI䯚Ё<ץKv)f;fxժS#eXx۽LM?aׇ7|9FG~Rvi֒r?cj}c*CH`Vs=';D;<CWck[H)Q.YX,42@ב#7I(Nڳ`Bp:0zᾠ {!. +w%v.2woXs3B+@m>"e Džuu]Ui0uXT-p׃,.hwz6h/bUMk!褦 -i{ŎٿU[ac*.ծv&]~W#?aǫ{{z~Ž=gjW4Jy Tv? kX$hW ٮ`v{f5կW~+ٯ]]ٯp q2ѯ!hzFW7J+pkW_8_9%VhG&@=x#Rogz"lױn 8ŽWg; {,1W`A(*͠0˝D:-s@¶MlW캰%JOGꤳB9]"4=[XY?N^MOn/owKjf}uN]0jFQ/{ mEU:B{aM5nLf=]ݧ?cW< k(wV5sw'෶w],f1G]6r R_ 7G jTǦRmģVuJ- jԙ`\g~ԹwmL׌7,=]Uί>~P,Ɖ$r/:I]M:)$2SR1 }(" E3'I/7$]FJ1)Tt"B%SH6Ttc5LH|ajDx5V;Tf2Z,f9w:沔,gcn[{~f憝R2&XDiB6`yf &f-j.F!N-NK~Ӭ$lamx8bfgqqGZ2pIwζhU̮ NKU6(Hfh5:2Q̢:+3k|IٗIvmO [Kl=| }o߿<+XBũe,ntǕY{f3Ϗ[u {$Э 뵫' RmP4Nk-nB$?gˌYAr܎'З®X{?1ӉscDWcEP`gnsSc}dz=KZ[]ԁ/תɾ]Hɼ܄Dɱ_qRsysfvcPֺhXReuؘ9-[Ԟ ^:(4h_IBx@;G=E&97+S"G)w=c0\uaC[~ UP[fz {V sۀkh'+v; -#`]bf@:^ @8!0o[eI C?vX; c3ڸtn=aɍJg@ҮHV̞Wcu.j粘fbG@*/0đa1O Tua[$ (7{Aj0~'ch2n*e@yS%5F#2{ l GH\El٤n]o_)ق*$ѽjw-@0 "#ZZIebp^qb +i. -]J r!t!U'XJ/.y?dmږ: jmx+s=+7 9BB?!љ-T(e?}`C -߽B\5RƭqFPtWwEߓi8#Ě);zMS,p]k齴7:>J6*W^Rه|eX^sRx6+V)7D-taܥ`G$;n8;P-Ca{r4 g܅di70--cu䞭(;tl:&]U&X䱨E& i*WQ'%`@F^*,~Y[R`@I(CEK:+>$:YWZ:Lʢ|3KMDF^g6-?/гojp¼d?#-u!? QJU`sPV_@?ծsi {$rWIQ B(x{qQ/>j^W2@"^63wE#3&<Ƿ3]t<5-xwg(_1U> -^Keu<͟ϼG5yK}|Mf8=De@= Xu-/Hޕ8 vGy=_MA }6Q0خxw7 }YjA 5BwR|'t$˦o;bJeD _OIz"{(kEdWaR$_*s}]+_Ⱨ۪9-jA\tn`(^ - ;,ROM)= l&^+,Vh8G0F d*:8yJ>WkPvm j~C[ DbZU -ŏfġ6=.R.KQq[j4ńw$Xc˨l)<+G7+z+T*j/ # -DAn β%Eo"22ZۮiZzQ )-׎0r"Aݏa`7UWmQX\zq_*[醾*ʮ7si$Z?P#Ap,{|?$1x1 x kTrvy)D@orGFY0,s!\OmJ̛̊ʉCvۍ޶*<6]@`>stream -HRU HLO )JI-J/N,KUH/I,I-J)*g䗃DxTU]x  -endstream endobj 33 0 obj <>stream -HWi[K~a$aHAb|%2 ⩪S۩RI?g$x?o½De˗K֬_<-3?2M.+fܘn~ձ~[I,jzMè'$P,3;^0@FC+P궭Dm$I/TcE ( -'Fs ZUyPyH:X וC)$|+ Tw0Y ֖Bst~Qh:FY(VW$ 4@n,vUK;M]n~e8Xdtյ#2>CҎՏoJh L/-#M y۫ ty& E(: ki雾ſ\{dH+{]iLQ~,nl ,fӁ$g)=^ymeA+(2-'0e*W^c)(5J0>{Rguv-;1Z0ei/1#ZT/6ܘRh;a_HÕ_qrΥJQ 9MQPpp8:@fnIhW6vM4hnp QZVva^^osHjZ -Tvҧfk %Ll =5S_Ri[+ .w5>۳ >r0io$>Ph;aYfkj:jkUUsؐOMg(!תzY0ZfɥM sϳ\F!Y%@Fo~gY!Mq -YUѯ/lgjKV[cP -p.DA- -}/c_Oot p{ %]]qgA_=y -ZwJZz,~˝LP8ˏ:xB60JVEcolẮ{{.HF5h0ο&5RnD(a(f8e1;Phl+E?TGFnSE_'ӌ/ND,#ѣ x] ?XUPQl4Q{t~|"t+xOTdc/:].{iPp֡Mk1"cYVć3*}^g46L\\2; N)Vo`߀ - -S 񰓏 6J͎ʓZZ}p3j U - Za>k$Mw݈+BnW$PfNFx,;P繠LZkUevrXqC9fQ&_ʯB]nZ Bz,F8i/5;[[Y")M54Uo䧦Érrsb$*e!IN_B<.9D}H#5*\yxE-Fab>Єg ʕ6>'LTF> O#ǒFN>+.iFP6iQ72'S| |bgPleᇗTGcZl?-D ]9"{Zu(9ȵ;.-^WDÕ#9 -CfCs/}JqyUBEPEݯƐL_sf,Odp|bG[CC@Rrrxq/^|vI#MJ9v5; -wMh*9W`b ə[xxT"P"΢[;>\~08xGOIf1Xq%b'H9IFf1E -dj5A aT.Db;3rWળl(j`g$<(ФAՖ:dvv?+tɪZ#iT(,Pi#V"`=FkF#=9'1c5w, "6#fs.~ eɚ.=fr8zH x15E:iS+VmS+R ?2Ē;]Xm..(J Ҷ2% !*vyٖ] L=ֆe< lo&Ne9kCoS`mКeNU"\#!rYl :W!݃ =b-'VA쾼IN^y@ia:'vP0ߌC+zS08쿍?H<`fHW)(^ۡW;y}ظ Y_[sew,}[3ӮW400ͷ:*6!n5bV_?ϴUPS v Xo>TH>'6* |,~OT\R̵RT%t87?ﶵUboa~ET|q}oN|e_߆79% 'N:2EJ]p|=2.~=Q3Vi@owCY4Nx(vzFnR<Ŷ*~OqE?ޫl+yfkE22I0(""'yIH@0|IUWծ]UVo{Lƽ:?ӮNUݎ:H '\/7ZhnU7(u` KY林 3^Hi`RtHU^t>Sl[F]7|;e5={=8m|qFATWJMk'g0SI5J(q6.k5ׇ`ç_,lͶ97C+ƚ~o0x22u'z*Aጠ0'C0bZߒ jZ gYOw͑-& =>,ȋ1Mw;qqɲ)]h99ʶ `xIhPNAGV~>Y#})fqa9 emyzy o78(Aa<# % An>m o7,~IZdOކin.Gx"AP?D}.CD -@||ouͣwj=v]hǃZlz!Zˇ V/:1C P_EM;E,ԡ>drv! 6"Q[ sp8抴bS#F,7HV漁pi`A\v?<6~mBrr Æcԕ:RjOImLeleE:Gr ߝGJa: %hA%'o$>jg\״QIXPR?y.Ys2c;XiD1O4dp $ IY(JA4dxepν'z#)zāxM\=4 - -)HzMTA?{+\{zjÞإg/V]\Ez[9~Qh^()O+wSӞBjjO_S&x5*#Iuc2Ytߚ~rYpZ#BATR$F yׇ~'Qg,RHhr-88%˟2p g$-ͥÎɼ>L#ƥ&p3b+>ԻLˬt˼rq>uN[d_4B0(O'Ie*1(:'\˝AZC՟a’ ܢ.˞+O?p$ȊԦ"p T*y b\(DB~N(f괊_ֻ@)@b٠bS!Rc 6|į'dsŰFX9a\q뫾G\[+}(X'͙?֫t)% ?xPYQM\ -Ȣ\DYg~kS ̪"3ADGٕWJ(e(T[>Ev*b WPc{W!P7Gq{rX캲c(>quq5Iws="E"ZϺc%^o4 )geow:5xA>`SbĚO^m8@Q0Œ8\?R O$g^1:c`澬c&mSLmC,e&pLOKG1&F-o:y n^0-XTݾ/C⇧Hvwؙ]8MK6e&C U|v1R xQx1]C&ݳpxۓ'@KJLpv*Dmmh² t٨sNh9 -0G!=/D[}01Q{S?~⻞߲h-BAE `٘)(Yyuc ?ՠ/W%;ύ uM/7xw6q";̃$ӼbS s,Bk@z@I<;6Muz -KTaw\v_R['j%ܴ&%ϯN<\.!QWNB7}lq,_.2r4K #$c;K`>Il>ysC30yk_V?ԗ6|[ imtU_Efe -,#s ǗNAB ]S֧I[ņ:E6| f5FocUX8 6Aڪp^+ k>ϐiqpIùmNo D.uByDB~l,>8*\dwtdKf,ؘc=5&?Zo}1l28w*=6UDM8ɆH$Kv19Sh367>!L)wݎ`=E0h;Eop(9o$gӛ%'|0W8մbwf9!z -v>E7u8SV#J o8S*n(nē]fcq$!@1Q.9(jC%B%H4ۚbDzè !#iax̎8U#g#Oܪ^Tm0gsMŸ+ybz 20I;WrR6Ҿ,ZZ|XT,RK&?干je5fgv硇|kp&H4~Y>;Ł/շ\;UpIs,<{m {y.(=71B6;#l~pd¹7N8-ů=X<=jnZ: Y 2}ocx#XqR,Y[NM**hK+amSۆGB7Q/@exL jEMP6GF殗Jn hpY>ҶΛqXqY?!ț /U7Ϧ3sV Gf{oZQKV`c*#R匑v! -_$pLOʜN*Ƙㅱq&Xػ)b`nYze,Z0C OAqqw=}"i\l2qf1R x oܣpa{?vI:?fq>{x D}u2wÇJϻ?~4fjPZm?D T^J'q0Kwg dǕF)H;N@|:1/19p m,DW5 KF BEWdق$EM ?=ǁlCPLCR4 -@HDL]%Eu ?:my@TI:xʂP"k%{kU&v\aeAH%MB蒦(% $CWuO‹*)aji\bx+Vƒ a&a6-Xub2IL !|%}3( l(I N%CF CU8:pTQ4,L !&dCt&1MYaq0 (JĢDeT $+UXd ?Ԡ*$ -1Des\dB: Zt[HhCQmE8QHtMaE f2^J8]wp&]N9өLr'@ NY@$/`K_ΚA e`-MH$cVS -az[ŷ8;SU 7O63[4Ì!pP%eFz339 /LE6Q^дB3"nEyNd/E/cU^PHyw1K#f.eb@7 |1jt@ѡ`Pd >j7@r(I70]TnPڍNFܔYKJrF\JO EhcB%GxkCs[vp\ꁩ>j=—D'V҃oۦ\zbdG@w)z%+; c+IHXq[;Q5OYuB%8( s9n9 -6k%Q!Qpz yF0Wz/x bLɮV}sqsI7j &4%UV)!K!*5YBf1c0y!,;v\~\;J@:PeՁbPw]>;Λbh*Wwv?Kk,lW޺cSf.Қ-PBXyO¶&j_7" -4"_p{f5{إ) s@ -aTW* -w8r{}ڊCr_Kp&J | -| İ+7cʨ8R\c3.4¯PM.<BnVsAe¯P‘'Ԉ[$[ ywjxdaMVl(ɂ+ -u8/+ptj\GCe_ᷩ@ gy4Y!.1G)4.;d_,4ʕEIEr* F]#*s+v3=EzA=~ߏ:ʘ*OGC\S>ϒf_ -I\,zAE¯e8jS{74Y$ -Oܷf{7YVz6u;ʤhHڏ3̦d+>uqQ: -F}w{C3\om~HMG=u{k& ]{kÄR>c~kCrBlA\&4+r-hom~H}?4Ym۟m~ [j^WCj9H)\&|A_Ι6?)t;RvHykCz9H]Mz9gcf^~?yM75ݼ~k4W\U然"uB^Wÿ+ u],; -M{XFIiG]Tu`TS¯p;jzPPeWm(["I΄Ro^Nz},Mj+^l(Az\= ègxQ,MjzS^.0J mYqMzҨi_F/AA +JpϏvƻ59iNzM&; PW}<\ -C'ݓY!rܵ[Wn\?ZcsM_SףjpVSAǃaMR]1M7$>DtS -&|R+8u -Ntp㿹S\Iڒ -&|)\I,a Hnf P×ݬwBsh8ffIͣ{ _JXpo`]l`on#@ȉƽ@" 1b>:u5\+E.jB poyzq -݌w=` -0DsCγ)Cx|b/_.{eQJQh$2N͠g.>DN -͠..?ӇC6rCTpp9}Ƥ $QaǠ!יCXV$٘:A Ov®>|]sm{B;T6CN,O*?tӲ?VOt"p+ -U]3!*5|+DM 1s99I?[5)s99B/4T[&B09%Ihf8ha.0gd# \aB9<aB3T` p !3Td{y\Ύ>\_%TSn WfsJ0&敹;psF:r8 \|9# e8/3e.gxB%a`a.gf3Pfh "3TlЁ:2CGf 5E3-A)NB[4x3s97`9#  3s9`9# hu6033YD3  , sF !3TdЀ:0CGfh a 39%B'~*b2BT} - :P! -Ik _I K -> -&|9Y1 toP^mj׽]3lZ6c[°b3(-U@5[:vnNc<4k!+{ vR}zF5}"#JgdV^IFP@ { -Q]%IPK1lG%*64,`i/"l -_ )ڞ-P=,ce\~лʺn "v%:uދUW+U~֝]i@ -ևG@R*dh+{U|({?lWIEP񡅲[W5|]zJδX0Y2n1\e ?e$Y4W R|D0jnʟ>eq6M%d7(')ow5< -S2)Lw N9:SrfiVt5>'(GڎYVj|8EO -endstream endobj 34 0 obj <>stream -H;#?(7&ˡ҅ nV:ƺk 0w |`bV[=-ܞ߿ AR$n$d5?,floxS 玏m׺up[A7 7o|9Q pՑ~Ӈدf_5e9wtob?]Hp <`aoq{;N} "qN{4=̃A<58O䖝:8SBvJs¢iߎ.r>3N$9bIf&"3yY?M;#:A1i]Apy&C@C<OiY)C@C4\qLƧ*q8, AfM%2A8dϮvU͇8*  R>ͧE4421fgv[Ƀ-ͺ\`Qvg"HZ&o 2cOƇgb]FoOŴ)LI {K6]UuY#R )D Ȏs¢#};gnR@>L`hԃ>āaԭb -4d *5 E˭ z-ο}F=FN6p |m]ͯ -Oey~9!@?kIMbP7ɀn1Bo@~ 顰\, -%"N<9 "Sux}{]'閵]:]G]񑆪Q|a}6⎢f4mCds2YcǾՠyT5 -WhQ&[!{ -*t -*tKGv}#RЕ¯W W3(~Mx_U9d^u:A22'3e7 }> 6#ޚ)=E4M+v$ H*d|?$u16 -hWa>]ūKوP-om\lCPG1vB1}|Hz|zR}+{4tp<3R?-'c-kGgP$kX4񬑎"NcjjP5+[,:gHpLp c_8dM!6:ynL6G#h[Dz]))s~=? -SQ|Hcڠ:@ ;rOtUb -vc0/g81w9 BfP/7c0w(N2%,KL%KhP˔_ h!زŦm,7^QV1wԥ9r -rKtˊ YMa.m-j:\=K>3z5WApSAH#CcPNޘȩ0}9uTacX>dL!WA75!SaUgE@\q2Cbq^#GcFNTr" B&YcEH+iFAWeY7@[ ;vǐ:[;#՜%N9O}9p'j.z w0Ñi}p|tDA8&U * CiZTbCk#p5Ѯ[_%r(/jn7i us>R,7]냙43c>~sdBExB#h -a+A8p}ڍkKXv%h8ܴqpZpч!k1AZBG*7^ədVU'@p78eW]1~phvҵwаj8kZBqn8@i~T|JR<\:\25ߝ5K% iYTz͛- WA/4eܢFc`_ݤ&bՈ \aWe.O67ɹ*wU!\q2]4kLh%8Z(y9 An;:)xjreFUA$ADɦ&ATA`^Δ?jvrQLy(p -2 -4 -T@PR0U"cYtUZ<'OPG²+~n):0Ek/"*-A@y 2䧷AP]@M -;\AM$h.rD.)$H34Lvkytu7'JpnZ*x:Amm.<DTV>~<{8 v<g[VTw9,NF\׼9`F\%ҦL`UR/:PDf);,cAj A~PVo$?*(k2!TB$1OeM,C4i2U/! _jB3/tWfYǔ/~n7DwXS*HAWTMWL/A9lcIv%vY.M!^Iyw\qsVB{{BmU4KN$j *]o7c@ 7_d %]^ױ^KyX1 Ax)/,x^A*ylpD`Y%YF U9՗4|Z}20]8QPx>6h?2$!?bYjZT-/p#TJ B)i#پYO#X"0hBjPBN@X`-[MDgx aP@ڲM:y@o* -8Ang%T TKM@,Z@8/# g!Z9UMuz'UY%#]bXjq?c8;&5!2i*̶qeft/KU@E|NǘT؃'gt>yo[ 1axcd] 1;8J~91@ (!ZW]K6IYn߿%BƆo1V|oEõ`S3OHûZ@ ~F H+ ɋ]ؽ_8T3vo8N%2xDe'Ĩ<Ø@HXT,5|EW~ /Ų -(o&DgWJH~Q54?΃ig!NPb3KhSԋPBrY Qy8x7Q}y/GCS#Q_Ro5.eG ԳonH8"&3Y8+ye+YΣ&p0(|9cj"TjiTB8/# Uh٩{~m2f'꡸v26|J7gn;2-p Dj~=B%2Y% r9yq]S4muV-wvʼn茅. -NomHGgWHN*B:*˪Hөr_1IftUAxf2Cx*bXv$(}vhލڑ@qGdžY$a -xy%<^1%NbQUr$^7RqghvKՈ$^NnC6*mEh1DY%a'ߜl=G`]Z쾯nK)ߟcv>{q&#&AL}db6!?dV ' w )݆ZrR#w>*!w"cCQo,8N4²XF6L>D*䏃p ̶r?ƕG͗3eGe2e'AbX$ɴ ݏ&tp|{\7#Zu4JXT Wk;?^ɤ<@ԎH^C~$,; Z.́?6X~"~|!կ+#ߜoČlZivkZGvў܂NOxYѩm0BFilQ:#`36j)$L$I',Y"0K<$T+NJPAq͹|Gefn_~:b*hVzF1 -!az$ D` }aL #Bi}+*`UFY*LuWTc\|ey.*E"e'AFykRD|@iԲ#{3)B]jxޠP_ȠIX)o5z󏈻e*BTyI.ݕk((ZHX<HEZRfY7]#vWU*ǥTA16y _ @&9 3T0 8l"/ΦD 1 dD`~ &,9W&;'Y+B5R#TJ-ZѪ??FFze}45d%ق[(c/Ǟz{:ʄr?ozR PyT[&c@q4+,ϥB$,i]Bi~'>Pː&rt^Y,X>ٲlZeY&F&F/TcIVxq?'tlЛ`JzĐFI6]hŽ,~l oùr8Q g},Ȯ[:IXXZũbjz+>9At5= -zH^;pC6wfY 'ýC -D>M[ lhV݇Y=,qG -!QuCT!,HA=-I{$B&b‰|byr>Zˈ2(p5G -Hx#% -QxbnzD 5#*ӝ_DFK{f]Ҭ iZ-TP!(-]%'f[Q`2ܐ_(9fNwqj?̨ڌLZfEXCݏ.# -fTAL(*/JÃSx}%~'[R%9HRFTEnQ]Rp,[In|yhNݭ!f$@s刊dssy[?oߘn#fL7I?&CM߳Vg?!򧠶3r,)|Hw]/6}HuCLM4#9S6WLRF BFXKaoi\n-{2N1<1+'.#셧Z9=d##ow74AN!`qdnBmU(r#&*D -$0}iȄ -!4VHU,TYM23=l%\gi1 LAM?>ەIAxz%x'#˼P+uߒ{E[K*HeLn iP ="CVf,Ttϝ="fvS5i\9={! gk}iȴu|Y_,~햕R#nRqGbur{%Gof{"]\MC7mɎ#=ChRJ&L[I7 -XJ -^L~gq*hј2X;j>I6qP|T[&d91LW^Gόta/<]:%u&.ငr}))Wo4r: 6^QF <&FwQIn}jth&*0 TY~BpALX}Y -V2A$oJ@5mG{>QG)մf<[ݽ+YW;QJ̴y#^T,$:-T[s w U7oY޼r&l%7nJ -')"U[^\y͕ӳz92k__,qe[YqG%ʲӸދP0 -i؋RҾ|{1&݀Ҿ@6Vڢㅼxmv[?H tUtc#9\93%>iG /V%Glދа+{ݱ򄩶LZM?y"8qĬc1<]:{ Bu4Y#s-Oe[愶bP!*NNhKG&F!}ndɡP -"S(A(s̞WgY5]7H<f"Ӡ!y,[ ա /wnOA?(ebY޶A -?!/6~J;Q7cZSwGɼKTFuÚvF_bnOJ`kOA0=^D,T'u~F&(WuspX:'0~}dr@C04+S/?V8H'-i r/&CVsB|m t!i℀L R_ lhV6s.Y=-qg:5In߇`GI\2| :#6Wxhc ^UPymU[F=Od'z3c,#KU"'F:=5mӢN|I\l"kul+ڬD#$YhV4Y-q{ -!}Gn1*8Qet/ 1vKEYF1%jLeen^$e+!|vqoQcj\XK]?~,J|RBhȹ:Z:l"hkh#BTS I[O5Y>-HV#G -'v]U6 wN 0~Ә1̘Jli9z0kv펢r岱U˭Z/zO=dj f/V#GlwXr?KT|_.lme܅ɉo-%1W/6&p&MeeJD}r偓+^EwcK[OM;ʸzvs| uxdv|f[ѵ/IjXVmb_P޹Btۼa͗EjC橅p -NE-*DC=C^|!jP!z'Va D}3[6̸Y%6xQ'^dXI|3݃[ c!$ijjĶZ^~ xPs~^hg׉pbOi]%VBbM/˪RH 7(!h~/'.k ̊BRzYq}i.4"@uY _ۑ;Zޑ ̙&Zl%4W1gtoG< ]9LhW+Nt٣:쩪ߤY{9`qf|u`re!C$IbY=fͳ -Ѭ l&-Ym!yCdP=AquY_FpV.Û]_7lsU?KO/MF_.3r85RVA AݵQnY#dB -$TșH`~ ^9 MY!TP!2.P9uW1P9'J#H=?*&5:;~h繄AY ;=7,[I4В9 -FSř zk[l=)qТߐճZ?jAAe5uY!ɩIN8+Q -x eL(ݞ-uҖkR'"4GV"B9ÓSMz dtP9[/$X -vOZjŏ>MxC|v/;zS~[oSZ\`$M#D=+pMpx3gsuoHB>꽬%w -~G5e9s,lru**SyK0Is8lCt̪$Iz D'Vp!xg{rt:7$j[a?d!* L/6%-~YVmO<Ȩ:I!1~ckV~+f؛QAҁ8:쌇 ħ,3Y, D\Mt -D$>]WȭE-ڙކCNΥNΥNY列C$Ad "o7YE_=չ:G8Z|,ՍxuGKc޻ͶZlXVm~7{P{6I?nPfݟfPFwU,/OKe2xpW/A{]<W2Ė lyV!U \KV꼎˳ -!yWPaL"h|?-S?JzI"jW\_&s1%eXIt2b(DryV6):_7&SDLȉfI)C ѳzwqܖW]DV!U !_9=d5kp"TtImyvĹݠ?$f4XOOA3ZX_}Btԯ<3 OjeGq] 'B"$&&ײtY&,x3V@{O -endstream endobj 35 0 obj <>stream -H- & < 81z=Ū"ufL0(X:kZ8g1Q/bV8ײ:\V<~+6~AW 뇀W_|B],O`l'cxmdNi_g|u//'r8BC,Obeⷆ/'"[o/?~wH}|m6l^e?O Gl -)oD :1Zb>Fr}NkhgMJB/0YLQio%xPbXSK_v%r p[/-W`';*R^6 j\[5"SFݺbIOޛ"US66- xm+_Vk4Dj)ܷL:WX%5e;K\HP'qb2r'V̱Ͱy=Dm-( :Db/I&T#e 6񋄉bu7`bNkIWCsd-1* ZaEs{fsB\ |?=_ϝ܄Ny!|$,.7 0wzC͛wAބ:hAr]yXS7D iDըn36i7%0\ln[_< NqDt Yp !=NeOB= VrZF(r&GO;Tf~e Fpgn/W .\wxl/S $"'28s !{8#"Q[4on ;ATeaAߑ)R*v3du֠7/pkc5!PQ,<-_lq*PBrztI+~c/l*ce𥉾ҨI?j3[o1)79‿ \` 7A'ɠdF/Ҧ@ -rfhq@* [ə[Vuɺ+g\3T'pܶ薅Mnѧ>S!1g"yN^$ܣ @Za MKMf&6S? $YϠnVׄ]சA9Hi/cocXPA<~wĿ#H̅ < i;Y? -=( ^P^GrـP?!37D5*BNLLLM"4(;zBq#ڵڕʹX'WvJ@e;=w^"x^!9P/*W\01f0?$T -w߷cRpW\|.9q.`+)&驠.*LFMs) + dJ^U -//@lz* [ɩ97CVPWoAVh_UE>*cߓZ1?D-*35,e"z_u3[2s Tc@v?DUXrEwZ7V{Rwh[ DQ]K)K* 4Wjzy8de͂~~yGf8qӺl'&@ 0q T T粛Y^{+ٲTyٙ *&F`TŝXR q/8^e:s*t -dz 4F-Ds0I3(uso"Kջ_;0 uH^?R{-|qW:AA2 e/utnlMhnbhAdlRf@4g47Y=C:N -Pͣ.Is__|&-i|BaE,-f~",C h 3d ~0K`)@VUѓe9)u( ^#+V9`%BT{}G!d#$GW Nhumum=2?ԅ%<0F}gVKU@iY-TBAɣiAQi ɗL r7d)q?'@xuǤg" FpIf#9 :֓sM]]Sl%+rbV #-T866bX`b/r*CnwxIm;'8 l`#,y>JOx]/e5ʙGp2O衊^z]ٔ^qANqEx)F!lO=vY>09ԇ)rJr/7UF*fpw_հP{9 ^ǐAY/&ĬgiEhB!9}s[O6{Jy.EA2Ǥ"T]PAb\Fֲ%zH$rK<ܖ=t[q@Sq3T F/nN,eCA}6+6nkiv S6#}ccm9/‚78 !F6:,AI~:>D-[@\aeEt&™G;8T`8VL(feٺCv=>^q,=6YM>Hښec T$<?x#>:q=<,u83AT]q +$9wJDzHTk-4="$&FRVql&mpCŸd! ~!Y$D@Th^ -N[.!&և~6n]vL6 fۛQq?fr] PAb\ӂ6勞~ - ȞIN ,OUa/w?A?ԓsH9Ã>P#$*9!"A#U*l_ Ŏl=/s1Āt:dXe;),ԧH#DZ΄* DC-eb^4TBA<ȍBQCrc3P@%t@( g`xb9O,3iV -srl&(&"j$Aϕ<\Brg YATz#+R%9R" ͋9B"jr,E#zY`mʇ/|{eeu 9=BTrh%X(Z[a`Y}ҽwO8 m 9QfʸPg TL*Bq>1 ML^IKxJ{ -̈́a&E[Mދ x&/PATXbVA4'皲zYC&"2%*zThσ}rա~5CE5 퓫po!gx)IH]Zڨ1~« 6D 5]!0?*&#ArV  -PA*Tni1 fUs<=L͕c3AF@xRQ?gǠX8UUMI=4 -Bg 6#"lefz9 W^)+BYlT5UMT-%9 D↵pd ~{"P/$r  ,&*ާ~5SK7 M˵˻3ZAlep^5@NC0 jOe<4 ]"T#{vg[!h-ldx=Et!T}޲\Y ı:Z.r6mzvonO-&o&mrpl&ۑM,%HAlG1>b"xAc,!:@uIJIU[s fqEvIR"@\]lG1)PL0y7+cQ9zrZhSg sv=#C~hLk n8"n~dZ{j째@/*}&ŶZ۴7fPA3SI 5/"Շh -CA} go [Ak|v>-Wa#E ?yA'e7=~$;dUҍU U΃fPD@T$!ߐ&goVj{t&E@`T,z@T "ZBrpEHLJoLڈ႟ qB]f}Ǡgj$[ϓK`D|2ϚZ71oK! D=D"T@1b{" Ór{N d '4}mmLR݌36]bα",'9Bb[,`= @,W-u{nW1}c_;Ey&x1'-%0bxdӯ \{߉{zI= :VV_s+$9wJLH/9rΡL866b8E^M ? S5"htfc.$N7t]}8DYˍbxUߪ(j B>oAN.%X^')&r ϦCUQ f#l d8X4 SQ%X-D\Pg5$3j7xlSQ Jur5t@< -.(γy8sy8FaR5putH&l_B ֩adž>Ä7g&~kxijʶ7L47Mm\FI.?L(Wod -qs ҫ*qs.+ ӣ -k`A ̆ߐWj[5meNc?2wٽןpߔ:愸r'M02xxC<HzYRowְ)Ĕ7rP'xLt++@$uso ev?iMgxQvt^̓_7^)/p\9Sh?íER Cz\z#{^#׭!-vCh Oy ZYz9/.]Hv㒁"ȰLd"d>w4*)ڮ綸Cs9v ;*쑶]E%bZTzQ-Kv3F+~FUW7V$Ou;n#Ivaϙ|@o OZ9]U8!|56 1{ "gb۫A)Z5_ 6rrkR 8V謆JTs6jrU5w3*U "xCrrM>Q](޳kqmu|jܩ( r'$ȅ.p[G/z~^$R1I[7oM -mkbr&4E&M-߇ï[~12SI0#Φ<)b( HXV`KFac57\E] - QW^b^<<|>g 7|~ 9MlA1+q3A9@7&P7=ʟJC~mRϗ/V $pP1;#:p&< .fdML3nlb b*VMV#71pLCqCmk %f1^}KQo/| '\-'he -H]8D&LV`/m*.ה7U7@Ӧ 2#viۤ0:$Uc"CpBaǑ{p+f+7JO?L0Kg"A/顁pp~%򖎳t} j;5wE/!]McQr"#qb+/X%'-Ò G_CroUSS穫Sg]m[PwdzaP 'kѽ;,(#c?T+-SlXKP0nb**ʖô}^:ru &פ0)̏ a#Fs8b5<@SHSἺT1Hs`cå7|uG&8KgZi:L{N84OY\Etb2?wHܵEk5THΓV_ъ]-OH2W]E62͕Bwo>. '}ɰ/~D\ ;@?֚BIu[Ӑ `X: E9{,i8 \#\!]ŽeZ@CD\VW2(\4FOވ OgqU h o` ZJv&v'WzH{m#875,`m7<bWakR!.H[B[9juvDXĤZhQ2iK|tNK*!2/l]S/Ṳ;ٲ%K\8龪U}_ٽF@%~t%{#JӅ> vAΑRQe*"D|1nx\\t>\q$j7;]m;/NNFWgcugG4*'[U7VϥTAA zo) TG(Iؖ$l=]I0]s)ƺPQj*]մYKJ{L.k"7|̣Gp'O[֦$*ԑ8vY=\@n/B#xX[^"VwSͫtd 7]PW϶8 ,zr>U;l•Ue:hzJn*/VѢV>/Zش{rh4Vj .z1 2[ Z+3d]0S_{fB5rSH!Bg MgA*QQG SH\s!_KW``?d.$}ұnGsr纓<<8HTAjqF{'-Xn^[@pJwon  -qA vpOL~;A %\>lt *82@ AgYP_,̡nX 0% -"p3'>D ThSZhC(z.wȖEqRpG@m~;@}*#hF1|8z!c ҂ U_#":Q^~yH%fwTk~U闈=g>?J zO4G ׳ bn 7' pYHw 8fj_^ËVl0 fGmI& NK!ֵ-*\APmsSRR=awܜ=9Cj>- FZOS7Jg̺XYUjwLgkWwa~+QUDǐ'WxE.sUi Pn/c՜2kuH-?TGucRɈH`ǁ1d-ա1 -XSo.2m:=*29نpdfFNWPw{ ddiz@tl32qnB~A39Mo];I`OLBMAí4r=;Ҽ)Wq 56ZH#*~uQcp~W ʌ\v2#dJ ^)2->3Ky -endstream endobj 36 0 obj <>stream -HWr, UPh;P͙xnzT9Sx%h:i ƃ3?Y?Ga"~?og!|,ql~H?z{"G*lG3~T'RgMcOw%?{?i6N | yҐ'Yd?󃆛'b+ @d /Si'i_?.ғOy'in&ik1&7>Ѕ *O1_a/ 9:橲JWr3_úUЫ(PZQ @4*A&EiK0Ѥ<`6DH %zՄzrnz氺ϳ\ -@&AL9z pVpaCH]cހEcz_?"(DFQL=L|i7/&M -H'USXXQ2elI~gY~c+q1V*bC5?t.g.t[Q]a­*) O¾y\ʹ ȩ >A?I`#K;p(>sd^$q 8Cq#N&qҘ<<12Èِ/Yq,OD@E2&N<~O )o# j+ю֨[ՙA#.#@G̍E &NNa @Vu멪SH&n?ss^WU): |_#*OOE"bP5cڿ!֥ VL_aB IY!vYzy`Y8ͷz/12@ ]09#d'&ĝ=hV\Lk!_Nl_ l$zs-M,mx·Y(I/v&3[X ._^ kE*{#zm ˜.*Cpmk:`hcwI҇3" vH4noD;49#q j@P!Rhty/%hO[J}aӇX+a(dQ\+V#fmpnmhW:LP[d a!Э΁qL uQf1Q~ M-bcQM" ?^zO,/ "YYE⨚$}0XAqyTFE -Z\fr\+X҆W-BHHKܱ$CY ([Z?lRgf 12&\YιphK]?5?fۿtPU1_7,*0 B- i X+%h^DQA%MTLxJm3F@ Lʱ60~eq{u=Fw:m9\nN$ -ftk^VҦOFE"=apAְk¬(.ӑ9Vfd<n&0&3'Kܳ|{Ei25wSOĜ[UVsnMF'AB,ݿw/pH +n -b߭;hv,c -Έf@yՆ;6_zF߰9u+ #N1P9~  -mi6A}vnmhwCx0,7|8߰9NF ĝ*9R ӵf5ű6{d ļR;]j*~Ƀ">=ޯh}&i|+WW]2 &xU#E%XvZMZ"<tFsGZt9kA09AG|^LW_ɊIRk*ɟd")KU/n@ܮn3\!?,$K GS4x+I@_5U,>9s\${"S/vH$@JmeA `"6r=gc -@fD<'NE s[<juˬ36BK4NU 0(ESڃ٫\6IzC٘EǎIhowz GjENZ2u쇼dcdr# 9,MQ` Amm.ׁWM%*::D5)Nmb5Ph8ƠW }~| I.{l{K*C.y>Ho=U'r#CquCt**xSc[|g`/1m -Y㒂#t;0Ľ>rC'@'/0pSM= @gr8v3zeqʴ/&}`"C;Yz_e=sux mv rϸwο^D.niq>W<1ߓyp%)@9}qV,T)%d0h Ϡ Ҳmg77k.=F@H<1M q#m)eЃO}I$R6m`\)Dc?Hw`ʪe[~_sd5pM%3e7BAe"GX\cynɛ\&*YDr2"cFʋ6Ysw`Y -eL/c;sn ' ,ӁO7a_Ouke ֆob߂lsBnVXhu줟a,~ ` -٢0 b9%ӏ?m@nxz 4s1B| lgFiD!nZ8m=جMP㡴@fk/d[]gE~E@ޝj_>Rf*vc67i5 A2?Aqyk|׃YA4b B>tt&nHQS@jX9oP@69ZNT1SvcQ!L \q$7['ْ ǐBNU##"ϥjdHҍ$5;@ĵ饶~fmHDf5bx1~oȍ#7oU#Voo@蘟o@юQ&-x5b5@`'avr= -zh`ALS|qgrf -Эɥw@|:\n}lM9T VUuS/$6Mv6%j3c(r[^FY)_H׃x)k7峮>T7Au0c -@/}j]@iKR04)1!!G`*ӾZmjLc( - (h 6k^<٭$OK*_RGg / $/n0g0)!(M6+RH"{4訃S;Co&G3a@J7=II71 RTչ1X~%j/QQzp0V5 Hy|ʶ%I>48aPrS.RXg(W,@D-UNī'$vI5$UNIyd”o;Z)# fQ/-]͍/=BN7WPJ}!͐X;,@=fϺ !٭\E ,Q# -hwtne ݻk-tt\TY;ۼ+tOT n; J :Y`*4ƾ8w1n}VLZZ 50kioVO;Ah &~q-D .͖j'EJ`tfk]nl^Iouh5.[&ϴv jtnA=1;mj@n,nvcbLY.9_!qC!7nA'j:*ږmX]||v{@š?=N2 Z$ -E5Fvc3kxHa*L]w#!LuΞ)F6[f` ]N؊cҚgDxFlZ$jA $&[ԣ{ugq1uu w4 WȺ}+qr$9P5*7E|Gר6ˍ3WcZ?Q 0GYuXq(X\HKFiK*b$^Ǝ6Vǯ ;:n{ &Ztd;YP[ʚ[mE϶ lvfx!ʠyE`!3dHV-m Dln Mh8MIƾ5_+O;|6d /b$e  UƆ&fh]cIr0u -4~ miwSiMg676Ѩ![ }p((ֺrEyR3|B 0x#YPt+eT8+HSѦ  -"$k,0)O4 >Ĕtb|/ҧo01TOm}1N\UQWٕy99Le>Vxt+ 'QLew{X[HN9Ŗ릜*s+| /|{̾zװmS|nY=*FͰvl0MYs )e>;̳i[!MPwETv2qm@Pl"GrF#3oӲߡMrL$7Y-~yf.ba4e|P 0܍a7qϬT>uo`7)9[M?S[x9|6m}l5^Ց=ߒkGEi=2Ngʷ,nt1X(d?a3??\UэkPi=Kme,Lw;[(32TŚ6D^?̻"q=h?&w(>V 3ŌwJ9xq=Peعf5ux؁BS|4]jhVc{PP^q;Amn32㖵C91T9g*vpC9aeugSa03^4o͸emW -M"Uў!PXdb-{|u7u{_m ܉>;n?"ל}x/21J{yo0.o~{΂^Dv[`uz!q>P>~h.f 7 -fX)6_C\sCf;HxoPh͇Z\)5|!ѓF׫wrSPƯ}6gĘ+*ZnjB-9v:xH¥13<$_\Ƹ*)׌?2ʪzy)p M*I;WP&KG<Ӈ#fRˎ޲^/d0{yũ?ڧP!y9ZZC"`d^JSVRe5%fSx -RBUC2jȊWBhT4TPtR˙6*N0K M/^(v>y1..OG4.P.|\<-ƐCj1"\1rQ9Je~(1[wi'IYSr3|OyV:`-['R4z,LXd@.GzJ-4 [j V8L `&YCFZ$# (Pk$C5o2 ȑG@$F W."H@S\E.Tl-G.4ܳJ^p.@! W+7?\LejmwŅri2p1%ȅ~pmh#u3BSN[/G1<.{0<`փ "!<\$<\yqx.[؉`@:0{.G_ aCo*y^ bt`d@|σb -6 y0" o\qs\&sFrŵ^[/1p/w$q`FR#~=bX b 9eGC;- -NL%?d$Z]AQtn -d@<#@@JxR*q 2āF"`@˭C՚82{$CJɀw{$C:$0G64Ŏ (:6hv9_y.*915ai98p!ဈF86_^4Cu#^4uЀ2qD ]ƣh AGJ) _(;Q^t hxyА;CC U4Trvuux#DOx%h ?hL=h = mȃ~ -hhNx4p &,h -A=PpGc*51Г0:4d6}"Z? -_^6 -ոD6x(Wmsi:lx"xGzġ]Ƴh UnEc I~VhVE㹅 GzĊ78Q=T=Gh(γk@䚞]hMšQ;uEh۳kؐBC] \M4.Ĩ/<gCĒe.ϲbm'Ύ PZ} xw[%wmB)nS-00 GVb*6fio_^4ɄGh4TQ~UAh4m1zebU ,V2@H i`7dk0b1 - *!{et^TWBN -9iV i$% lck/i%H\ NJ"VPHFpޚb?!i~K%d Ɔ[%o=66>+Ş*ͺ2V?e_t{lM2g ]8a0{#.ӥ %JO]tBq"m]bD}D`k0Vz,atȱ8aMT0\SrУ)CI1a U`eeSF5aqC2Lh)=kʘдSa6ȧ -zNM۩j_}E Tŭ4ok*V-[FsF,xֻزU7nJh g2'ц+4Γf 1Ŝ'$qqX۫tQŬ#5+;֍f>{~;[֍fD։f*^&WM{`6 *>/s5Bq6)g/ks΁&+igsw&f1kN$ m\~e֟974+ͧ{YP-Ӛ_ͩۤYBĺ^ -­Rk~VUz3R=Wh>:#'efמx9c~;twgYӞ99g~sv]5Gם98k}c[̜{I35vc{cvc2ܑ[l-&U?RGE/PN>?ͯO_\}BDAtn`W̝x_ :_JT1w`WM!Ա5:+)ՆvM9L}Ym%䖲z]In 5Vl"fož/mMNLpe -k7{˒?~O}_K`= "}2Ї3kX̺+Vw }_[ۨ!~ )5M_9(KշGuH%&!pk4^[k1]E\.}Y% @ -*WѠ,ȂFnÁmL,dC7Y=@&Lx9g"/3xmɾ/ B=ho?FM>1BhP*&(E^Xx1_۟}/50)~(ATH!҄xՉȈ>uқ%Z0$jCWmLd2IkNiQ~hJc/^OiOq}\_h ?00@Rĺʩ3ʥ -JP$ȓzQ80HCUzM;$ -ƄU:6*r2yɈCt8j ìsO-[(HI^9f '~d*$GI$?^Y݆$G?Dվf>mm@ڕxP\"eWq/ʥ)髸Ķ:2f9gT'g?z(./mV\FBiE/r(n/P\~+.ACq/$\q97h{!˛q+.-979P\{-q(l=T\uۘފPכP(u+.CZdQ\G[qY|׭, -b -.o :Ҍ7렩Pħ/3fQp"17xϘ813f!?/K`k Au]PॶTFyeuT-YcJGZ#F{ 5_*pb=7ΘP]6e4JW,3 -Qd_\ftLt@J7[}&H"kڋ7G/3;_!~1ˌe/D|J&tF(j9h3Y<TNeL=>76! 9V/6p5d%u[q,:FY}&ᲾZ%DFNCuEQ8lF0&g1D @FŲj[EeDAE tu.pJg&t p$JdjTӱl4&Ǐ[~Q۲0[z\UI&)qEjGfZZzѠ5Qj{Ã2=s>e4ҤL ,|6;*\Vޯ%%bQn -L#Lv~fn|@μQ&VDUxJ7ќFXgA<&m_ :if`e[> Bd/VZyZMCUY܂ tqz2NκnL "Yqn5(Iw9%O/aI&z:,{׍Z i5Gم3ʶ<*$wⱑی}XR̠`GͫSb ~ 'oqI3y5p#><gup6dØ곚č{V{6wvjߝY ܄P8~~dtTy`⮻oP -6i eH@ESe5 0 J5I@x`"}kü6 -r~ɁAkaC 6mVD86Uĸ #:PrنʷEb=6AAp?td4KHȍ61Yַx^${,zӌ?"G"$/ q0I<>J0B 3Q{QH}ҿz]ueo8zzX+F@_Qw0Jq{"ĩ;_ی( zPDr#Ze`D\)m&R\h2\h͕%!#ڞ"D6;Բjq*.Me2X7QkXZ~%>hiٯc*{DIJ>j|[! 삗VUh >Z:b}C$2r%Yt%Y҈`7d|>Զ/ DЄc G'sf JR0(X!{|_p}/3kIb͕/\o#ҳf_Eٚ*JTu#`{6OǧZ0`+LP>,U#mX<$t일ȏMsJ߼\*;sh|#x>3?_- ?amWjU{&;;u;{sbph)i]ZErAؽl*7$lHu//x -95BxbDr=r0tهuڗG":#4S=3f)U -Gh2v=VrPW(n2+)bbYLÇFԏ穐j.9/Fkz!R#ԫL6w-#9!n%w<'!H~@Z9)Zᵣ2 zz)#M{D\I}`7IunR|7"ڮtu9ͨi`Х5ҥ9}zku[0\U= TR -@'yPU>LEuL|rY~g`Ley^<2 -0UH"8Ugc$xC* |Qm:%}P 1uҞd^ -J fO75L%hnYwz} wv]1ؼ¾2J۹Og=ghvuAsi#jlo{2) -ę˕wqhES R2B89|B_)֣(q}L {ӫP -:Q_޳jx!O_-SC&vrĆ_T=Zgc8!$(n_ ;cAD{] Xg$x#si9Zly#vڬG݃r?t&>w6r6Ĩ C2wrnj3Sj~wNAIZ`P@* -endstream endobj 37 0 obj <>stream -HtW$ hS1HWHkY82ILsoX%~~nBP-8.pp2>m $>DoCiFG Y!1㶘{$V `!$Y!f_?oGGa10ׯe+6ȶ_*%:gHTLAT+s!JV WVL`!og;3Ke)܎a0wbD.3EuQ "ǎ<_Xb -H>"[9P8|s$,lvAWnfCў-6܍оO֐,2!OA(%~R$=s;75>__o+ybَib,}^ }GTCB ]0Rt;`yw?wgG{)_#APe>EM(:`| -\B9 %R~lunR+daU\LBm~l'̍mF6ٍ H{} 0lq2+;dEi -~Q)qQ}r1NLj 9ԯiؗV&ȥ@5ܕF]\NYFH}N|Y>_5bȖ#wTlyBr Pǀ\V2Q.Pw8/ 0[=lۻAH(aߺ&VQұ.8@Tsε\[K 24b #Gn!J"`?ifJҩ\_D~bt-zqٍft@3[nӜd]xrvl5cr]O&}TY=`"IhlRx}%5,4Bq٬+NgWskl빆!Pm L$\֨eC(JEҋs}o;7u1kCw5m3[d4;CtS {܌7\GiM;LKպir褳uYd8> -rOf Q\[W]td.Ҋ Y[a3SY`g6VO)H.0~{XI߿77Bj_Ӣ5h3R2cZ oJv0 -3ϙ*}*tw -rJ$v~cݯA-i6ݕNhZr(|6Q3$4<gC(dp]2ۛ%uGf%\vzpJ2Za23S SL/uF7/k1FrLl&u$ie;U nzBt|k׆4k.j{]hYcG=ADudq<o%~#wlְ1Bb[ԋFx v*Y -%ܯRI~tEwCBOHc%ez(]N@AfIYE"Ϯw3Y'5vmIty?w3fJr 4̓@W,nEbzIZwvaMFP޻0'%pe&k^ߌl#]˜'̷;g@4!ʹD IҦˑ4CxfE O 2ލZ5tQ|k֫GKG -߹f:RgBv˸pxAQT럾豧n4^?^ŅH0 0qo5rT̘]^݈N} ;o/jϿ\XD\sB~`A|Μ"ۈ-;lHGXr<٘B#&0wZF䝍@Ib\¦[tQ]|o`d@@ǑS4x bޑ,`!t@GػYu6L.1PC>1D:_\lEAh\GkaL֛&GDZKyi]-A^uD 5C^4o!m0qQbЖ3IaRd{VF[$d5->m$g@ˊy l i)1jg{^n=E4V5yTϣdVADh1Gje6jgX{ney*Ç tsQ2q<@dHPrdJ"j'gv#ޟmf3j\UXs jFo92ճ@kXks"I$ z!a|OwE-=I3*H{w~,EuY 7?ow"v<K}9 :2릈HH@G^oiI"c z![l i#v$ m2# IRS0Y]dZ dl{(ϕҸؖ;}kH|ra?y]!hSY(HyMY`Mza]͚3jo6Ҧ8j!KuQ~!\|g7IO=[@3v98Dg;e 6]"m0>s1$Zu{OPDϛ~ΧN.\Q< eV -K#l%.bqȤ& -}yQWF-*o!_rN4JuCR[! JJHhҏBcA˔wdؖkn7L:-̊Z@@j:9F\KNxx}eJ*Mf  m=C^J\ϊ篥Ԟf1GafZ a43e¥G95\=% EvmA>m׳2+)XYk6vΞbkǹʁ4KBeT 4(_":hYy\֢BĄt[JS!G(8 -۪\@KtXӏa?Y̾ƢBr$~1^CjOm4ck9(BK~_ k,L03͊-ds ֩Z\-ԅ6USXPljOf4Hq1蔻Yn NmhD&B VGUVlY;(Yتf%FX~aqH>{&JY]N#j ܗ_vv!ufC'}7vz;IЂT:؈՜H:}h԰xG4+dܮjbCdt!Jhn֫X9JoŨۭwXZ -Ŕl76ym ",F׼C)4U(*˹BSh$RvzaތP|EY8"W'W[?d}ObOs~(9~ n%hBk -|W&<}Zc.:| cp^/mT :p]< +Z^^`- `w7)h5F5>w~wf^-&}jW丁"cJ(`;>IW;ENJ^M4lSlSlaE GsǺE,``n -rQ*֏P70 "ceZI+!yZ%ێcvQDJxPYiS\T+%%Us&2XVEVȴtۭr -0=Ľµ% -j4SLSR"žbX4S V_䝕ym=c[,̪zWzU5 JkƗ0质MF*pnrУ2E]/JY#"8Q=vW.9s4cծŠwj>OH{j7&q8ڳRT䚽I2@ČM ak*U^8DBt/0wX`y*nZ5wcy|@7Z(0(XFToJyii(eWa m&O@kLۭ*w->?ݩc?d*<ϵAУbq); _rx~ov!WgOJ24r)Bф4͇ܹ6쓩ڋ}CoD峲nOZ2 -?Ւ|)R6FM\{})"؊b\䙇߿ 볓C,;i=|8H47Jy"'}1xsN³խ1p5pƑԃmfۤ1 -$LK4H؇_h$ -&+"ypQ9/5;*xGS!~^j^l#'X0Vё NTA5Ŋd8K0ЈzM;F 쭶1@m"#ܣSY\X/ъyq_ڏ/YPd -oj;@Z6b.RSqhm!Ֆp 1 .܏0a )eTĠӺ@|꫙3Tjf; ̛^^ J1vci7Xu= +`KNi}ң{sFMCgs-/עc6VeD>c]v --D[uyoD;)4nӇڵ~=N쪣)_D{[W˅AUdb֕yGџ̣WT]i=8A?Y䃜cdUdqcOu6+Q,@%5 PR*& G3\Q9c"f#䌘 })92M ]2@ιf9z+^#]W?S e[H츬5y_}ҘULVKCJrkܲM*먡S'AV`75Tjx"ɦT4nPJöZ q[nqd}S lw1MD0UfR -4wqC` \9\ YUlQ0Vbc4vDKv^?+*> \VhЀǙ-E" -cU3pHKzR*xNr7G3Snro#/wր˛1UZ-KRB vUaGgm䦳JzC$7o`߃ĵXEb{?u8U=zaIæ6{n[.[{]w>i3le%Ci`T|6?߯N cLh1?+kc:LB|bHt00C~;mߡ'}U+ ܠw!Gw`4h0 -e=NQ ?yj)V@V+DJo &iSB1/+1X )00M$})rha M|&"MQ[(^`25>P85, -( SC`O U qu;ڋ^.Y9LS,׆iiybڇU--f3#ՃY{K -4r ̗Ah+v057 -bFT"CѢӈ[58* ĄT`vcuS!XL>T2ү` -֭bQ>GUv5QִVшi/*bѡ^%3yqDv Rֈ 4tiRrUnPPv)' Ow+˱U-@n+@7gvVh[$ƬIllT8|XHJmD"|ղTɤ_sʓBa@I;~=$zhM>v8<fGDVzC`<vęm[dCY[E7˚i釵D[0w7 wbSFEN3'4+n_a7x*aI{g0yOJT^d_~fV=zb0%|\P^ԋ2{nz.O,10YU}4QLyJ]H;Ȯ7_T M7wG)q*h.*|4ۍ< MXT-W]=u%3_`Ax`thD YKN\rB9T 9ٷw_l>_w.[ͤ#lɡ#k:ҞTf€WT893U.2 Z91ǀ@g6:6??_gQ#Y޺'|n\9cd+Nm<3mhN%6rh|gZLSN6BS'%>e~[s֥Y uȇ5A>qpgL\ڷ![[7[\7p\4M'\{]@G,BJ8 :(d5McUtUF^CRIJǰr4e; ]FpaOF=,Fr6"b9e -9$Jp٦#0}k%3Xlxoﳏ`hbiClRjOMiUu|&'%m;X[y8G%1‚fefP.|@2UBUud=0Aڰ]J\J$2ycڑBx.PgV[}vޝ -m23{rY@3_~jVm_);c/D2[jIk*U'5ԥ_Up*M֐+5 YKӈX6Sbn nt&YiȩȠo)GQ@t\,?ٹgg$*lWZ{9mlJ7}mxU2fv??o3mkk9gvk㚓4}NJ4XumtO:FMۼ){NC7j-3(Zڌh#Zo䈭W{.kdKq۰zIaRqMvh.?>nPf~}!DA=8Ɍi:qmtWP%K ED7 ꧋ĂJYQ|*/:grH/۾+:Iξpi-532@Zi\Hs"T1b5EwJ?Bֆ&\1W@ ["UprW~/w<5wtN4:VP>@Cm%%,@$] H6@RadYgwq+p=_"m+0]wDVKsԁܘHZF69ɀ@r ݞH80(I9%SzJHt\Wλ&Č(utip#X ^싹N}2]:#3X–iT'1m^ydGufĐ[kJD Lu];Zk{(`<>E"} -q[u[L'xds)z8Z#UOs4WMuAe0BDpc)w٢tXo 9Fm[5>\a;\HO@e7gaWEmɓt.=ئW.Bj+9?W5YvOwWnDZ1msUJƾ}"qC%lrX^Zj $N!AeC^wzضcn JX_oXfo8 B 2#;UR;溟k36оsa&fnCZ[_V.jE9DmPZE³֬Aǵ1AHF͝sD Ie^l,t8(,Iq#? -~T^i_~/%p~J`΅=M]yIM\u= AdP}#Y>|+^ɏ^w'҄oLInA qmklU` `ڕn7_߅YNGFEu%޼ -| e}R-{%|kx漑ט2 f" MtW ]x\n~+3Ytmhg+nŬiꓦ(5/{5rQE Vc/}dnO-Ї[eh kei13wX0k*o -G|Mlm8S[[ZBxaй+{ZNw׉wa'4 Ofhɘ~ƨؑɇ`ڸFҭ! leR/ -iX=yRUOuMZ ܫT -mӰQ8{,]کw5/2&xr,B+jN8:pVjnR:Szf1@a5'dsO*FL}wN'+!}cqEy˰#S*801alҔV83Eu@LKܖ1}iӬf ð]6ٻ8s ˓U3t#-oVCe#潢x:@xiekI:2}Wۇ>UbLHÙ-%[hr +WL9cUׅdX"v#|Xx,j|휺*hX! Bc y&+*`-~v}gzaՒ{ki[Rio{r^q\^Fv 0.RKcIiFg܃-[s03)N r"1,q(r~2EAr,܈č;=2CضTo__[yݨ;>*ј3; tقmTl ΛKIlHv 7Y,t5EY s@ ȖU*Ei%AN+]'~9S nJM1Oơ#/1DRCG kէB?؅q,m SFwSF0aedc[Fph)#222K}2$OX!#-%#;\2bIoj~ɈXRT*1/|"CE:@n%yϠZ1o-fO-yh #%(ZbB-Rd% CK :IJd-1PHMZv,Ct%֒ܭ%ߡ%k/) k=HSJ-%R2nSJkCJpESJhU_R))ٷ:d  O)<@J MRox5S$$NiEvK T%%hoO%|*[)n%~ :Ϋ$? BxekӃalAW296ܾ̯Ĕ˽xJ󠝃ªuE<+B8 s@ Y@EvP %>p_ ܇q,sck;P}&xrHKbxH܊eE y*7^`>yT̢ Q|pm_I\KTtxbFA#u%1W -+""䓩#ʬދ`J%f$ԳRz&i -A jEkz~Xy˪5 c{9'2za$Pӣ#fۗ(q$59yH>G\G" UeGAFTk3_ :,H\l__dҖ{M *zcKp/8PA zrAGL:kZM":PyJO2]S|JlFSɵ压_WesF!q݆ :4Yֵo6+ODǨIve{c=^n>"{۽;d~LluAraL`zAqN5VY޲1(z-ցZI¼ϚHvB㦳%a[^CiV^͝JУ\֋P*j̃9@7a=kda>r#33i!=rsX'8tߌ݋5 ڎc8xApbf-fv#e+:H؁,dlt9tV_Ip5ݼw԰ d&1Vms{ ]]״ -/PXT׿x\>`;*Z Yf8cm@=꫏*ܯeldPP"ݻQYBH`nı䃦;A1}'ϻė,#KcP> !3F6z.[Jc4ƭa{z.2Gi]4$3zJ'R .IMXy=)UƬ' -=Sq%8xalᔶUMfҩW@6a7Uq|J''")7^ye}'(g`:x76֜7l)b.SAQ}qy2DbLg(J:PӑB S?]݆ˤ҃)'ɔw6LjK$H װgkVHbtIXxF1p>u$13ߛkq&dl'hTN;uQ\w1Đ!iǭ?c}-{g2a|hMX av άN)4U?:k[wY>`)62̥<~v',I:Xde?!^Uu g/k`_{z7yS|}^O Ҩ#iĝ[hKTQ;/ፅnvg(9K MLl^w1G&HQ"6(%Bdm:C$xk[4evdǜ!HAnf} F1AjVv gc6!_0y]XL"B\I%>\& -if/*,ma2nlLuFP o.0*'3Նz64ON͋jDYxY0,!o0dG|@<r":]T,:צ0ex汮aOLS=@6!/'-rƉ1%-xhrq"S"9K5ȭk-(JMgu_o5!%J|+q%R%*Y=7wLv|ô$^0o\P2$AruRxXH,2@DHE #*>sݱHt p bx-ŞMQ8꽥!}L$Gk}bdU֓AD"Hh~.g<)6$ ."ccd}݋Y"Od^M!F?F2uASaf8*$2)gZu]c3x/LuOkZ;OhmEAhIn Jأ+?hKcm;s֜@(t[ {5 -}&0LȴujuxԔ9XppU ):٢t} %/1轏. +|+X'l/CbklH=ZH%]WK~x+dԌe7 v}NY=j>O3B~bi&DXO:4"?l*y(Q\*8jCnӬv׵',|.~YTy&t?9tã2]5N6Xg4dLvUe9(7(ڣ {7tVeo+`8! dK.!EMc`'vF@Fs36yZ,ˤN*US*>Fe=C))3w)}脳4&nAч@Ǜє'Bi-クBN~}Q'Za!?rz[Yc)Lk6 ͬ&'vO4Omf|#k!׌k6{c#r132:h"Gz";JWND=,g>Ge>b/\w, 2$O͵ٙ]jzNtLas-Y)]y{dEdŧ9w}عXBA۸T2C']X'bg7k.bVN^IWuv"M7sB5|38$~ 4 >RϪ\09MPt\.V$*6RqS0d#(!mVbŕ、`Rþ*J5Yc-{뉎Rh5D.hD6ؕE kfr -NpӋcqW-$_ Z]a|^?5l^BG _Ԙ;|w&ڿGHO|}'+"Zp/hg˾m%& -DYnN?Tp WkEPr3-^Ld46[&|a|{ -<tv9JC6M5ڈ| [Y72^<* ȈՂ_EjێN3ɯHs'}iFBCTp$LdȲ-TH+73мc9pʜFc5L>x/:J$)?JxaLDb{p9`3VF)kxI$RݢKqf^G@ԃb"VrH,t^PfYm[[CRh -A27 'Yl ƞU񠝏q\%WX7Fp$9hTwQxHjW˒H:YW2pU$MwF>pk$r,cԼYRe`wn~^D"x/0;6~#}Hn~?:qn9v d顈<{gFzcQI)>FyѦJ~2JlI\qbE;S~wt;LDfOPaX!2j|0 ^$}~Ϸ985=o26Y LyXG=m|q951Lُy ZvAڅhRdڍ \KsE6Gbqb<ͬ*jo䙋? ArK m|=p(6N@ vAL5 dpV|dft6}F>LNz#jk6fÔ[m7JZ3X$r1R*Cѳ$X{UW:cKkʩADF -^}xgm[wyg51*Ze*E22@Dyt8pK}걢gȴ}"W-4Q&d Dp"~q ֦ q&x0'V=j\$ϖ6-6jPtc\OnH !tN! |-W٤Nx-,a}vK/u9t_OnʙMjٵd] .k~?0PM,@t֊6xF{ h>23n?܏>5 9>3yόFg\j #~B}ӧpLh+]M̐@pY޴8v),^d_"NcI%{d1zssf.ZQ@QZVC%W/kC~YXԉ4>G+4,dP Х|0hcuS>K0ׂx!]_tvi^<_&>qȞL_^rReN B=gSk47jkK%w*aRtU|:3'{T$Xh;/!YG^U~ȯ5'ݼnTH9jaxUoM`@³n=+rA)XVuyՈ 1rP}%9fYuL֤7"{ZI\ w6&[Ճ3;[5TGTB@8WgMr}S)VodVM@^ϫ̒&rZ@"n~*)UdG]g@Җ/sM ^B - -7Vh@eqN >\թ\ Ln/0 m$ "e'M!b ޱoUlaY3rkS׈gFn{SJ}T;`K[uPzN~}Tc05a{"hB~1-,}9&ơЂL@xaiiI3ɿNx REy7U_{N_[nٲ*`}QprKdTF% -}>}TBSdT~tx^0Hw{DGR'>IM(g?ZRI!)0z>`0=]@Pơ_]m#=:єm*XL)#ahDR<'onE/UU{~͝uB0B G^%xMybzg{h{]qk(Vl<̠*lʱxB_k^=چw'2m_u,xE5T ֙0śfMYfн^Eqrf/ǰrE=L8USO8d'X^V)},t/^`N) q2t9pD L3&[>X2&RB,CcS~Cvtb1b\ACma u? -69iaR *JJ{j')Wߤa -ys>^~w>1|W|XVAD~,p/a|@ kʆ/MҰ^ћ퀟0H$'4;oX\>,z)~[| lb`&8J:EUi8тTͅR(/" C[bHzΩg}˙o@wDVi`-{Ge `\W.%1Ua̰#3eD(`,=OAgJS*M!䜥L8i)gT=0@۠]s騎YCtG>3w\6ԍl꜅T,A׬18hSUT{5DƘXQf["n*CU)r⊬ĂAgVǭH+ dlIՠ6?li .biTIb`jaKՂ&2>W45 3zhDZD@ڽgl".yvו j8dScfXѱ> *{K/| ǫU --H^`7ϵRz2 0U $IWfOl8{zp ;^`<|'qWpy36 -iAGܞelbc=Um;5#GVlA lU.JmRQ ATi/RgS4m?L$UQ0),1Tx!zw##- _2bN;k9F{n/0Xm )yEF`[_ҹ4!U2fV(8Wcx[CKK \>ҵ20n/ ?Nn z˶Gw >:oBPV!.ƺ3kl4_g{/ml59ݍ^:g\f3QJ{"&HYf -@aVN9F+ Oj[ &S <~ nFOvx -p𖥨Bm+6rGR[իHCݦ:)^!WD̻n -˔|ih8,}TwRU7%cX 9bz$v '0w -^9ݦ>SP\Mg(> VĉAj"hΧXr4b6Xrl*D61o`|jʮ%FGcgЎY4b\QlӮ0i.zDMO|3+> -5N=ZDfr5R}_Ӳvc&ApMqn_{Z>QSFM`UVr4a6Clr9z64Z cRL7Q+9c!9%x T_\2("6GǮ㙚ѦT|EfW+VgU#5(gU"DS@3/uF]NV)Ήj] a9;?Xk(p{OƮgCl]a7MlIkiWo`'rN{7Xkς,luxu8hvgg67\r&eG%/ώ?V?ծ ~e҉zޔ~{g-|pz̢]GF/&/z㟿O8HPL{`]ÏR: Fv"0yg~"jP7Wy޶3u/\XfhtjoM/a ݟV"b)G) p^'Buj PR <Ǣ8k#kȺ]`ޥEM_ψg=⌝o88k*lkI!v6nSJ}hl}ҴhV"?;})Wbjժ -x]*U䈣ןap8T9Hy^L}Iee,# p(˗Z =ۅxt20lzWӻ%;(vq>%.o$>}OmgWKNࡇhYP6Gbejc9Gܱj?EQl29< E$u}5u}(5XT. '+ڤ8#!x)x1cMuqoKbP\ԇpEm –jҐ7! i j+0IR[JpCd9$ѹ6Ќw2BzFwio®g(mH`)P;1Y׸N= emYdοi>x}+Xw.ce9qB/CjUuE<ȆVml9+I6빚醝]r1CgbkU!Fp-%7Y915{h$t*jk?Ӆ_#^/%ߐ"A͠.+?Gtp>ק|-U.@֑iKXYGI*%MnKf*XNIq ip$gJE7?D9jprĘStzcXV.bZ.6i9:Ƒ[|~%O@HvXW7mhw7P0W7ߟ樀=`2ah2Ex'Y+0A05SkbB6ht57$_b#/g-cq 0~ -endstream endobj 38 0 obj <>stream -HtW v0Xojع' fnI$#o;Q[K@ί0B"B̏"’MK $} F;(, -Y4_UHh=Ro o)Bxh{].hV.m+ 7F2gi %$c<(*r tT,X:vNBo>N__)I .{Uڊ7֟~ s;*^^g;DHqV:8ZD"S ul`~ -h5BJ+L:E*M9KkGbUT|uݱ{@E;|k ZQAO%A'Bp5`:fC#K;g#z" )FY>JKۄBsQZ !)Z -eR>-wAeȮ#:% {d) S$7߿_o^?onLV䇀O nX!ҽ4f4Tx82۶r&#4 -SאLl\9K2j܀Uu^'9 Aklpf3Y!*[zx'K_\'_(dx̱Ӛ8)TVvq\'~{a|΄? |cHh)K[q9uYL]~9=^W-&䑉~*v~&?4o İG#?Vr^HYosLl$bw OW$cY촜Hf(Sl `PcqjutBTjOSzd(q*"3qmB 蝙{`4K}+G,ؓm'ns -:H(2Yخޤ0\Hp b>z3A@shSɴf*M6.j`a\f?S#`\!'?3S laAcu-³{!jm}ڼܦ1WRCzARMΔl\.ڳ87)-yޘ9_]g݁ ]tx-ujt|nw>ЙSlUd!6fzhͦ.`IFh(?Bץx@i"}2Y>lItqo_:Av*ulUk[!Π)4o``?߮mϽa}9 ^qc,VXKLbrc. ϯC)}:ad܂(t[ʐsQ'j1 Շ kS rT$]ԷbW"a݈iAF13$O6a3O[= 9ܲ!k7s@-/(iOV9& m0zf}Q4~ibO y*pU$$(&6Dk]m$ rH"sHd(짼3YOip1(T[ɪ|Y$hcpNM9ADnu prGJ"8{=O׹h.ESjFz񪝣,Q q-ia@r65n!lvRYu2+@bFNdOWB:UQqH;s2X@e=76Pl)Zlc5L@u@ XԢSĘG?X0ͧ*TbPS힊K)EktJjS%]T@qHM -TsRV<\u .bHX``I< -d48.&$& ج7Q -(Ʊ`T@EVXJ[Tp "m*еKIhnTbO~ƚ0*Z8 Sb2 -A̧kI8O-hZOuABn)FK*BfNQu؆ƚsRafO4m⹐ -(9D(CmQ̋#-YCd[zt>`\9,b{ -d&׼!0%YWH$׶}_ydTx}B;؂.q\jAa 4]fuNiI,w/>LSK]RHWkzP'֕-^ -o^W]+@ >ה6Hq9 lrI;z'g~(DYZ - -;ۤz]Pzy19Rl>{|=}Yx`X R5lX8VmYxL  DZjO%BۨIOI|9~O#xys$궯ԟmT7_=sa?g&j'\{:xEˢ%.p;^; Om5@mZMS;kR$ U+RYS\|P'JyDl!k/>]'iSnp^J:Y5=Mׁjf"#f /ZzQWΉD;7.-'Se)բw\JUIb)PpDBMXSt8+nYy nΕɔ%k!.A gƵrJpaOGjzbhDW'o/AܹGѦ2x$w~8O0Qo[ŻdP~PD<Éfaf'O{2nO]KZ$O @i kyu OPcZ+y}{Zԭ -@/Qђ~FٚVH6GD)6h?af2rL"1|} - -*U{%rp'K=KcŠRp#C3?:;52c^V(󃑧P y#ԓaGW6;{v~Y)e6 dV@):2׾ })|Q+?kOĬDJ2g'>,F>LlŠˈz_FDe!蕧j6=?)ƍL lq\ɅJQZ(L[ԯeS[+ :ߌ9qɗצܐΗ:JjL%0hz,O)< 'FWLP܉x.Ym k ]Kjd`&v"gUK^+y+v7Η?qʮ7sg—>92uSp2KVjcx: ,[V&;gBxCKFejzIFݕte(SSRfK!ykON8M|Zvh] VFmRb颻dCM( K3t3 -pdٱgVv#A?>;h[@8|s,׼rTcE_ 8ʳ|jp`Z'y5n4<<+G ުWnXir{1fo39>ړUp Llw$q|yb76tPs@ce}nΘ$U6礨 a/>U\Qtkb~7U QK} -RD "O _\fgc\7m'Ɩ;b+BDM"3#m ~+>:EPh jj˿?>9[j[`†ʩH욣ɽUї"SC4}KK4{>?CHCjȥH6ʹ +\FP4"9Ig+҉cƨH"y&Hs*ڊu*fHz߭H@)5n"x):o38#HJT$yHhީHꃌ[Bߊ#F}($cMERHnxǩHSN$5g8I"OIO9$I_ĭI$$W&9P!Ip)ҁQb=OKO~ cka䷓i.A$8_f - ҙV#O_0UO9 e/#wyћr0 Dde<A<.1R|!~<}c{$ޠ_בa)ªJb"K8f%xH+9c͎-=PmP4'5@ȸuБ5!6hWҤ9UBBY%n9!~Ff;e* z&cLoV?)w2:22ok0iEIjCF?-s7ۛWsUףHccYDWKklĒJԕ^Vύ"}@^ґ|w&֞v7{쥢AZiv sY ] ፨TϩUR@aֱӴv[KQPר6+7?&6T2? f*RA0fis jQvڎ:KE҃eU/z#0I?ljA7mY=iIزCwyɮ`dK[!Z6G~TfPN [Zi VZ]PGi\W' |ZnY6(w-^fl# ->"`I7₱ ؞&hH!$h-Ĩ3Eh9]&m=BA>yq6C̮gƻͶ2O[@%Ɏ;Ә$@ n8]?ni+\~>rHʴ6Ę%f -St՞4~.szGnJz4nzB3]dCa/mG@\z4vAG@=zDw=8f#Gr)=:KN0C{kh둇vNG[LqGK\!CM`SXͩGGMP -qq{^9Zzt"0e:ɓJmӯ$Thi;ɑFEBT$GtXQ3O9ϕ)1S<5O9 yj9YNnk7͛O1bíK|#OVt)FMXCU% -Р:GC['կ|qZm+/Fd;!T lqcwRlG1 t3$N@t[ 0թнޅ9,ě&՚R{I-󛻷v%In_a̓ HeeJ2@UFh&dxd&uϘ%p7{Ɋqb-oNr e+7dw"7&X/.5#\B-ōH-ƚc@ -v2":١dmi/W%HLY/xx +9Ò[KO4.W+% Rل-x;61*ʎNLjDי ~J' \lW@9ړ/KzSF,6GiDָJ^9Q_(ten<,5} ϖ#$pH:U\}`nl+ LY,KD ~!g`__LZwFnw,'љԹxA*;41g#2=.!+3msq,ܔ2g|̱S((Q_XgQόQ4%OF_a/n7~"hy ә6熒6_MuX<ӆER҉F(1,UYDž-~]g_57X&edcö^mV%Kvfɍ?q - !->"-]˻Ky'baOcd^`ݤO6S'A3* #+kwՂۙˢs"tN8@3} U2haì}ZɺG&&Z{`DFθmS0߂ьSńYd/Ew˓i˓>ә߄40a:ބɐK;um%s7]r& Uc< V精 H? Xm_#  aҟPM!LHaCN-Lŕw Yv*leHL4Uuh{j^ˎ)" {Ky;SPSp(:kڛ4 ҄*Q4&sǧ& EԜ(ɀsh-ɃZ4yG4)!MT&ϣT9ɑZE8Knp+SeP&`T&MneHe'JvV&DKxlh} l fYG@8SQݡ:ӥX૮Y >ٕkG0prMGN#,^_dHSҁ!,i6bUTP <. krcej.1v^zcƔzW#`v#O=ѳS. vq"D h\8/F8xieUC\G2TB&,KC tč:ե]fYOY?rJA kUͤ6.QZJFo̢E:c#1Wγ˜K;HjQK;9~=T~b+4R1Mu$a\vH!i!1'6Jdn7XWe/AR73qX&K & } ˤW΍me},#x!w\ITŤ$;TIrmapOR5 0Τ7sw4CVɫHnCƱSO0A3>$wc/`1Xxz(dQ]R)+a:]ە0/M @v'r?U{gfa!tKK%Y^Ew+h~zҮDzG|J*_``1ّï}hӿ^}󹦺|ri.um^;1%6n.Ae A6I9=%(998%(uIr 7; YKTJʹ+nqqH}WQ..AI%n&Q`b$F]2WݙVN41u}D`ǓL*Ȥ̼ dbJhy +Z IZɤ8$׭LPR9LNV[oԼV\db{B'SD%]`=\70QɁ*ǭl`E}JeO0Q:70q3LZԉØO01g0Xp `R`B{Y`\}"Ū[bK:^;qQe7,_&5}de#cְJ%q,\ |PKQSZ Yx(nxT/ EД,S!]iN>*Ѷ*b-(~@Ch] -3ŷk(`C^F -`eIejA[_)<`eRrG%J"ŕ7??$6">v!x?D8LL Hs i|_24WM^mqH$Cg\'2YQV5FChkv D2~0rdOSq!m1c"߾M[GȬN,|$]ݦRt"הClZhb7oJa&KDc ;ӝ $kݳ$?S\~JI{%4 -F3XCej1FEX`2 -XӇT;l.hp'cz<>[QD0LZ}iuꩠ,5͜RȤ;Tvߩ2_r-·iOl -+0'ue0%er-DjՇɘ> w{΄b$ nLbZTPSʭ|JFu{[\)ԴܢL֮W=zMYi 1lJ`{1HCb$SH cϒl{̼QELDY"&&B -ʨaM@b if'03$CRGiQsml -|Y[05 S]jQr'ED{TRZ_"h66@W^`֢EUѦsM1, $'i$MxD{W#|c$(5H4scMjRa J<8p AQAHPV9|l@RQ]$ -# H\pFqq$;xD rulHs6j71îbDRT IkyCtĔ@fY I=a6$)M>tymq1TugҮDr-8HbHZp!IP9D%x5׍HTrv".:S*74A$!o"q3z'W^DbSs"1Tq:j2I$lƾJ^dHd -XuDz֤'rClfRNksw6x+n<Q|1536h6})m%>O\.g{'Ӆկo}K1= ٚU "qk;??COgGB%x;?z6l_I^,į]lH=c&%zMa?[Hi҆ǙwA1GPg5D51]!,:>*m׈ψ6{߾M[GV,FxxhoR;C%Q?}(ySJWSzO2sL~&8#q/K<I܆N\({v~鞛W.H)ᛞ vH)=5<4~X`Fѭ),<#,j-=}ЍPVtBUm -l"e"?xrD JM]s=!@Fg/Jw3VbZKq)\ ֵbZ.D̬AZޢ|"(|"ΣRY:*W[g7 -SMYw}/BF -tJwjdN*`Ŗe7mk< -%Ni'2lص˴/(W #*~%$ۈkAJ0WRerRRl~߳vOE*)+dP#JA3=="wjˌTaBgn;{ξr_&} GVuT5ˍ_K4VyS#vF< 痢[XqhpgٮqMڷT[t"2%0CV6'Br6o˘y4t]L㋵k(hQ9 Nm%Nx2 A/Z}cSq;ϧ`́jDw.KpG9f-N >MMp6,9rwUJ8,P%ڳ^o7q:}SK5Z}.kH%a׼d {d ޞpx/Y""!%A>ߗfT&pj Ja,DJx}&|a0$c̻09=i݄ +Ndf 7abP|?J@D$]%8 i]K<6ܗq] g%o=nޖu\nկ;Hri[K 2?2< xxWיWޕo-}tY K X!w:3Aķs6.EJ9BbdO~W =1Y}*o37 cg֨ <:уJEli?U-F ]5S o,Y[^'&05>g9hHhSu'cf;-V^^͕mWօYbwۙ}H0WL/eWB3Yd6ceqltB+lw Q|kc .NHv8Q(~3$w_VT,]*UXZzNܞ55|~uE_׿׿vI|1ݍn|8T򢐢5:_[S}L/_ ׂFgCFL+;;c@;b]{(+FGߩ-~M=Ⱦ1-*ݰ ]Įa;AH)TңbZs`g/H -3 -tl|^Eo0 fa35bvӚiuD}Aj[iLDXib'7~H8 " ` tao-[L?Vmhy%9`{B|*_׶jkcF{b+0 -V6"Ŵc#0%,Ii?ZZKk=923+fAZ\)cE{qzJ}!ߟL7r|eBYj,Yƍ4]v^܊^,"~eY&9 y;C52TpBMukc(mĹSQ)PrRa]O=_Kth;Z>eR^L=rGqz'ƦORkʩ< 06$x~$-OF<&Kx c8gLwwNP,j^@0%י 5!T݋gԂ~-MW PWnR`8F9zT%;Ũv,q sSF8}6BbJِ -y_l&[WCq_EضkeڷT[F'4clLDtBrۚ{ޖ17e岂,E -Iaߩ[ݚŲR~!unν-&.0QI6Rg^Sb%RFɸX=uĖh3oɣ;|fKQJL@꓉G22>.MK6j3a؜O$y6,tє4Reu]Ԭsז!efIW*1T@oɳBLZ/$7lbfPV6bHV;Lug[GCj^~C]Jr60wB;q`/s7 g*)"H ƃ^ނHh8 -y`/&{H!ֽ=\S"W~S%3y D՘ -TV#+psdtMC,DmG x/l͚.` Һ IwPꨚte9¡z١Q-6JTi&RnK Dz|XGZ'gP|U "`+TG0̿?&A}1c&4Vcu1ݍs1_Jr H:K}\ -ClXKt1a H9r =@r1GRn9v";cXמ[;,>cJ~1u;R AKy1֒Sa۴wAULPj ߹㝂+BMA)GA5 -2ua_L}!ۥ RJ+*Dٖ״n5z`HK|+h![1r J;4OȬyqz{o>\OlGZ.8#- Dހ,lŝvbSl=_辺9"2`H6CY15D"FnC]Q,QubͷN ]Hm7!:hW]/wO^^'i&g\j Kǒ%LqbF֞Lf1WSbc1(Rfbfʦz#xYnv2!;@?؇"_ -ٱG2rlRBdq; Poœql#(drn;/uvpr޿\y=nH1r%,n":bgRitS9m3D4ߟ2GW? `@r,WLK =mjT+ͪ$ -:#/&kHDbm^9qxG  yUBӋ5]vZg m,Xht9iBF"9jRHZ(Ϥu yKn frc$9W5+Bhfs'f5%%k&yz14>stream -HtW=] ?lHMmH|?$:ܛ5lYRp$$A胦G"@tBݑvlzE}?fcp|$@BN-laeY#AϽy5^ڽB(g(i)ꗐX~¢_ /śO{CQi- hb*hT,sPwd\>A͸ZQ:_vHwgeȌ9Mo_JB`:x] 'p*/$^v#m -=] N20khl5%^(4cPY~{ \f7(f~xp fz1$+%R_VGBDg"{`CWq Rw'Pbul>5mà {<+=65vZ5vW_imچJdQ<SC.?2wϏwUb`r8.j(ޒ~ A}@&̖ZnOjofًm66jbm.sA/d47$^(8^`<;O̐aȤɂ U)A ~۽Y39S3isE^ʔ]ڊUGơї"qm?׏珑A{E$M:"qH}1^=_wP>SWSv +6Pޭ1 3~id^WvnC[Y7P(E3[*p8 bmuB:Ņ'S*U݄Qb -*2!F2ًno%fTՎ)PTUѭl[ܱѵ{0jSZHSz&UxZZxR+w4b01YCA#;gGf3FjMQ@SUtBlUva6?sT+7^0U&1 -!'HDI-Ɇ*3σ2mio3y~Ҭ$oZ>j\;'/eo"{c^cK$,`h"yj>I(ZQtBO9e:ۿ?}LDs]D;];MD[)]9)s{[: X x-ӕYJ+CVʀ=F+>ӕpe}Z\ nW,pe~b\@|/?eFeˀt\Jeї!⽏ӗeN4\Aa -ueԺOܾ̣?t H߾l.eTM7rزL[2=lXx-spRAOÀ'fmb,i([Y_`*@jQ?>"aakƑsq'( }f^ɲtv! > )qPC&S`Gٽ &9\mj΁7mf>~+?gZ3p)(8P'\_KHum -8Gj.}f\5H0' ``{[SJ>o >2+<90{ %.b8W><b/Gq #tJş[7@F[ Ƽ~SLW(/Rn܀LT7RYxM܋ {FӫfK s|r]}z ˺ TZ`mDSӑb|+s1+7LـúIHB^_Cnps`(L#y.TrEkK2yP/[2z&Ƃ@hZ8HYPHL?a+kDL1/"4hAF>qӾs,mQY@>T{yq#EY9e{ G}:,7¹} #i\c@teE*t4Bܬ͑ t/%5 aͫbb6v12e+.O[2 -sJ߱I06#4 Hu2Fmg<9ecf;u--ˆ߹ ٲ!lM$q|Rza`u{ (z:"ΤF\z恘m2^9yŤ9Lɼ6-lU.L+xY] N1-&L-Tu2S=cz֙IE "Z{MkWg_ѳCc l)O}$%.9uSIhDvm>D}<\/Sh(HewV#1Mq=N -X, 3|2٨,[agAʍ}ݤSXeDai" ȠpQbD:s*+.WF¹9.<G;1f -νEY{wS|ȍTad\,~gF-XH[u^r%b,q尬ٴoFT<HZ#-)uẈH\ОꂜITpKyc|נ@-7Ŷ8]ZOD  ~eP|_bq/IO k7ZmYM4rϲG5 0k7D1i|a{c\ufPCuv!O:3P/AF9@#t?7İ9ކlBx3dÏtnjc>y2 w=,1It*۵LOCF% qX \2 > @9 #BD.Cvې928 /Cp]baNGoOG桘H/Kl!#d.wrډ'I5a|BC7-]Uֆt$x/DvسJjg<-W;U(}/"S6!F -5*Y%RgEdU˲ K|O~gSs~8n mc蛤1@;_`E)&JEֺ2hL9 'kĢ>K+D59lv/#'m(  -_Ihw /A'WQw -kf8J^TK !h;.yeۤ@q= -m3;ء}e-+U -ٞjX֋Y]B,痖 -2ȓwWXu'LO с%Ky_\&D7C-ed  x]b:bVX -Gd[G(#0jU%{%fæ &v<}?K{.Cd%s 3MW ADn},޸Jqy'C7fΈ -nQ.F'ܸ2"y<V ˦dW{%V`~?K#e%x^]rG]Nب.eNiD|| &WG<ώ^[]Ao}+$ş4jT>5pj yPXL|1/ֲѼH>9he'I_0]bW@Dmו| $.~Ա_y`PF2/ZTOHS\3I-(^ }{ %4Q-G=(OQ-\0CU̸s{h[ uk(9(B$O2rEFި\l źgZק2x>@>M@oK /}XC^ ˠ!Bt\8co31%X6JeaLq•6uolu2>a8;`0쌱΋eרNQ_A - -J{)#W&[|GF1<Œ 1nT?!.^KxvL*9V"Ef&OjTQA¢.ص3'wOʐ2UshOR~jxGvXF.6wtLIpw%lviS#܍ cx+5)ۊӁו;+N.4/XK^u?ƀ<ܼ9G;ֿyvЀ6aҤ6K6О\9(}9>|~KK~c4h_$YtA0?}{ -B^yMFdF[F\VU ^ +KC~[Bi[=gybU]tFZY}>,,FSlJ} -Y - 7o*bYFztP܇0b'2f).P0ս}pX6D/D9퍧 -KeY~ -@^ -meSZR`rrns -4$}`a)Ѣ\Q榭Ų,KD@v-{ Kt%CFJ7r4 -GK#_ou9 %|?u粄-( ?oc.}#2K{e d,sĹ'iAs uWl81Y2M JL Xm_# *Q. -? ."sђn-&bE."!2A=/"ˋHoTA27 ԡ7m27X^91^P1"< r ׎z1fyy2DŽ7&8G&CLV62::wdP"n撾s٘d27in&s d2(E.%To#{}!+t+n1,>d~\Uy"B2~8{XI$s[Lr6'2xD"|n>#'w$$STZ"Ywr|-+O"RGboE`߯xJ%!4W,M -,"cwOlyDžJE3 r`s|EJ_1ԉ!^#]9}T.V.}X=/u[J"#OwXrgls=Y>$%Eu4&l-Qţfc*m6ި*he*\Wb^u*݁YfWѳt)(GE :,lc8t5ٻc\?}ּEW<` ;#+!ˊVɤ:-<࣢+wg$6 O93orqnEPH"'/rEb>cHlSRQz56?RJ%3:P%NjvHPbRN.֒i#,6f_(Pq9+Y-Zog5$X|lNUKe!tC}DI5?άmS*?@*(s{{H@tl\4>^c2J>8ݖKۓ;b7X,2u 暱vf%/Y뎠q'lYH i>'XbrƜMW`#6嗟RkK2Fl\(ËF^i6h{?19ijY;g~BVH9nx&:(Y 1\ &rrѣ0#O|0>S5I' sY],*^G4)4QML3q"RY|FFZ-kԟsrobiYѶ5,:Mi^MW}xaƄr '!ɼouX˖Ӣ<33ĸfJnl`N*xH|W.u/+,:H5鈛=GE{Krtr 胤#+(7BXa>H -(oJ>&&`㦒6dO+dX<1.7"mL u2o}*tbaV6c"2\T(wBA+2D"GET8K@#+gK¶vzڦզv:eRPfGXd8+қV-&#@|t9VY[1ͺC}E!$PjKbG4kЦ@XNC7!c(f#1^ Qt%c2 Ks;G$G@ȉQ>в ,ik}~81m[ -iK'sYmasҼ?c#ɑIaȘEÐaN2d7 56d\iм8*i%|2a*2ds;-4d|.Cvۜ!? وs2p$Ðһ!pTn=AR;m٢jU9Ype~߁.9+}O77Ih5gln0/cыj߀vۏcp<|_=w #6w^_j ; `JGXZKYja?ә@zǿ r*v_VLl= H8SG?D7+,D) :򚾪எUFb#X}.[8 -٭iJ9AzV f@wEˠloɺ6npz/lGw] ]d\_L!<;ސz2B[)ŎIb~"G!uOG+0'Mat`tDp<}z𯖭N},z`Ҳb@5}@sY. K>D^ԪPEם2+y`OitqԊ`C֒^НDPF+Hiu󄔺;sw*实GwS_2,tZ%Š=Lǡ@zndkU[ޚ28`,Gsp O [M LV -`aʭj]¡BDyug*WU*c@{"MKR?UYh_eTu[&[{z \FǜTE1sGB%)aC{_'èN_KZ}'(<ꢫ A)+|/dhrLޝz!}Bi7e, ?\Vp'r;b:}//5hK*. e"* ݇7[p$;^L+ -|u/h$ғXlH UUYrݭ统*8W:95ܘx7]R]LY$!^K0Ǐenrk*ݍ&>hUmhJ{PVCmk;6NgmZO"0W UH]ȏD0}> k΃ha2㕍<%8hNZ6i:{ c\u\xKS±@t",ɭ?wn׃!|[nj95_& @Vxd9gOZbb0e -&QGCblbcJcabKd cotUFo2rIT=07Qm{}>MZ.;%5u2;:0(`M-$uDJ|4\&)-4٠wڽU̕J'O[J*A¨E˟(N.SpL>& aܷ׶cE6*^{]QV\ Z3G5E'6ƈB_cV G:h0ŤW~ظCщVDZB@^Tt2T5+CV7TN/>vtb:݂=\%窶%& kC#AM~[gHI= -bϾ }B xEٽNPcy<К f7/Cڧ^Vq(^PеHxYl6Kl º4m[,uŻlm9Hf/.Ow;S4`ZVQ8?qk*0Ze`{FyS>g=Dyvi0R2q6@;&yPha9Ͽݑi )g5{h 0}yjx`Hq^}y#H] hG_ܥ@Mm@침^h|h0i_:oXt@ /(=}Qenj56&bm5粔hRG6hܗ_{QȮ#†qFky!\a5;mKiôHpxv3;pZ@ 85FjxԐQIG'ҴGwP-4@B8ɺ3߿EO(C8zeWcLK@߾u1K  3Ȃ4MN†dnNژeb ZB'T<_jNn]y9Y-FwC:u@4 cr"쭿.(;fUjB LkYFQ,$D:}0Qa"iD{0"PE^BuQUTivB;y#ϊ7*y_N{꾮{Aza`yO%L9FFSsp)t:ɘOMy a0`ipo4΍/b>g|QfƜ~q6)YMG%QN<맰?{}B/|*}kN޶{ahy=d~ݠrtپtf]e׿!RvꅁՓ~`D aDYl PKkDdG,Ͱ0?iVZA:gKkiwünۼ;c[",m1R,=OT5 `:h1>7ߜ<+e1!k v>שRd* 6iu6vT|'kbNDFV$U=HފMn/N5Bf&A $yI"I?ҽ1wgc'onVeBOu{FWפun uqqUvZV;%Y$)ghO`vr+ -d * nM=GQjQ~J|-wiSh";$%I>{SZ7MI?Q2a_UhNM]{E.ԦWʑwY]: @EgZc-)x5nJlӒ]skWkjEk!yby׬1Yے>W',!Ʊ M&=@,DBHZ&:7hCE^{V#FZrXT"%<B2U.8` Ka 5!kwY|X:3 5ˉl("#b)R'5ChLT+9R8fS{KE:' L&4 -Q V@Mwt*mv Hٌ?a&.oR$=NP cWUV[\X@'.\N#b?._*,sK7U@$;J<8dc25c\:[Q{*[81HLvXu"Q ?V7Ei=zMME8;Pֽp-VJAZH+.1RTˬ?@A ƍ7РzzS1VAlsZs` -D]ڟH{ P1#=B0,>P;"q𲵠/2=jFPf0KL6DYcfp[-SEukڡL i۰m1w=Vm3b[ZK P`@h/Rcd})_>m8 -׃)׏tSK77spœfߩ H\65c- -ij ႜq ۲F'w A;39vq+-,8BLt[ȳnurC{SG=wtr[@ F5^~ [P "v*iE7JR -%Bbf2<`eCNu - i C&{NVyXw0莴$QKT), PMOP -HCәDԍbK߆N_yjUL\S)Lo d滓F>5o`(eu~F#}I\+W5ɰh 4OKq\6+e6(uS3".Df{a[W¬|sΌVy3~sNo,0ܮP8UC#븄or9|fvD+!T< Rw/zGFYJٕ.TJ"b5G1,\R-ˠKo"q;~r -Dy;4vysx1H$A)k<~/jȸE$lһy]yhsZC? *m˥YK!5QL]Odngݟ,t8Q=k.fpce -EOb?9fM.{T5fz[n;" a˛OM igSr/[{T7'YGWNtE]7^4.0+vbS#L]h."Q5!ZrkbQo:e}azk_H-+b+ց5TDaӝobVY+4ÊBmXO7 /`TO.Zr':zƫ_9;}<`=Oq5v9V7Wczd:(ޯG&;:`;:_3oc_|8v0/Z<~_ -*>5>P>?ҫ`ARY ӱ~=xOwSZEPH^9<@0_魞a -hws.}竮p@5-8|\.& ={AgbHiq -["z𑁄3NjQ&S, +܁j=Uxbo֘Z751G͒jw@+[.$20ܕ#kj#Z+gG+݈oDҮ\`&9l{п袒0:5$'2J\"_bܕRZBKV)6C):&n`#lc^V3kCczkSX:WBv-t|TޤYL~/UE!R<`.GrJڕmXˤIe2tu^g+=~oĆ6WU0c$̬ɹxP#i.!(fUmeօlJ oeh Z#f<Èg̲( dV34q/M3>@XIĬU)V2x3̀hPdBֶS[,^[e @%LqھZ@r6W Ǎcddd"v汷\4 - !Hhhg`*E_\܀H<'J@ՅAmhND٬<ԠF%Xoncs\䍹ZˀŶDidu'_uJT"DlYz]:^b b_ˤhjqlij<}(]H@c3qhFSsbD#/dO-Z5QˉQĎ~tdQu - -I}6Wتz=Ȟ$!>ϕ5VO$8gl~J+k"v S~WbAr{0m@Q%.t-el`i{.-aGZzҚt<կkQ 97|bO~?Y7z^ ƶ'50Ow8;r?6)*~'xT0_|bJu5/_7lr1V;2i/dYcqӇ\/ˮeC 5C܁{U#Z DG wf?v.KZ mzȌ&Z fsgN$#T/HzSoܺ:T󕁸qoq #:x^Q_aYl(|qDHEnP@J`O))]Tۙl)kps5~sc}44xc %Kv23t69$p7h PN)ZL<{)'geMCEM.@ t"q}Ʒ aC8Wg!X',y,fs={*}W]_sޞ^yR2ci=Ize|~J{9s`'=8P}mā_'ΗymJTA@x?~Í5F: `u燼}-fdfez#zYyA Jx0s՚ӡύT/HgZiHrFXyn#Eu$̅!J&i="䍲oEwwv?6RP|_|l̸n{.3672^3 )w{NF7Eheq(hyF‘~ -PrG+!R#?dfUvL#'b`Nv` TYD$ <gGཤp^v ;Ծx$A3ea.{+ofU!-V"ҩ12JYw^/Ӻn]:wCg-6OH V TnE -(W D6\ y`HJ37OBzU}l%Ҍ Þ@|~蓸Ovc]:}nH@lj|!:\Z zrl)/ GJ+"AStCtFcھ(}/@sg)| sE&QZ E|(V1C -S7A ^;R`7/$G@zequsj;珮=gIJָiv[A^=eOŎ:zHLk.k SI[5dbYjm-x&JR4CQwɁf.='mBgv>UiAZDپjv}w7=,?}e: tBRB KP sg_,|כlaJrM)oa8t@Jn=~#Mq>c' l+q>w[P2( -C-4{˴dXt A'p">P֦DL]eccZ#ڙ&a`N !,[~śn܅%yϯZRz m#f , b+4RsY !3ki5bjQqCLx Ld!9Σz*F\W{ؠS#6+')Wk'%UJ0:'!=R}=d -ȼ=a?뤄|*A9>B1þrybG['9W! aCuCbTk4^t݈Dzk99T.y?`Ջ)>z}H4ؔ}Ժ,k"*BHL$j-DzU385ѢwU89( K{\2NAWH@/ yq*47WbeQe^* i,~Qo@;W2TזV? bxڤq4h{y^ۼMeu-&v݈ \1sM!j(0HȸPsh6B%O,7r -wJcj+ ij[^<;;~) (i~\ܦo|!k-wP񏌴 L bH_]ʢE PoD`-Vꭸ?"}W i'ĞjROUŀ\j -Xu -TU5v%3.Y HFŗam47=zm\{Y"1-YQ_kI"xOYOtV%%GmIxn#ۤB I-9|[JuZ6[7Ufxj)= 9m g|CvRhOA{P-Zm-&?08爯GNnn36B)75MYUo9 DJk\vj1c}:7gzԤoĩ)m-P"۱ކsGgUCYHge5*rhG"Xmʓ(&VqabQIC2_{" &>ž: bHUQ('b|\ r4:V:94F^ -vƸUbcAڲW9.xE44`R#[z#\!m#Oyl~Lm#$,X}ݏ$a5#{YG#GY~hˏ#n?rˏ05Tyy>6?_яÎ&OÍ0Cv7Tv3FLFxFx㘧fDaFfu2d7#Vm7#qaF<0 73fd!-3bMf0#5fgӌ0adXE@zl^rQe3#Tf9rf͌pAfnfHYaFUfF&3WI `ofثfQ>nFxV͌0,_7lVkۭBv+rpv".1Pw+‡G܊xX}p39RV\Øجfڭ2!nET"V`aᴼ[Vd_VĚ٭ߠ"V3UnEV7zZep(ܺ8YsXjTm|ߨM0 EmR͐e 1>7G|#XYH H1Ѥ`X"ih{f/6DX)zE4T -'c5sB>c(|:T,k@^tُe7q.#qT$]/OGI C  \i81Ɍ> endobj xref -0 41 -0000000000 65535 f -0000000016 00000 n -0000000144 00000 n -0000020106 00000 n -0000000000 00000 f -0000194368 00000 n -0000576721 00000 n -0000020157 00000 n -0000020502 00000 n -0000194782 00000 n -0000194558 00000 n -0000194671 00000 n -0000193093 00000 n -0000193806 00000 n -0000193854 00000 n -0000194442 00000 n -0000194473 00000 n -0000194855 00000 n -0000195501 00000 n -0000196608 00000 n -0000204481 00000 n -0000226705 00000 n -0000249086 00000 n -0000270988 00000 n -0000292990 00000 n -0000314770 00000 n -0000337047 00000 n -0000358628 00000 n -0000380397 00000 n -0000401259 00000 n -0000422911 00000 n -0000435973 00000 n -0000456234 00000 n -0000456377 00000 n -0000471670 00000 n -0000483557 00000 n -0000495606 00000 n -0000511116 00000 n -0000533624 00000 n -0000554936 00000 n -0000576744 00000 n -trailer -<<929CE3C8EF9FFE4693B769F6C72B671E>]>> -startxref -576947 -%%EOF diff --git a/Datasheet/ESP32_Wrover_B/esp32-wrover-b_datasheet_en.pdf b/Datasheet/ESP32_Wrover_B/esp32-wrover-b_datasheet_en.pdf deleted file mode 100644 index 5166803..0000000 Binary files a/Datasheet/ESP32_Wrover_B/esp32-wrover-b_datasheet_en.pdf and /dev/null differ diff --git a/Datasheet/ESP32_Wrover_B/esp32-wrover_datasheet_en.pdf b/Datasheet/ESP32_Wrover_B/esp32-wrover_datasheet_en.pdf deleted file mode 100644 index 8aff421..0000000 Binary files a/Datasheet/ESP32_Wrover_B/esp32-wrover_datasheet_en.pdf and /dev/null differ diff --git a/Datasheet/ESP32_Wrover_B/esp32_technical_reference_manual_en.pdf b/Datasheet/ESP32_Wrover_B/esp32_technical_reference_manual_en.pdf deleted file mode 100644 index dbc0dd0..0000000 Binary files a/Datasheet/ESP32_Wrover_B/esp32_technical_reference_manual_en.pdf and /dev/null differ diff --git a/Datasheet/L293D.pdf b/Datasheet/L293D.pdf deleted file mode 100644 index 3940da2..0000000 Binary files a/Datasheet/L293D.pdf and /dev/null differ diff --git a/Datasheet/LCD1602.pdf b/Datasheet/LCD1602.pdf deleted file mode 100644 index 053e6c0..0000000 Binary files a/Datasheet/LCD1602.pdf and /dev/null differ diff --git a/Datasheet/MPU-6050 Product Specification.pdf b/Datasheet/MPU-6050 Product Specification.pdf deleted file mode 100644 index 0b891ff..0000000 Binary files a/Datasheet/MPU-6050 Product Specification.pdf and /dev/null differ diff --git a/Datasheet/MPU-6050 Register Map and Descriptions.pdf b/Datasheet/MPU-6050 Register Map and Descriptions.pdf deleted file mode 100644 index 428baca..0000000 Binary files a/Datasheet/MPU-6050 Register Map and Descriptions.pdf and /dev/null differ diff --git a/Datasheet/OV2640/HDF3M-811-2640.pdf b/Datasheet/OV2640/HDF3M-811-2640.pdf deleted file mode 100644 index 99d127f..0000000 Binary files a/Datasheet/OV2640/HDF3M-811-2640.pdf and /dev/null differ diff --git a/Datasheet/OV2640/OV2640 Camera Module Hardware Application Notes 1.04.pdf b/Datasheet/OV2640/OV2640 Camera Module Hardware Application Notes 1.04.pdf deleted file mode 100644 index 06e3da7..0000000 Binary files a/Datasheet/OV2640/OV2640 Camera Module Hardware Application Notes 1.04.pdf and /dev/null differ diff --git a/Datasheet/OV2640/OV2640 Software Application Notes 1.03.pdf b/Datasheet/OV2640/OV2640 Software Application Notes 1.03.pdf deleted file mode 100644 index 19f9935..0000000 Binary files a/Datasheet/OV2640/OV2640 Software Application Notes 1.03.pdf and /dev/null differ diff --git a/Datasheet/OV2640/OV2640.pdf b/Datasheet/OV2640/OV2640.pdf deleted file mode 100644 index 43e18b0..0000000 Binary files a/Datasheet/OV2640/OV2640.pdf and /dev/null differ diff --git a/Datasheet/OV2640/OV2640_DS(1.6).pdf b/Datasheet/OV2640/OV2640_DS(1.6).pdf deleted file mode 100644 index a81d1ce..0000000 Binary files a/Datasheet/OV2640/OV2640_DS(1.6).pdf and /dev/null differ diff --git a/Datasheet/OV2640/OmniVision Technologies Seril Camera Control Bus(SCCB) Specification.pdf b/Datasheet/OV2640/OmniVision Technologies Seril Camera Control Bus(SCCB) Specification.pdf deleted file mode 100644 index 3cd7bf6..0000000 Binary files a/Datasheet/OV2640/OmniVision Technologies Seril Camera Control Bus(SCCB) Specification.pdf and /dev/null differ diff --git a/Datasheet/PCF8574_datasheet.pdf b/Datasheet/PCF8574_datasheet.pdf deleted file mode 100644 index 699fa8d..0000000 Binary files a/Datasheet/PCF8574_datasheet.pdf and /dev/null differ diff --git a/Datasheet/PCF8591_datasheet.pdf b/Datasheet/PCF8591_datasheet.pdf deleted file mode 100644 index 2176cf9..0000000 Binary files a/Datasheet/PCF8591_datasheet.pdf and /dev/null differ diff --git a/ESP32-Troubleshoot-macOS.pdf b/ESP32-Troubleshoot-macOS.pdf deleted file mode 100644 index 2280c35..0000000 Binary files a/ESP32-Troubleshoot-macOS.pdf and /dev/null differ diff --git a/ESP32_Pinout_1.6.png b/ESP32_Pinout_1.6.png deleted file mode 100644 index 3e73642..0000000 Binary files a/ESP32_Pinout_1.6.png and /dev/null differ diff --git a/ESP32_Pinout_V3.0.png b/ESP32_Pinout_V3.0.png deleted file mode 100644 index 1e1ba9a..0000000 Binary files a/ESP32_Pinout_V3.0.png and /dev/null differ diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index a354af8..0000000 --- a/LICENSE.txt +++ /dev/null @@ -1,58 +0,0 @@ -Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License (CC BY-NC-SA 3.0) - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - -1. Definitions - -"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. -"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(g) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. -"Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. -"License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, Noncommercial, ShareAlike. -"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. -"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. -"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. -"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. -"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. -"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. -2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. - -3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - -to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; -to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; -to Distribute and Publicly Perform the Work including as incorporated in Collections; and, -to Distribute and Publicly Perform Adaptations. -The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights described in Section 4(e). - -4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - -You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(d), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(d), as requested. -You may Distribute or Publicly Perform an Adaptation only under: (i) the terms of this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-NonCommercial-ShareAlike 3.0 US) ("Applicable License"). You must include a copy of, or the URI, for Applicable License with every copy of each Adaptation You Distribute or Publicly Perform. You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License. You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. -You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in con-nection with the exchange of copyrighted works. -If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(d) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. -For the avoidance of doubt: - -Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; -Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and, -Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c). -Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. -5. Representations, Warranties and Disclaimer - -UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING AND TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THIS EXCLUSION MAY NOT APPLY TO YOU. - -6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -7. Termination - -This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. -Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. -8. Miscellaneous - -Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. -Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. -If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. -No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. -This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. -The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. \ No newline at end of file diff --git a/Part list.jpg b/Part list.jpg deleted file mode 100644 index a9d42b5..0000000 Binary files a/Part list.jpg and /dev/null differ diff --git a/Python/Python_Codes/00.0_HelloWorld/HelloWorld.py b/Python/Python_Codes/00.0_HelloWorld/HelloWorld.py deleted file mode 100644 index 3b2e44e..0000000 --- a/Python/Python_Codes/00.0_HelloWorld/HelloWorld.py +++ /dev/null @@ -1,2 +0,0 @@ - -print('Hello World!\n') \ No newline at end of file diff --git a/Python/Python_Codes/00.1_Boot/boot.py b/Python/Python_Codes/00.1_Boot/boot.py deleted file mode 100644 index a5d50af..0000000 --- a/Python/Python_Codes/00.1_Boot/boot.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/opt/bin/lv_micropython -import uos as os -import uerrno as errno -iter = os.ilistdir() -IS_DIR = 0x4000 -IS_REGULAR = 0x8000 - -while True: - try: - entry = next(iter) - filename = entry[0] - file_type = entry[1] - if filename == 'boot.py': - continue - else: - print("===============================") - print(filename,end="") - if file_type == IS_DIR: - print(", File is a directory") - print("===============================") - else: - print("\n===============================") - #print("Contents:") - #with open(filename) as f: - # for line in enumerate(f): - # print("{}".format(line[1]),end="") - #print("") - exec(open(filename).read(),globals()) - except StopIteration: - break \ No newline at end of file diff --git a/Python/Python_Codes/01.1_Blink/Blink.py b/Python/Python_Codes/01.1_Blink/Blink.py deleted file mode 100644 index 84fd7f2..0000000 --- a/Python/Python_Codes/01.1_Blink/Blink.py +++ /dev/null @@ -1,17 +0,0 @@ -from time import sleep_ms -from machine import Pin - -led=Pin(2,Pin.OUT) #create LED object from pin2,Set Pin2 to output -try: - while True: - led.value(1) #Set led turn on - sleep_ms(1000) - led.value(0) #Set led turn off - sleep_ms(1000) -except: - pass - - - - - diff --git a/Python/Python_Codes/02.1_BLE/BLE.py b/Python/Python_Codes/02.1_BLE/BLE.py deleted file mode 100644 index bad86fe..0000000 --- a/Python/Python_Codes/02.1_BLE/BLE.py +++ /dev/null @@ -1,100 +0,0 @@ -# This example demonstrates a UART periperhal. - -import bluetooth -import random -import struct -import time -from ble_advertising import advertising_payload - -from micropython import const - -_IRQ_CENTRAL_CONNECT = const(1) -_IRQ_CENTRAL_DISCONNECT = const(2) -_IRQ_GATTS_WRITE = const(3) - -_FLAG_READ = const(0x0002) -_FLAG_WRITE_NO_RESPONSE = const(0x0004) -_FLAG_WRITE = const(0x0008) -_FLAG_NOTIFY = const(0x0010) - -_UART_UUID = bluetooth.UUID("6E400001-B5A3-F393-E0A9-E50E24DCCA9E") -_UART_TX = ( - bluetooth.UUID("6E400003-B5A3-F393-E0A9-E50E24DCCA9E"), - _FLAG_READ | _FLAG_NOTIFY, -) -_UART_RX = ( - bluetooth.UUID("6E400002-B5A3-F393-E0A9-E50E24DCCA9E"), - _FLAG_WRITE | _FLAG_WRITE_NO_RESPONSE, -) -_UART_SERVICE = ( - _UART_UUID, - (_UART_TX, _UART_RX), -) - - -class BLESimplePeripheral: - def __init__(self, ble, name="ESP32"): - self._ble = ble - self._ble.active(True) - self._ble.irq(self._irq) - ((self._handle_tx, self._handle_rx),) = self._ble.gatts_register_services((_UART_SERVICE,)) - self._connections = set() - self._write_callback = None - self._payload = advertising_payload(name=name, services=[_UART_UUID]) - self._advertise() - - def _irq(self, event, data): - # Track connections so we can send notifications. - if event == _IRQ_CENTRAL_CONNECT: - conn_handle, _, _ = data - print("New connection", conn_handle) - print("\nThe BLE connection is successful.") - self._connections.add(conn_handle) - elif event == _IRQ_CENTRAL_DISCONNECT: - conn_handle, _, _ = data - print("Disconnected", conn_handle) - self._connections.remove(conn_handle) - # Start advertising again to allow a new connection. - self._advertise() - elif event == _IRQ_GATTS_WRITE: - conn_handle, value_handle = data - value = self._ble.gatts_read(value_handle) - if value_handle == self._handle_rx and self._write_callback: - self._write_callback(value) - - def send(self, data): - for conn_handle in self._connections: - self._ble.gatts_notify(conn_handle, self._handle_tx, data) - - def is_connected(self): - return len(self._connections) > 0 - - def _advertise(self, interval_us=500000): - print("Starting advertising") - self._ble.gap_advertise(interval_us, adv_data=self._payload) - - def on_write(self, callback): - self._write_callback = callback - - -def demo(): - ble = bluetooth.BLE() - p = BLESimplePeripheral(ble) - - def on_rx(rx_data): - print("RX", rx_data) - - p.on_write(on_rx) - - print("Please use LightBlue to connect to ESP32.") - - while True: - if p.is_connected(): - # Short burst of queued notifications. - tx_data = input("Enter anything: ") - print("Send: ", tx_data) - p.send(tx_data) - - -if __name__ == "__main__": - demo() diff --git a/Python/Python_Codes/02.1_BLE/ble_advertising.py b/Python/Python_Codes/02.1_BLE/ble_advertising.py deleted file mode 100644 index eed527f..0000000 --- a/Python/Python_Codes/02.1_BLE/ble_advertising.py +++ /dev/null @@ -1,93 +0,0 @@ -# Helpers for generating BLE advertising payloads. - -from micropython import const -import struct -import bluetooth - -# Advertising payloads are repeated packets of the following form: -# 1 byte data length (N + 1) -# 1 byte type (see constants below) -# N bytes type-specific data - -_ADV_TYPE_FLAGS = const(0x01) -_ADV_TYPE_NAME = const(0x09) -_ADV_TYPE_UUID16_COMPLETE = const(0x3) -_ADV_TYPE_UUID32_COMPLETE = const(0x5) -_ADV_TYPE_UUID128_COMPLETE = const(0x7) -_ADV_TYPE_UUID16_MORE = const(0x2) -_ADV_TYPE_UUID32_MORE = const(0x4) -_ADV_TYPE_UUID128_MORE = const(0x6) -_ADV_TYPE_APPEARANCE = const(0x19) - - -# Generate a payload to be passed to gap_advertise(adv_data=...). -def advertising_payload(limited_disc=False, br_edr=False, name=None, services=None, appearance=0): - payload = bytearray() - - def _append(adv_type, value): - nonlocal payload - payload += struct.pack("BB", len(value) + 1, adv_type) + value - - _append( - _ADV_TYPE_FLAGS, - struct.pack("B", (0x01 if limited_disc else 0x02) + (0x18 if br_edr else 0x04)), - ) - - if name: - _append(_ADV_TYPE_NAME, name) - - if services: - for uuid in services: - b = bytes(uuid) - if len(b) == 2: - _append(_ADV_TYPE_UUID16_COMPLETE, b) - elif len(b) == 4: - _append(_ADV_TYPE_UUID32_COMPLETE, b) - elif len(b) == 16: - _append(_ADV_TYPE_UUID128_COMPLETE, b) - - # See org.bluetooth.characteristic.gap.appearance.xml - if appearance: - _append(_ADV_TYPE_APPEARANCE, struct.pack(" 0) { - String whatClientSaid = myClient.readString(); - if (whatClientSaid != null) { - cp5.get(Textarea.class,"recvData").append(cp5.get(Textfield.class,"Remote IP").getText()+": "); - cp5.get(Textarea.class,"recvData").append(whatClientSaid+"\n"); - } - } - } -} - -void controlEvent(ControlEvent theControlEvent) { - if (theControlEvent.isTab()) { - if(theControlEvent.getTab().getId()==1){ - cp5.get(Textarea.class,"recvData").clear(); - cp5.get(Textfield.class,"sendData").clear(); - send_flag=1; - } - else if(theControlEvent.getTab().getId()==2){ - cp5.get(Textarea.class,"recvData").clear(); - cp5.get(Textfield.class,"sendData").clear(); - send_flag=2; - } - } -} - -void connect1(int a) { - println("a radio Button event: "+a); - radioFlag1=a; - if(radioFlag1==1){ - String port_buffer = cp5.get(Textfield.class,"Local PORT").getText(); - int port = int(port_buffer); - myServer = new Server(this,port); - println(Server.ip()); - cp5.get(Textfield.class,"Local IP").setText(Server.ip()); - println(port); - } - else - myServer.stop(); -} -void connect2(int a) { - println("a radio Button event: "+a); - radioFlag2=a; - if(radioFlag2==1){ - String port_buffer = cp5.get(Textfield.class,"Remote PORT").getText(); - String IP_buffer = cp5.get(Textfield.class,"Remote IP").getText(); - int port = int(port_buffer); - if(IP_buffer.compareTo("192.168.1.xxx")==0){ - println("connect error!"); - } - else{ - myClient = new Client(this,IP_buffer,port); - println("connect success!"); - } - - } - else - myClient.stop(); -} -void clearRecv(){ - cp5.get(Textarea.class,"recvData").clear(); -} -void clearSend(){ - cp5.get(Textfield.class,"sendData").clear(); -} -void send_Textfield_SendData(){ - if(send_flag==1){ - myServer.write(cp5.get(Textfield.class,"sendData").getText()); - cp5.get(Textfield.class,"sendData").clear(); - } - else if(send_flag==2){ - myClient.write(cp5.get(Textfield.class,"sendData").getText()); - cp5.get(Textfield.class,"sendData").clear(); - } -} diff --git a/Python/Python_Codes/04.2_TCP_as_Server/TCP_as_Server.py b/Python/Python_Codes/04.2_TCP_as_Server/TCP_as_Server.py deleted file mode 100644 index f9d3dcf..0000000 --- a/Python/Python_Codes/04.2_TCP_as_Server/TCP_as_Server.py +++ /dev/null @@ -1,54 +0,0 @@ -import network -import socket -import time - -ssidRouter = "********" #Enter the router name -passwordRouter = "********" #Enter the router password -port = 8000 #input the remote port -wlan=None -listenSocket=None - -def connectWifi(ssid,passwd): - global wlan - wlan=network.WLAN(network.STA_IF) - wlan.active(True) - wlan.disconnect() - wlan.connect(ssid,passwd) - while(wlan.ifconfig()[0]=='0.0.0.0'): - time.sleep(1) - return True - -try: - connectWifi(ssidRouter,passwordRouter) - ip=wlan.ifconfig()[0] - listenSocket = socket.socket() - listenSocket.bind((ip,port)) - listenSocket.listen(1) - listenSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - print ('tcp waiting...') - while True: - print("Server IP:",ip,"\tPort:",port) - print("accepting.....") - conn,addr = listenSocket.accept() - print(addr,"connected") - break - conn.send('I am Server') - while True: - data = conn.recv(1024) - if(len(data) == 0): - print("close socket") - listenSocket.close() - wlan.disconnect() - wlan.active(False) - break - else: - print(data) - ret = conn.send(data) -except: - print("Close TCP-Server, please reset.") - if(listenSocket): - listenSocket.close() - wlan.disconnect() - wlan.active(False) - - diff --git a/Python/Python_Codes/04.2_TCP_as_Server/sketchWiFi/sketchWiFi.pde b/Python/Python_Codes/04.2_TCP_as_Server/sketchWiFi/sketchWiFi.pde deleted file mode 100644 index 8c5fd7c..0000000 --- a/Python/Python_Codes/04.2_TCP_as_Server/sketchWiFi/sketchWiFi.pde +++ /dev/null @@ -1,240 +0,0 @@ -/* - ****************************************************************************** - * Sketch WiFi Client and Server - * Author Zhentao Lin @ Freenove (http://www.freenove.com) - * Date 2020/7/11 - ****************************************************************************** - * Brief - * This sketch is used to control a 2D ellipse through communicate to an - * ESP32 board or other micro controller. - * It will automatically detect and connect to a device (serial port) which - * use the same trans format. - ****************************************************************************** - * Copyright - * Copyright © Freenove (http://www.freenove.com) - * License - * Creative Commons Attribution ShareAlike 3.0 - * (http://creativecommons.org/licenses/by-sa/3.0/legalcode) - ****************************************************************************** -*/ -import controlP5.*; -import processing.net.*; - -ControlP5 cp5; -//Println console; -Server myServer; -Client myClient; -int dataIn=0; -int radioFlag1=0; -int radioFlag2=0; -int send_flag=1; - -void setup() { - size(600,400); - smooth(); - noStroke(); - cp5 = new ControlP5(this); - cp5.addTab("default") - .activateEvent(true) - .setHeight(30) - .setWidth(100) - .setLabel("TCP Server") - .setId(1) - ; - cp5.getTab("TCP Client") - .activateEvent(true) - .setHeight(30) - .setWidth(100) - .setId(2) - ; - - cp5.addTextfield("Local IP") - .setPosition(20,40) - .setSize(160,40) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setColorLabel(color(0)) - .setColorBackground(color(100,255)) - .moveTo("default") - ; - cp5.addTextfield("Local PORT") - .setPosition(20,120) - .setSize(160,40) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setColorLabel(color(0)) - .setColorBackground(color(100,255)) - .setText("8888") - .moveTo("default") - ; - cp5.addRadioButton("connect1") - .setPosition(20,200) - .setSize(100,25) - .addItem("Listening", 1) - .setColorLabel(color(0)) - .moveTo("default") - ; - - cp5.addTextfield("Remote IP") - .setPosition(20,40) - .setSize(160,40) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setColorLabel(color(0)) - .setColorBackground(color(100,255)) - .setText("192.168.1.xxx") - .moveTo("TCP Client") - ; - cp5.addTextfield("Remote PORT") - .setPosition(20,120) - .setSize(160,40) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setColorLabel(color(0)) - .setColorBackground(color(100,255)) - .setText("8000") - .moveTo("TCP Client") - ; - cp5.addRadioButton("connect2") - .setPosition(20,200) - .setSize(100,25) - .addItem("connect Server",1) - .setColorLabel(color(0)) - .moveTo("TCP Client") - ; - - cp5.addTextarea("recvData") - .setPosition(200,40) - .setSize(350,150) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setColorBackground(color(100,255)) - .scroll(15) - .setColorForeground(color(0,100)) - .moveTo("global") - ; - cp5.addTextfield("sendData") - .setPosition(200,230) - .setSize(350,80) - .setFont(createFont("微软雅黑 Light",20)) - .setColor(color(255,255,0)) - .setLabel("") - .setFocus(true) - .setColorBackground(color(100,255)) - .setColorForeground(color(0,100)) - .moveTo("global") - ; - cp5.addButton("clearRecv") - .setValue(0) - .setPosition(200,200) - .setSize(100,20) - .setColorLabel(color(255,100)) - .moveTo("global") - ; - cp5.addButton("clearSend") - .setValue(0) - .setPosition(200,320) - .setSize(100,20) - .setColorLabel(color(255,100)) - .moveTo("global") - ; - cp5.addButton("Send") - .setValue(0) - .setPosition(450,320) - .setSize(100,20) - .plugTo(this,"send_Textfield_SendData") - .setColorLabel(color(255,100)) - .moveTo("global") - ; - cp5.get(Textfield.class,"Local IP").setText(Server.ip()); -} - -void draw(){ - background(220); - if(radioFlag1==1){ - Client thisClient = myServer.available(); - if (thisClient !=null) { - String whatClientSaid = thisClient.readString(); - if (whatClientSaid != null) { - cp5.get(Textarea.class,"recvData").append(thisClient.ip()+": "); - cp5.get(Textarea.class,"recvData").append(whatClientSaid+"\n"); - } - } - - } - // myServer.active() - if(radioFlag2==1){ - if (myClient.available() > 0) { - String whatClientSaid = myClient.readString(); - if (whatClientSaid != null) { - cp5.get(Textarea.class,"recvData").append(cp5.get(Textfield.class,"Remote IP").getText()+": "); - cp5.get(Textarea.class,"recvData").append(whatClientSaid+"\n"); - } - } - } -} - -void controlEvent(ControlEvent theControlEvent) { - if (theControlEvent.isTab()) { - if(theControlEvent.getTab().getId()==1){ - cp5.get(Textarea.class,"recvData").clear(); - cp5.get(Textfield.class,"sendData").clear(); - send_flag=1; - } - else if(theControlEvent.getTab().getId()==2){ - cp5.get(Textarea.class,"recvData").clear(); - cp5.get(Textfield.class,"sendData").clear(); - send_flag=2; - } - } -} - -void connect1(int a) { - println("a radio Button event: "+a); - radioFlag1=a; - if(radioFlag1==1){ - String port_buffer = cp5.get(Textfield.class,"Local PORT").getText(); - int port = int(port_buffer); - myServer = new Server(this,port); - println(Server.ip()); - cp5.get(Textfield.class,"Local IP").setText(Server.ip()); - println(port); - } - else - myServer.stop(); -} -void connect2(int a) { - println("a radio Button event: "+a); - radioFlag2=a; - if(radioFlag2==1){ - String port_buffer = cp5.get(Textfield.class,"Remote PORT").getText(); - String IP_buffer = cp5.get(Textfield.class,"Remote IP").getText(); - int port = int(port_buffer); - if(IP_buffer.compareTo("192.168.1.xxx")==0){ - println("connect error!"); - } - else{ - myClient = new Client(this,IP_buffer,port); - println("connect success!"); - } - - } - else - myClient.stop(); -} -void clearRecv(){ - cp5.get(Textarea.class,"recvData").clear(); -} -void clearSend(){ - cp5.get(Textfield.class,"sendData").clear(); -} -void send_Textfield_SendData(){ - if(send_flag==1){ - myServer.write(cp5.get(Textfield.class,"sendData").getText()); - cp5.get(Textfield.class,"sendData").clear(); - } - else if(send_flag==2){ - myClient.write(cp5.get(Textfield.class,"sendData").getText()); - cp5.get(Textfield.class,"sendData").clear(); - } -} diff --git a/Python/Python_Codes/05.1_Camera_WebServer/firmware/micropython_camera_feeeb5ea3_esp32_idf4_4.bin b/Python/Python_Codes/05.1_Camera_WebServer/firmware/micropython_camera_feeeb5ea3_esp32_idf4_4.bin deleted file mode 100644 index 7adc3bb..0000000 Binary files a/Python/Python_Codes/05.1_Camera_WebServer/firmware/micropython_camera_feeeb5ea3_esp32_idf4_4.bin and /dev/null differ diff --git a/Python/Python_Codes/05.1_Camera_WebServer/lib/picoweb/__init__.py b/Python/Python_Codes/05.1_Camera_WebServer/lib/picoweb/__init__.py deleted file mode 100644 index b771121..0000000 --- a/Python/Python_Codes/05.1_Camera_WebServer/lib/picoweb/__init__.py +++ /dev/null @@ -1,323 +0,0 @@ -# Picoweb web pico-framework for Pycopy, https://github.com/pfalcon/pycopy -# Copyright (c) 2014-2020 Paul Sokolovsky -# SPDX-License-Identifier: MIT -import sys -import gc -import micropython -import utime -import uio -import ure as re -import uerrno -import uasyncio as asyncio -import pkg_resources - -from .utils import parse_qs - -SEND_BUFSZ = 128 - - -def get_mime_type(fname): - # Provide minimal detection of important file - # types to keep browsers happy - if fname.endswith(".html"): - return "text/html" - if fname.endswith(".css"): - return "text/css" - if fname.endswith(".png") or fname.endswith(".jpg"): - return "image" - return "text/plain" - -def sendstream(writer, f): - buf = bytearray(SEND_BUFSZ) - while True: - l = f.readinto(buf) - if not l: - break - yield from writer.awrite(buf, 0, l) - - -def jsonify(writer, dict): - import ujson - yield from start_response(writer, "application/json") - yield from writer.awrite(ujson.dumps(dict)) - -def start_response(writer, content_type="text/html; charset=utf-8", status="200", headers=None): - yield from writer.awrite("HTTP/1.0 %s NA\r\n" % status) - yield from writer.awrite("Content-Type: ") - yield from writer.awrite(content_type) - if not headers: - yield from writer.awrite("\r\n\r\n") - return - yield from writer.awrite("\r\n") - if isinstance(headers, bytes) or isinstance(headers, str): - yield from writer.awrite(headers) - else: - for k, v in headers.items(): - yield from writer.awrite(k) - yield from writer.awrite(": ") - yield from writer.awrite(v) - yield from writer.awrite("\r\n") - yield from writer.awrite("\r\n") - -def http_error(writer, status): - yield from start_response(writer, status=status) - yield from writer.awrite(status) - - -class HTTPRequest: - - def __init__(self): - pass - - def read_form_data(self): - size = int(self.headers[b"Content-Length"]) - data = yield from self.reader.readexactly(size) - form = parse_qs(data.decode()) - self.form = form - - def parse_qs(self): - form = parse_qs(self.qs) - self.form = form - - -class WebApp: - - def __init__(self, pkg, routes=None, serve_static=True): - if routes: - self.url_map = routes - else: - self.url_map = [] - if pkg and pkg != "__main__": - self.pkg = pkg.split(".", 1)[0] - else: - self.pkg = None - if serve_static: - self.url_map.append((re.compile("^/(static/.+)"), self.handle_static)) - self.mounts = [] - self.inited = False - # Instantiated lazily - self.template_loader = None - self.headers_mode = "parse" - - def parse_headers(self, reader): - headers = {} - while True: - l = yield from reader.readline() - if l == b"\r\n": - break - k, v = l.split(b":", 1) - headers[k] = v.strip() - return headers - - def _handle(self, reader, writer): - if self.debug > 1: - micropython.mem_info() - - close = True - req = None - try: - request_line = yield from reader.readline() - if request_line == b"": - if self.debug >= 0: - self.log.error("%s: EOF on request start" % reader) - yield from writer.aclose() - return - req = HTTPRequest() - # TODO: bytes vs str - request_line = request_line.decode() - method, path, proto = request_line.split() - if self.debug >= 0: - self.log.info('%.3f %s %s "%s %s"' % (utime.time(), req, writer, method, path)) - path = path.split("?", 1) - qs = "" - if len(path) > 1: - qs = path[1] - path = path[0] - - #print("================") - #print(req, writer) - #print(req, (method, path, qs, proto), req.headers) - - # Find which mounted subapp (if any) should handle this request - app = self - while True: - found = False - for subapp in app.mounts: - root = subapp.url - #print(path, "vs", root) - if path[:len(root)] == root: - app = subapp - found = True - path = path[len(root):] - if not path.startswith("/"): - path = "/" + path - break - if not found: - break - - # We initialize apps on demand, when they really get requests - if not app.inited: - app.init() - - # Find handler to serve this request in app's url_map - found = False - for e in app.url_map: - pattern = e[0] - handler = e[1] - extra = {} - if len(e) > 2: - extra = e[2] - - if path == pattern: - found = True - break - elif not isinstance(pattern, str): - # Anything which is non-string assumed to be a ducktype - # pattern matcher, whose .match() method is called. (Note: - # Django uses .search() instead, but .match() is more - # efficient and we're not exactly compatible with Django - # URL matching anyway.) - m = pattern.match(path) - if m: - req.url_match = m - found = True - break - - if not found: - headers_mode = "skip" - else: - headers_mode = extra.get("headers", self.headers_mode) - - if headers_mode == "skip": - while True: - l = yield from reader.readline() - if l == b"\r\n": - break - elif headers_mode == "parse": - req.headers = yield from self.parse_headers(reader) - else: - assert headers_mode == "leave" - - if found: - req.method = method - req.path = path - req.qs = qs - req.reader = reader - close = yield from handler(req, writer) - else: - yield from start_response(writer, status="404") - yield from writer.awrite("404\r\n") - #print(req, "After response write") - except Exception as e: - if self.debug >= 0: - self.log.exc(e, "%.3f %s %s %r" % (utime.time(), req, writer, e)) - yield from self.handle_exc(req, writer, e) - - if close is not False: - yield from writer.aclose() - if __debug__ and self.debug > 1: - self.log.debug("%.3f %s Finished processing request", utime.time(), req) - - def handle_exc(self, req, resp, e): - # Can be overriden by subclasses. req may be not (fully) initialized. - # resp may already have (partial) content written. - # NOTE: It's your responsibility to not throw exceptions out of - # handle_exc(). If exception is thrown, it will be propagated, and - # your webapp will terminate. - # This method is a coroutine. - return - yield - - def mount(self, url, app): - "Mount a sub-app at the url of current app." - # Inspired by Bottle. It might seem that dispatching to - # subapps would rather be handled by normal routes, but - # arguably, that's less efficient. Taking into account - # that paradigmatically there's difference between handing - # an action and delegating responisibilities to another - # app, Bottle's way was followed. - app.url = url - self.mounts.append(app) - # TODO: Consider instead to do better subapp prefix matching - # in _handle() above. - self.mounts.sort(key=lambda app: len(app.url), reverse=True) - - def route(self, url, **kwargs): - def _route(f): - self.url_map.append((url, f, kwargs)) - return f - return _route - - def add_url_rule(self, url, func, **kwargs): - # Note: this method skips Flask's "endpoint" argument, - # because it's alleged bloat. - self.url_map.append((url, func, kwargs)) - - def _load_template(self, tmpl_name): - if self.template_loader is None: - import utemplate.source - self.template_loader = utemplate.source.Loader(self.pkg, "templates") - return self.template_loader.load(tmpl_name) - - def render_template(self, writer, tmpl_name, args=()): - tmpl = self._load_template(tmpl_name) - for s in tmpl(*args): - yield from writer.awritestr(s) - - def render_str(self, tmpl_name, args=()): - #TODO: bloat - tmpl = self._load_template(tmpl_name) - return ''.join(tmpl(*args)) - - def sendfile(self, writer, fname, content_type=None, headers=None): - if not content_type: - content_type = get_mime_type(fname) - try: - with pkg_resources.resource_stream(self.pkg, fname) as f: - yield from start_response(writer, content_type, "200", headers) - yield from sendstream(writer, f) - except OSError as e: - if e.args[0] == uerrno.ENOENT: - yield from http_error(writer, "404") - else: - raise - - def handle_static(self, req, resp): - path = req.url_match.group(1) - print(path) - if ".." in path: - yield from http_error(resp, "403") - return - yield from self.sendfile(resp, path) - - def init(self): - """Initialize a web application. This is for overriding by subclasses. - This is good place to connect to/initialize a database, for example.""" - self.inited = True - - def serve(self, loop, host, port): - # Actually serve client connections. Subclasses may override this - # to e.g. catch and handle exceptions when dealing with server socket - # (which are otherwise unhandled and will terminate a Picoweb app). - # Note: name and signature of this method may change. - loop.create_task(asyncio.start_server(self._handle, host, port)) - loop.run_forever() - - def run(self, host="127.0.0.1", port=8081, debug=False, lazy_init=False, log=None): - if log is None and debug >= 0: - import ulogging - log = ulogging.getLogger("picoweb") - if debug > 0: - log.setLevel(ulogging.DEBUG) - self.log = log - gc.collect() - self.debug = int(debug) - self.init() - if not lazy_init: - for app in self.mounts: - app.init() - loop = asyncio.get_event_loop() - if debug > 0: - print("* Running on http://%s:%s/" % (host, port)) - self.serve(loop, host, port) - loop.close() diff --git a/Python/Python_Codes/05.1_Camera_WebServer/lib/picoweb/utils.py b/Python/Python_Codes/05.1_Camera_WebServer/lib/picoweb/utils.py deleted file mode 100644 index 8943ed8..0000000 --- a/Python/Python_Codes/05.1_Camera_WebServer/lib/picoweb/utils.py +++ /dev/null @@ -1,28 +0,0 @@ -def unquote_plus(s): - # TODO: optimize - s = s.replace("+", " ") - arr = s.split("%") - arr2 = [chr(int(x[:2], 16)) + x[2:] for x in arr[1:]] - return arr[0] + "".join(arr2) - -def parse_qs(s): - res = {} - if s: - pairs = s.split("&") - for p in pairs: - vals = [unquote_plus(x) for x in p.split("=", 1)] - if len(vals) == 1: - vals.append(True) - old = res.get(vals[0]) - if old is not None: - if not isinstance(old, list): - old = [old] - res[vals[0]] = old - old.append(vals[1]) - else: - res[vals[0]] = vals[1] - return res - -#print(parse_qs("foo")) -#print(parse_qs("fo%41o+bar=+++1")) -#print(parse_qs("foo=1&foo=2")) diff --git a/Python/Python_Codes/05.1_Camera_WebServer/lib/pkg_resources.py b/Python/Python_Codes/05.1_Camera_WebServer/lib/pkg_resources.py deleted file mode 100644 index fd06101..0000000 --- a/Python/Python_Codes/05.1_Camera_WebServer/lib/pkg_resources.py +++ /dev/null @@ -1,27 +0,0 @@ -import uio - -_c = {} - -def resource_stream(package, resource): - if package not in _c: - try: - if package: - p = __import__(package + ".R", None, None, True) - else: - p = __import__("R") - _c[package] = p.R - except ImportError: - if package: - p = __import__(package) - d = p.__path__ - else: - d = "." -# if d[0] != "/": -# import uos -# d = uos.getcwd() + "/" + d - _c[package] = d + "/" - - p = _c[package] - if isinstance(p, dict): - return uio.BytesIO(p[resource]) - return open(p + resource, "rb") diff --git a/Python/Python_Codes/05.1_Camera_WebServer/lib/ulogging.py b/Python/Python_Codes/05.1_Camera_WebServer/lib/ulogging.py deleted file mode 100644 index cea2de0..0000000 --- a/Python/Python_Codes/05.1_Camera_WebServer/lib/ulogging.py +++ /dev/null @@ -1,94 +0,0 @@ -import sys - -CRITICAL = 50 -ERROR = 40 -WARNING = 30 -INFO = 20 -DEBUG = 10 -NOTSET = 0 - -_level_dict = { - CRITICAL: "CRIT", - ERROR: "ERROR", - WARNING: "WARN", - INFO: "INFO", - DEBUG: "DEBUG", -} - -_stream = sys.stderr - -class Logger: - - level = NOTSET - - def __init__(self, name): - self.name = name - - def _level_str(self, level): - l = _level_dict.get(level) - if l is not None: - return l - return "LVL%s" % level - - def setLevel(self, level): - self.level = level - - def isEnabledFor(self, level): - return level >= (self.level or _level) - - def log(self, level, msg, *args): - if level >= (self.level or _level): - _stream.write("%s:%s:" % (self._level_str(level), self.name)) - if not args: - print(msg, file=_stream) - else: - print(msg % args, file=_stream) - - def debug(self, msg, *args): - self.log(DEBUG, msg, *args) - - def info(self, msg, *args): - self.log(INFO, msg, *args) - - def warning(self, msg, *args): - self.log(WARNING, msg, *args) - - def error(self, msg, *args): - self.log(ERROR, msg, *args) - - def critical(self, msg, *args): - self.log(CRITICAL, msg, *args) - - def exc(self, e, msg, *args): - self.log(ERROR, msg, *args) - sys.print_exception(e, _stream) - - def exception(self, msg, *args): - self.exc(sys.exc_info()[1], msg, *args) - - -_level = INFO -_loggers = {} - -def getLogger(name): - if name in _loggers: - return _loggers[name] - l = Logger(name) - _loggers[name] = l - return l - -def info(msg, *args): - getLogger(None).info(msg, *args) - -def debug(msg, *args): - getLogger(None).debug(msg, *args) - -def basicConfig(level=INFO, filename=None, stream=None, format=None): - global _level, _stream - _level = level - if stream: - _stream = stream - if filename is not None: - print("logging.basicConfig: filename arg is not supported") - if format is not None: - print("logging.basicConfig: format arg is not supported") diff --git a/Python/Python_Codes/05.1_Camera_WebServer/picoweb_video.py b/Python/Python_Codes/05.1_Camera_WebServer/picoweb_video.py deleted file mode 100644 index 0f16869..0000000 --- a/Python/Python_Codes/05.1_Camera_WebServer/picoweb_video.py +++ /dev/null @@ -1,119 +0,0 @@ -# This section uses firmware from Lemariva's Micropython-camera-driver. -# for details, please refer to: https://github.com/lemariva/micropython-camera-driver -import picoweb -import utime -import camera -import gc - -SSID = "********" # Enter your WiFi name -PASSWORD = "********" # Enter your WiFi password - -# Let ESP32 connect to wifi. -def wifi_connect(): - import network - wlan = network.WLAN(network.STA_IF) - wlan.active(True) - if not wlan.isconnected(): - print('connecting to network...') - wlan.connect(SSID, PASSWORD) - start = utime.time() - while not wlan.isconnected(): - utime.sleep(1) - if utime.time()-start > 5: - print("connect timeout!") - break - if wlan.isconnected(): - print('network config:', wlan.ifconfig()) - -# Initializing the Camera -def camera_init(): - # Disable camera initialization - camera.deinit() - # Enable camera initialization - camera.init(0, d0=4, d1=5, d2=18, d3=19, d4=36, d5=39, d6=34, d7=35, - format=camera.JPEG, framesize=camera.FRAME_VGA, - xclk_freq=camera.XCLK_20MHz, - href=23, vsync=25, reset=-1, pwdn=-1, - sioc=27, siod=26, xclk=21, pclk=22, fb_location=camera.PSRAM) - - camera.framesize(camera.FRAME_VGA) # Set the camera resolution - # The options are the following: - # FRAME_96X96 FRAME_QQVGA FRAME_QCIF FRAME_HQVGA FRAME_240X240 - # FRAME_QVGA FRAME_CIF FRAME_HVGA FRAME_VGA FRAME_SVGA - # FRAME_XGA FRAME_HD FRAME_SXGA FRAME_UXGA - # Note: The higher the resolution, the more memory is used. - # Note: And too much memory may cause the program to fail. - - camera.flip(1) # Flip up and down window: 0-1 - camera.mirror(1) # Flip window left and right: 0-1 - camera.saturation(0) # saturation: -2,2 (default 0). -2 grayscale - camera.brightness(0) # brightness: -2,2 (default 0). 2 brightness - camera.contrast(0) # contrast: -2,2 (default 0). 2 highcontrast - camera.quality(10) # quality: # 10-63 lower number means higher quality - # Note: The smaller the number, the sharper the image. The larger the number, the more blurry the image - - camera.speffect(camera.EFFECT_NONE) # special effects: - # EFFECT_NONE (default) EFFECT_NEG EFFECT_BW EFFECT_RED EFFECT_GREEN EFFECT_BLUE EFFECT_RETRO - camera.whitebalance(camera.WB_NONE) # white balance - # WB_NONE (default) WB_SUNNY WB_CLOUDY WB_OFFICE WB_HOME - -# HTTP Response Content -index_web=""" -HTTP/1.0 200 OK\r\n - - - Video Streaming - - -

Video Streaming Demonstration

- - - -""" - -# HTTP Response -def index(req, resp): - # You can construct an HTTP response completely yourself, having - yield from resp.awrite(index_web) - -# Send camera pictures -def send_frame(): - buf = camera.capture() - yield (b'--frame\r\n' - b'Content-Type: image/jpeg\r\n\r\n' - + buf + b'\r\n') - del buf - gc.collect() - -# Video transmission -def video(req, resp): - yield from picoweb.start_response(resp, content_type="multipart/x-mixed-replace; boundary=frame") - while True: - yield from resp.awrite(next(send_frame())) - gc.collect() - - -ROUTES = [ - # You can specify exact URI string matches... - ("/", index), - ("/video", video), -] - - -if __name__ == '__main__': - - import ulogging as logging - logging.basicConfig(level=logging.INFO) - camera_init() - wifi_connect() - - #Create an app object that contains two decorators - app = picoweb.WebApp(__name__, ROUTES) - - app.run(debug=1, port=80, host="0.0.0.0") - # debug values: - # -1 disable all logging - # 0 (False) normal logging: requests and errors - # 1 (True) debug logging - # 2 extra debug logging - diff --git a/Python/Python_Firmware/esp32spiram-20220618-v1.19.1.bin b/Python/Python_Firmware/esp32spiram-20220618-v1.19.1.bin deleted file mode 100644 index a85f143..0000000 Binary files a/Python/Python_Firmware/esp32spiram-20220618-v1.19.1.bin and /dev/null differ diff --git a/Python/Python_Firmware/esp32spiram-idf4-20191220-v1.12.bin b/Python/Python_Firmware/esp32spiram-idf4-20191220-v1.12.bin deleted file mode 100644 index 78e09cd..0000000 Binary files a/Python/Python_Firmware/esp32spiram-idf4-20191220-v1.12.bin and /dev/null differ diff --git a/Python/Python_Libraries/I2C_LCD.py b/Python/Python_Libraries/I2C_LCD.py deleted file mode 100644 index eb2da3f..0000000 --- a/Python/Python_Libraries/I2C_LCD.py +++ /dev/null @@ -1,80 +0,0 @@ -from LCD_API import LcdApi -from machine import I2C -from time import sleep_ms - -# The PCF8574 has a jumper selectable address: 0x20 - 0x27 -DEFAULT_I2C_ADDR = 0x27 - -# Defines shifts or masks for the various LCD line attached to the PCF8574 - -MASK_RS = 0x01 -MASK_RW = 0x02 -MASK_E = 0x04 -SHIFT_BACKLIGHT = 3 -SHIFT_DATA = 4 - - -class I2cLcd(LcdApi): - def __init__(self, i2c, i2c_addr, num_lines, num_columns): - self.i2c = i2c - self.i2c_addr = i2c_addr - self.i2c.writeto(self.i2c_addr, bytearray([0])) - sleep_ms(20) # Allow LCD time to powerup - # Send reset 3 times - self.hal_write_init_nibble(self.LCD_FUNCTION_RESET) - sleep_ms(5) # need to delay at least 4.1 msec - self.hal_write_init_nibble(self.LCD_FUNCTION_RESET) - sleep_ms(1) - self.hal_write_init_nibble(self.LCD_FUNCTION_RESET) - sleep_ms(1) - # Put LCD into 4 bit mode - self.hal_write_init_nibble(self.LCD_FUNCTION) - sleep_ms(1) - LcdApi.__init__(self, num_lines, num_columns) - cmd = self.LCD_FUNCTION - if num_lines > 1: - cmd |= self.LCD_FUNCTION_2LINES - self.hal_write_command(cmd) - - def hal_write_init_nibble(self, nibble): - """Writes an initialization nibble to the LCD. - - This particular function is only used during initialization. - """ - byte = ((nibble >> 4) & 0x0f) << SHIFT_DATA - self.i2c.writeto(self.i2c_addr, bytearray([byte | MASK_E])) - self.i2c.writeto(self.i2c_addr, bytearray([byte])) - - def hal_backlight_on(self): - """Allows the hal layer to turn the backlight on.""" - self.i2c.writeto(self.i2c_addr, bytearray([1 << SHIFT_BACKLIGHT])) - - def hal_backlight_off(self): - """Allows the hal layer to turn the backlight off.""" - self.i2c.writeto(self.i2c_addr, bytearray([0])) - - def hal_write_command(self, cmd): - """Writes a command to the LCD. - - Data is latched on the falling edge of E. - """ - byte = ((self.backlight << SHIFT_BACKLIGHT) | (((cmd >> 4) & 0x0f) << SHIFT_DATA)) - self.i2c.writeto(self.i2c_addr, bytearray([byte | MASK_E])) - self.i2c.writeto(self.i2c_addr, bytearray([byte])) - byte = ((self.backlight << SHIFT_BACKLIGHT) | ((cmd & 0x0f) << SHIFT_DATA)) - self.i2c.writeto(self.i2c_addr, bytearray([byte | MASK_E])) - self.i2c.writeto(self.i2c_addr, bytearray([byte])) - if cmd <= 3: - # The home and clear commands require a worst case delay of 4.1 msec - sleep_ms(5) - - def hal_write_data(self, data): - """Write data to the LCD.""" - byte = (MASK_RS | (self.backlight << SHIFT_BACKLIGHT) | (((data >> 4) & 0x0f) << SHIFT_DATA)) - self.i2c.writeto(self.i2c_addr, bytearray([byte | MASK_E])) - self.i2c.writeto(self.i2c_addr, bytearray([byte])) - byte = (MASK_RS | (self.backlight << SHIFT_BACKLIGHT) | ((data & 0x0f) << SHIFT_DATA)) - self.i2c.writeto(self.i2c_addr, bytearray([byte | MASK_E])) - self.i2c.writeto(self.i2c_addr, bytearray([byte])) - - diff --git a/Python/Python_Libraries/LCD_API.py b/Python/Python_Libraries/LCD_API.py deleted file mode 100644 index ebced3a..0000000 --- a/Python/Python_Libraries/LCD_API.py +++ /dev/null @@ -1,190 +0,0 @@ -import time - -class LcdApi: - # The following constant names were lifted from the avrlib lcd.h - # header file, however, I changed the definitions from bit numbers - # to bit masks. - # - # LCD controller command set - - LCD_CLR = 0x01 # DB0: clear display - LCD_HOME = 0x02 # DB1: return to home position - - LCD_ENTRY_MODE = 0x04 # DB2: set entry mode - LCD_ENTRY_INC = 0x02 # --DB1: increment - LCD_ENTRY_SHIFT = 0x01 # --DB0: shift - - LCD_ON_CTRL = 0x08 # DB3: turn lcd/cursor on - LCD_ON_DISPLAY = 0x04 # --DB2: turn display on - LCD_ON_CURSOR = 0x02 # --DB1: turn cursor on - LCD_ON_BLINK = 0x01 # --DB0: blinking cursor - - LCD_MOVE = 0x10 # DB4: move cursor/display - LCD_MOVE_DISP = 0x08 # --DB3: move display (0-> move cursor) - LCD_MOVE_RIGHT = 0x04 # --DB2: move right (0-> left) - - LCD_FUNCTION = 0x20 # DB5: function set - LCD_FUNCTION_8BIT = 0x10 # --DB4: set 8BIT mode (0->4BIT mode) - LCD_FUNCTION_2LINES = 0x08 # --DB3: two lines (0->one line) - LCD_FUNCTION_10DOTS = 0x04 # --DB2: 5x10 font (0->5x7 font) - LCD_FUNCTION_RESET = 0x30 # See "Initializing by Instruction" section - - LCD_CGRAM = 0x40 # DB6: set CG RAM address - LCD_DDRAM = 0x80 # DB7: set DD RAM address - - LCD_RS_CMD = 0 - LCD_RS_DATA = 1 - - LCD_RW_WRITE = 0 - LCD_RW_READ = 1 - - def __init__(self, num_lines, num_columns): - self.num_lines = num_lines - if self.num_lines > 4: - self.num_lines = 4 - self.num_columns = num_columns - if self.num_columns > 40: - self.num_columns = 40 - self.cursor_x = 0 - self.cursor_y = 0 - self.backlight = True - self.display_off() - self.backlight_on() - self.clear() - self.hal_write_command(self.LCD_ENTRY_MODE | self.LCD_ENTRY_INC) - self.hide_cursor() - self.display_on() - - def clear(self): - """Clears the LCD display and moves the cursor to the top left - corner. - """ - self.hal_write_command(self.LCD_CLR) - self.hal_write_command(self.LCD_HOME) - self.cursor_x = 0 - self.cursor_y = 0 - - def show_cursor(self): - """Causes the cursor to be made visible.""" - self.hal_write_command(self.LCD_ON_CTRL | self.LCD_ON_DISPLAY | - self.LCD_ON_CURSOR) - - def hide_cursor(self): - """Causes the cursor to be hidden.""" - self.hal_write_command(self.LCD_ON_CTRL | self.LCD_ON_DISPLAY) - - def blink_cursor_on(self): - """Turns on the cursor, and makes it blink.""" - self.hal_write_command(self.LCD_ON_CTRL | self.LCD_ON_DISPLAY | - self.LCD_ON_CURSOR | self.LCD_ON_BLINK) - - def blink_cursor_off(self): - """Turns on the cursor, and makes it no blink (i.e. be solid).""" - self.hal_write_command(self.LCD_ON_CTRL | self.LCD_ON_DISPLAY | - self.LCD_ON_CURSOR) - - def display_on(self): - """Turns on (i.e. unblanks) the LCD.""" - self.hal_write_command(self.LCD_ON_CTRL | self.LCD_ON_DISPLAY) - - def display_off(self): - """Turns off (i.e. blanks) the LCD.""" - self.hal_write_command(self.LCD_ON_CTRL) - - def backlight_on(self): - """Turns the backlight on. - - This isn't really an LCD command, but some modules have backlight - controls, so this allows the hal to pass through the command. - """ - self.backlight = True - self.hal_backlight_on() - - def backlight_off(self): - """Turns the backlight off. - - This isn't really an LCD command, but some modules have backlight - controls, so this allows the hal to pass through the command. - """ - self.backlight = False - self.hal_backlight_off() - - def move_to(self, cursor_x, cursor_y): - """Moves the cursor position to the indicated position. The cursor - position is zero based (i.e. cursor_x == 0 indicates first column). - """ - self.cursor_x = cursor_x - self.cursor_y = cursor_y - addr = cursor_x & 0x3f - if cursor_y & 1: - addr += 0x40 # Lines 1 & 3 add 0x40 - if cursor_y & 2: - addr += 0x14 # Lines 2 & 3 add 0x14 - self.hal_write_command(self.LCD_DDRAM | addr) - - def putchar(self, char): - """Writes the indicated character to the LCD at the current cursor - position, and advances the cursor by one position. - """ - if char != '\n': - self.hal_write_data(ord(char)) - self.cursor_x += 1 - if self.cursor_x >= self.num_columns or char == '\n': - self.cursor_x = 0 - self.cursor_y += 1 - if self.cursor_y >= self.num_lines: - self.cursor_y = 0 - self.move_to(self.cursor_x, self.cursor_y) - - def putstr(self, string): - """Write the indicated string to the LCD at the current cursor - position and advances the cursor position appropriately. - """ - for char in string: - self.putchar(char) - - def custom_char(self, location, charmap): - """Write a character to one of the 8 CGRAM locations, available - as chr(0) through chr(7). - """ - location &= 0x7 - self.hal_write_command(self.LCD_CGRAM | (location << 3)) - self.hal_sleep_us(40) - for i in range(8): - self.hal_write_data(charmap[i]) - self.hal_sleep_us(40) - self.move_to(self.cursor_x, self.cursor_y) - - def hal_backlight_on(self): - """Allows the hal layer to turn the backlight on. - - If desired, a derived HAL class will implement this function. - """ - pass - - def hal_backlight_off(self): - """Allows the hal layer to turn the backlight off. - - If desired, a derived HAL class will implement this function. - """ - pass - - def hal_write_command(self, cmd): - """Write a command to the LCD. - - It is expected that a derived HAL class will implement this - function. - """ - raise NotImplementedError - - def hal_write_data(self, data): - """Write data to the LCD. - - It is expected that a derived HAL class will implement this - function. - """ - raise NotImplementedError - - def hal_sleep_us(self, usecs): - """Sleep for some time (given in microseconds).""" - time.sleep_us(usecs) diff --git a/Python/Python_Libraries/adc.py b/Python/Python_Libraries/adc.py deleted file mode 100644 index 5b8f44b..0000000 --- a/Python/Python_Libraries/adc.py +++ /dev/null @@ -1,30 +0,0 @@ -from machine import ADC,Pin -import time - -adc0=ADC(Pin(36)) -adc1=ADC(Pin(39)) -adc2=ADC(Pin(34)) -adc3=ADC(Pin(35)) -adc4=ADC(Pin(32)) -adc5=ADC(Pin(33)) -adc0.atten(ADC.ATTN_11DB) -adc1.atten(ADC.ATTN_11DB) -adc2.atten(ADC.ATTN_11DB) -adc3.atten(ADC.ATTN_11DB) -adc4.atten(ADC.ATTN_11DB) -adc5.atten(ADC.ATTN_11DB) -adc0.width(ADC.WIDTH_12BIT) -adc1.width(ADC.WIDTH_12BIT) -adc2.width(ADC.WIDTH_12BIT) -adc3.width(ADC.WIDTH_12BIT) -adc4.width(ADC.WIDTH_12BIT) -adc5.width(ADC.WIDTH_12BIT) - -while True: - print("adc0=",adc0.read()) - print("adc1=",adc1.read()) - print("adc2=",adc2.read()) - print("adc3=",adc3.read()) - print("adc4=",adc4.read()) - print("adc5=",adc5.read()) - time.sleep(0.1) \ No newline at end of file diff --git a/Python/Python_Libraries/dht.py b/Python/Python_Libraries/dht.py deleted file mode 100644 index 9a69e7e..0000000 --- a/Python/Python_Libraries/dht.py +++ /dev/null @@ -1,32 +0,0 @@ -# DHT11/DHT22 driver for MicroPython on ESP8266 -# MIT license; Copyright (c) 2016 Damien P. George - -import esp - -class DHTBase: - def __init__(self, pin): - self.pin = pin - self.buf = bytearray(5) - - def measure(self): - buf = self.buf - esp.dht_readinto(self.pin, buf) - if (buf[0] + buf[1] + buf[2] + buf[3]) & 0xff != buf[4]: - raise Exception("checksum error") - -class DHT11(DHTBase): - def humidity(self): - return self.buf[0] - - def temperature(self): - return self.buf[2] - -class DHT22(DHTBase): - def humidity(self): - return (self.buf[0] << 8 | self.buf[1]) * 0.1 - - def temperature(self): - t = ((self.buf[2] & 0x7f) << 8 | self.buf[3]) * 0.1 - if self.buf[2] & 0x80: - t = -t - return t diff --git a/Python/Python_Libraries/hcsr04.py b/Python/Python_Libraries/hcsr04.py deleted file mode 100644 index 3be1de8..0000000 --- a/Python/Python_Libraries/hcsr04.py +++ /dev/null @@ -1,53 +0,0 @@ -from machine import Pin -import time - -soundVelocity=340 -distance=0 - -class SR04(object): - def __init__(self, trig: int=13, echo: int=14): - self._trigPin = Pin(trig,Pin.OUT,0) - self._echoPin = Pin(echo,Pin.IN,0) - - def distanceCM(self): - self._trigPin.value(1) - time.sleep_us(10) - self._trigPin.value(0) - while(self._echoPin.value()==0): - pass - pingStart=time.ticks_us() - while(self._echoPin.value()==1): - pass - pingStop=time.ticks_us() - pingTime=time.ticks_diff(pingStop,pingStart) - distance=pingTime*soundVelocity//2//10000 - return distance - - def distanceMM(self): - self._trigPin.value(1) - time.sleep_us(10) - self._trigPin.value(0) - while(self._echoPin.value()==0): - pass - pingStart=time.ticks_us() - while(self._echoPin.value()==1): - pass - pingStop=time.ticks_us() - pingTime=time.ticks_diff(pingStop,pingStart) - distance=pingTime*soundVelocity//2//1000 - return distance - - def distance(self): - self._trigPin.value(1) - time.sleep_us(10) - self._trigPin.value(0) - while(self._echoPin.value()==0): - pass - pingStart=time.ticks_us() - while(self._echoPin.value()==1): - pass - pingStop=time.ticks_us() - pingTime=time.ticks_diff(pingStop,pingStart) - distance=pingTime*soundVelocity/2/10000 - return distance - diff --git a/Python/Python_Libraries/irrecvdata.py b/Python/Python_Libraries/irrecvdata.py deleted file mode 100644 index 334d14a..0000000 --- a/Python/Python_Libraries/irrecvdata.py +++ /dev/null @@ -1,52 +0,0 @@ -import machine -import utime -import micropython - -class irGetCMD(object): - def __init__(self, gpioNum): - self.irRecv = machine.Pin(gpioNum, machine.Pin.IN, machine.Pin.PULL_UP) - self.irRecv.irq( - trigger=machine.Pin.IRQ_RISING | machine.Pin.IRQ_FALLING, - handler=self.__logHandler) - self.logList = [] - self.index = 0 - self.start = 0 - self.dictKeyNum = 0 - self.irDict = {} - - def __logHandler(self, source): - thisComeInTime = utime.ticks_us() - if self.start == 0: - self.start = thisComeInTime - self.index = 0 - return - self.logList.append(utime.ticks_diff(thisComeInTime, self.start)) - self.start = thisComeInTime - self.index += 1 - - def ir_read(self): - utime.sleep_ms(200) - if utime.ticks_diff( - utime.ticks_us(), - self.start) > 800000 and self.index > 0: - ir_buffer=[] - for i in range(3,66,2): - if self.logList[i]>800: - ir_buffer.append(1) - else: - ir_buffer.append(0) - irValue=0x00000000 - for i in range(0,4): - for j in range(0,8): - if ir_buffer[i*8+j]==1: - irValue=irValue<<1 - irValue |= 0x01 - else: - irValue=irValue<<1 - irValue &= 0xfffffffe - # reset - self.logList = [] - self.index = 0 - self.start = 0 - return hex(irValue) - diff --git a/Python/Python_Libraries/keypad.py b/Python/Python_Libraries/keypad.py deleted file mode 100644 index 509304a..0000000 --- a/Python/Python_Libraries/keypad.py +++ /dev/null @@ -1,124 +0,0 @@ -from machine import Pin -import time - -lastChangeTime=0 -keyState=0 -State=0 - -class KeyPad(object): - def __init__(self, row1: int=14, row2: int=27, row3: int=26, row4: int=25, col1: int=13, col2: int=21, col3: int=22, col4: int=23): - self._row1=Pin(row1,Pin.OUT) - self._row2=Pin(row2,Pin.OUT) - self._row3=Pin(row3,Pin.OUT) - self._row4=Pin(row4,Pin.OUT) - self._col1=Pin(col1,Pin.IN,Pin.PULL_DOWN) - self._col2=Pin(col2,Pin.IN,Pin.PULL_DOWN) - self._col3=Pin(col3,Pin.IN,Pin.PULL_DOWN) - self._col4=Pin(col4,Pin.IN,Pin.PULL_DOWN) - - - def scan(self): - global lastChangeTime - nowTime=time.ticks_ms() - if(nowTime-lastChangeTime>10): - lastChangeTime=nowTime - if(self._readCol()!=0): - State=self._readCol() - return State - - def _readRow1(self): - self._setRow(1) - if(self._col1.value()==1): - keyState='1' - elif(self._col2.value()==1): - keyState='2' - elif(self._col3.value()==1): - keyState='3' - elif(self._col4.value()==1): - keyState='A' - else: - keyState=0 - return keyState - - def _readRow2(self): - self._setRow(2) - if(self._col1.value()==1): - keyState='4' - elif(self._col2.value()==1): - keyState='5' - elif(self._col3.value()==1): - keyState='6' - elif(self._col4.value()==1): - keyState='B' - else: - keyState=0 - return keyState - - def _readRow3(self): - self._setRow(3) - if(self._col1.value()==1): - keyState='7' - elif(self._col2.value()==1): - keyState='8' - elif(self._col3.value()==1): - keyState='9' - elif(self._col4.value()==1): - keyState='C' - else: - keyState=0 - return keyState - - def _readRow4(self): - self._setRow(4) - if(self._col1.value()==1): - keyState='*' - elif(self._col2.value()==1): - keyState='0' - elif(self._col3.value()==1): - keyState='#' - elif(self._col4.value()==1): - keyState='D' - else: - keyState=0 - return keyState - - def _readCol(self): - data_buffer1=self._readRow1() - data_buffer2=self._readRow2() - data_buffer3=self._readRow3() - data_buffer4=self._readRow4() - if (data_buffer1!=0): - return data_buffer1 - elif (data_buffer2!=0): - return data_buffer2 - elif (data_buffer3!=0): - return data_buffer3 - elif (data_buffer4!=0): - return data_buffer4 - - def _setRow(self,num): - if num==1: - self._row1.on() - self._row2.off() - self._row3.off() - self._row4.off() - if num==2: - self._row1.off() - self._row2.on() - self._row3.off() - self._row4.off() - if num==3: - self._row1.off() - self._row2.off() - self._row3.on() - self._row4.off() - if num==4: - self._row1.off() - self._row2.off() - self._row3.off() - self._row4.on() - - - - - diff --git a/Python/Python_Libraries/mpu6050.py b/Python/Python_Libraries/mpu6050.py deleted file mode 100644 index 9dd34db..0000000 --- a/Python/Python_Libraries/mpu6050.py +++ /dev/null @@ -1,160 +0,0 @@ -import machine -from machine import I2C,Pin -import time - -MPU_ADDR = const(0X68) - -MPU_DEVICE_ID_REG = 0x75 -MPU_PWR_MGMT1_REG = 0x6B -MPU_PWR_MGMT2_REG = 0x6C -MPU_SELF_TESTX_REG = 0x0D -MPU_SELF_TESTY_REG = 0x0E -MPU_SELF_TESTZ_REG = 0x0F -MPU_SELF_TESTA_REG = 0x10 -MPU_SAMPLE_RATE_REG = 0x19 -MPU_CFG_REG = 0x1A -MPU_GYRO_CFG_REG = 0x1B -MPU_ACCEL_CFG_REG = 0x1C -MPU_MOTION_DET_REG = 0x1F -MPU_FIFO_EN_REG = 0x23 -MPU_I2CMST_CTRL_REG = 0x24 -MPU_I2CSLV0_ADDR_REG = 0x25 -MPU_I2CSLV0_REG = 0x26 -MPU_I2CSLV0_CTRL_REG = 0x27 -MPU_I2CSLV1_ADDR_REG = 0x28 -MPU_I2CSLV1_REG = 0x29 -MPU_I2CSLV1_CTRL_REG = 0x2A -MPU_I2CSLV2_ADDR_REG = 0x2B -MPU_I2CSLV2_REG = 0x2C -MPU_I2CSLV2_CTRL_REG = 0x2D -MPU_I2CSLV3_ADDR_REG = 0x2E -MPU_I2CSLV3_REG = 0x2F -MPU_I2CSLV3_CTRL_REG = 0x30 -MPU_I2CSLV4_ADDR_REG = 0x31 -MPU_I2CSLV4_REG = 0x32 -MPU_I2CSLV4_DO_REG = 0x33 -MPU_I2CSLV4_CTRL_REG = 0x34 -MPU_I2CSLV4_DI_REG = 0x35 - -MPU_I2CMST_STA_REG = 0x36 -MPU_INTBP_CFG_REG = 0x37 -MPU_INT_EN_REG = 0x38 -MPU_INT_STA_REG = 0x3A - -MPU_ACCEL_XOUTH_REG = 0x3B -MPU_ACCEL_XOUTL_REG = 0x3C -MPU_ACCEL_YOUTH_REG = 0x3D -MPU_ACCEL_YOUTL_REG = 0x3E -MPU_ACCEL_ZOUTH_REG = 0x3F -MPU_ACCEL_ZOUTL_REG = 0x40 - -MPU_TEMP_OUTH_REG = 0x41 -MPU_TEMP_OUTL_REG = 0x42 - -MPU_GYRO_XOUTH_REG = 0x43 -MPU_GYRO_XOUTL_REG = 0x44 -MPU_GYRO_YOUTH_REG = 0x45 -MPU_GYRO_YOUTL_REG = 0x46 -MPU_GYRO_ZOUTH_REG = 0x47 -MPU_GYRO_ZOUTL_REG = 0x48 - -MPU_I2CSLV0_DO_REG = 0x63 -MPU_I2CSLV1_DO_REG = 0x64 -MPU_I2CSLV2_DO_REG = 0x65 -MPU_I2CSLV3_DO_REG = 0x66 - -MPU_I2CMST_DELAY_REG = 0x67 -MPU_SIGPATH_RST_REG = 0x68 -MPU_MDETECT_CTRL_REG = 0x69 -MPU_USER_CTRL_REG = 0x6A -MPU_PWR_MGMT1_REG = 0x6B -MPU_PWR_MGMT2_REG = 0x6C -MPU_FIFO_CNTH_REG = 0x72 -MPU_FIFO_CNTL_REG = 0x73 -MPU_FIFO_RW_REG = 0x74 -MPU_DEVICE_ID_REG = 0x75 - -MPU_ADDR_ADDR = 0x68 - -class MPU6050(object): - def __init__(self,sclpin,sdapin): - self.i2c=I2C(scl=Pin(sclpin),sda=Pin(sdapin),freq=100000) - - def Write_Mpu6050_REG(self,reg,dat): - buf=bytearray(1) - buf[0]=dat - self.i2c.writeto_mem(MPU_ADDR,reg,buf) - def Read_Mpu6050_REG(self,reg): - t = self.i2c.readfrom_mem(MPU_ADDR,reg,1)[0] - return (t>>4)*10 + (t%16) - def Read_Mpu6050_Len(self,reg,len,buffer): - #buffer=bytearray(len) - self.i2c.readfrom_mem_into(MPU_ADDR,reg,buffer) - - #fsr:0,±250dps;1,±500dps;2,±1000dps;3,±2000dps - def MPU_Set_Gyro_Fsr(self,fsr): - return self.Write_Mpu6050_REG(MPU_GYRO_CFG_REG,fsr<<3) - #fsr:0,±2g;1,±4g;2,±8g;3,±16g - def MPU_Set_Accel_Fsr(self,fsr): - return self.Write_Mpu6050_REG(MPU_ACCEL_CFG_REG,fsr<<3) - - def MPU_Set_LPF(self,lpf): - if(lpf>=188): - data=1 - elif(lpf>=98): - data=2 - elif(lpf>=42): - data=3 - elif(lpf>=20): - data=4 - elif(lpf>=10): - data=5 - else: - data=6; - self.Write_Mpu6050_REG(MPU_CFG_REG,data) - #rate:4~1000(Hz) - def MPU_Set_Rate(self,rate): - if(rate>1000): - rate=1000 - if(rate<4): - rate=4; - data=int(1000/rate-1) - datas=self.Write_Mpu6050_REG(MPU_SAMPLE_RATE_REG,data) - return self.MPU_Set_LPF(rate/2) - def MPU_Init(self): - self.Write_Mpu6050_REG(MPU_PWR_MGMT1_REG,0x80) - time.sleep_ms(100) - self.Write_Mpu6050_REG(MPU_PWR_MGMT1_REG,0x00) - self.MPU_Set_Gyro_Fsr(3) - self.MPU_Set_Accel_Fsr(0) - self.MPU_Set_Rate(50) - self.Write_Mpu6050_REG(MPU_INT_EN_REG,0x00) - self.Write_Mpu6050_REG(MPU_USER_CTRL_REG,0x00) - self.Write_Mpu6050_REG(MPU_FIFO_EN_REG,0x00) - self.Write_Mpu6050_REG(MPU_INTBP_CFG_REG,0x80) - res = self.Read_Mpu6050_REG(MPU_DEVICE_ID_REG) - if(res == 68): - self.Write_Mpu6050_REG(MPU_PWR_MGMT1_REG,0x01) - self.Write_Mpu6050_REG(MPU_PWR_MGMT2_REG,0x00) - self.MPU_Set_Rate(50) - else: - return 1 - return 0 - #Get raw data - def MPU_Get_Gyroscope(self): - buf = bytearray(6) - res = self.Read_Mpu6050_Len(MPU_GYRO_XOUTH_REG,6,buf) - gx=(buf[0]<<8)|buf[1] - gy=(buf[2]<<8)|buf[3] - gz=(buf[4]<<8)|buf[5] - #print('MPU_Get_Gyroscope: ',gx,gy,gz) - return gx,gy,gz - def MPU_Get_Accelerometer(self): - buf = bytearray(6) - res = self.Read_Mpu6050_Len(MPU_ACCEL_XOUTH_REG,6,buf) - ax=(buf[0]<<8)|buf[1] - ay=(buf[2]<<8)|buf[3] - az=(buf[4]<<8)|buf[5] - #print('MPU_Get_Accelerometer: ',ax,ay,az) - return ax,ay,az - diff --git a/Python/Python_Libraries/my74HC595.py b/Python/Python_Libraries/my74HC595.py deleted file mode 100644 index 925716c..0000000 --- a/Python/Python_Libraries/my74HC595.py +++ /dev/null @@ -1,66 +0,0 @@ -from machine import Pin - -# 74HC595 -# 16: VCC -# 15, 1~7: Q0~Q7 -# 14: DS -# 13: OE -# 12: STCP -# 11: SHCP -# 9: Q7S -# 8: GND - -class Chip74HC595(object): - def __init__(self, ds: int=14, stcp: int=12, shcp: int=13, oe: int=5): - self._ds = Pin(ds, Pin.OUT, value=0) - self._shcp = Pin(shcp, Pin.OUT, value=0) - self._stcp = Pin(stcp, Pin.OUT, value=0) - self._oe = Pin(oe, Pin.OUT, value=0) - self.enable() - - def shiftOut(self,direction,data): - self._shcp.on() - self._stcp.on() - if direction: - for i in range(8): - bit=data<>i - bit=bit&0x01 - if bit==0x01: - self._ds.on() - else: - self._ds.off() - self._shift_bit() - self._send_data() - - def clear(self): - for i in range(8): - self._ds.off() - self._shift_bit() - self._send_data() - self.enable() - - def _shift_bit(self): - self._shcp.off() - self._shcp.on() - - def _send_data(self): - self._stcp.off() - self._stcp.on() - - def disable(self): - self._oe.on() - - def enable(self): - self._oe.off() - - diff --git a/Python/Python_Libraries/myservo.py b/Python/Python_Libraries/myservo.py deleted file mode 100644 index a55bb8e..0000000 --- a/Python/Python_Libraries/myservo.py +++ /dev/null @@ -1,32 +0,0 @@ - -from machine import Pin,PWM - -class myServo(object): - def __init__(self, pin: int=15, hz: int=50): - self._servo = PWM(Pin(pin),hz) - - def myServoWriteDuty(self, duty): - if duty <= 26: - duty = 26 - if duty >= 128: - duty = 128 - self._servo.duty(duty) - - def myServoWriteAngle(self, pos): - if pos <= 0: - pos = 0 - if pos >= 180: - pos = 180 - pos_buffer=(pos/180)*(128-26) - self._servo.duty(int(pos_buffer)+26) - - def myServoWriteTime(self, us): - if us <= 500: - us = 500 - if us >= 2500: - us = 2500 - pos_buffer=(1024*us)/20000 - self._servo.duty(int(pos_buffer)) - - def deinit(self): - self._servo.deinit() diff --git a/Python/Python_Libraries/neopixel.py b/Python/Python_Libraries/neopixel.py deleted file mode 100644 index 86c1586..0000000 --- a/Python/Python_Libraries/neopixel.py +++ /dev/null @@ -1,33 +0,0 @@ -# NeoPixel driver for MicroPython on ESP32 -# MIT license; Copyright (c) 2016 Damien P. George - -from esp import neopixel_write - - -class NeoPixel: - ORDER = (1, 0, 2, 3) - - def __init__(self, pin, n, bpp=3, timing=0): - self.pin = pin - self.n = n - self.bpp = bpp - self.buf = bytearray(n * bpp) - self.pin.init(pin.OUT) - self.timing = timing - - def __setitem__(self, index, val): - offset = index * self.bpp - for i in range(self.bpp): - self.buf[offset + self.ORDER[i]] = val[i] - - def __getitem__(self, index): - offset = index * self.bpp - return tuple(self.buf[offset + self.ORDER[i]] - for i in range(self.bpp)) - - def fill(self, color): - for i in range(self.n): - self[i] = color - - def write(self): - neopixel_write(self.pin, self.buf, self.timing) diff --git a/Python/Python_Libraries/pwm.py b/Python/Python_Libraries/pwm.py deleted file mode 100644 index df570ee..0000000 --- a/Python/Python_Libraries/pwm.py +++ /dev/null @@ -1,40 +0,0 @@ -from machine import Pin,PWM - -class myPWM(): - def __init__(self, pwm0: int=15, pwm1: int=2, pwm2: int=0, pwm3: int=4, pwm4: int=5, pwm5: int=18, pwm6: int=19, pwm7: int=21): - self._pwm0=PWM(Pin(pwm0),10000) - self._pwm1=PWM(Pin(pwm1),10000) - self._pwm2=PWM(Pin(pwm2),10000) - self._pwm3=PWM(Pin(pwm3),10000) - self._pwm4=PWM(Pin(pwm4),10000) - self._pwm5=PWM(Pin(pwm5),10000) - self._pwm6=PWM(Pin(pwm6),10000) - self._pwm7=PWM(Pin(pwm7),10000) - - def ledcWrite(self,chn,value): - if chn==0: - self._pwm0.duty(value) - elif chn==1: - self._pwm1.duty(value) - elif chn==2: - self._pwm2.duty(value) - elif chn==3: - self._pwm3.duty(value) - elif chn==4: - self._pwm4.duty(value) - elif chn==5: - self._pwm5.duty(value) - elif chn==6: - self._pwm6.duty(value) - elif chn==7: - self._pwm7.duty(value) - - def deinit(self): - self._pwm0.deinit() - self._pwm1.deinit() - self._pwm2.deinit() - self._pwm3.deinit() - self._pwm4.deinit() - self._pwm5.deinit() - self._pwm6.deinit() - self._pwm7.deinit() diff --git a/Python/Python_Libraries/stepmotor.py b/Python/Python_Libraries/stepmotor.py deleted file mode 100644 index ec4e594..0000000 --- a/Python/Python_Libraries/stepmotor.py +++ /dev/null @@ -1,74 +0,0 @@ -from machine import Pin -import time - -phasecw = [0x08,0x04,0x02,0x01] -phaseccw = [0x01,0x02,0x04,0x08] -out=0x01 - -class mystepmotor(object): - def __init__(self, A: int=14, B: int=27, C: int=26, D: int=25): - self._A = Pin(A,Pin.OUT,0) - self._B = Pin(B,Pin.OUT,0) - self._C = Pin(C,Pin.OUT,0) - self._D = Pin(D,Pin.OUT,0) - - def _motorcontrol(self,data): - if data == 0x08: - self._A.on() - self._B.off() - self._C.off() - self._D.off() - if data == 0x04: - self._A.off() - self._B.on() - self._C.off() - self._D.off() - if data == 0x02: - self._A.off() - self._B.off() - self._C.on() - self._D.off() - if data == 0x01: - self._A.off() - self._B.off() - self._C.off() - self._D.on() - if data == 0x00: - self._A.off() - self._B.off() - self._C.off() - self._D.off() - - def moveOneStep(self,direction): - global out - if direction == 1: - if out!=0x08: - out=out<<1 - else: - out=0x01 - else: - if direction == 0: - if out!=0x01: - out=out>>1 - else: - out=0x08 - self._motorcontrol(out) - - def moveSteps(self,direction,steps,us): - for i in range(steps): - self.moveOneStep(direction) - time.sleep_us(us) - - def moveAround(self,direction,turns,us): - for i in range(turns): - self.moveSteps(direction,32*64,us) - - def moveAngle(self,angles,us): - self.moveSteps(direction,32*64//angles,us) - - def stop(self): - self._motorcontrol(0x00) - - - - \ No newline at end of file diff --git a/Python/Python_Software/Download Link.txt b/Python/Python_Software/Download Link.txt deleted file mode 100644 index a6475c7..0000000 --- a/Python/Python_Software/Download Link.txt +++ /dev/null @@ -1,18 +0,0 @@ - - MAC OS: https://github.com/thonny/thonny/releases/download/v3.2.7/thonny-3.2.7.pkg - - Windows: https://github.com/thonny/thonny/releases/download/v3.2.7/thonny-3.2.7.exe - - Linux: The latest version: - Binary bundle for PC (Thonny+Python): - bash <(wget -O - https://thonny.org/installer-for-linux) - - With pip: - pip3 install thonny - - Distro packages (may not be the latest version): - Debian, Rasbian, Ubuntu, Mint and others: - sudo apt install thonny - - Fedora: - sudo dnf install thonny diff --git a/Python/Python_Tutorial.pdf b/Python/Python_Tutorial.pdf deleted file mode 100644 index 52681d8..0000000 Binary files a/Python/Python_Tutorial.pdf and /dev/null differ diff --git a/README.md b/README.md index 93d86fb..f6f055a 100644 --- a/README.md +++ b/README.md @@ -1,86 +1,33 @@ -## Freenove_ESP32_WROVER_Board +# Freenove Tutorial Online -A kit with a Freenove® ESP32 Board for learning programming and electronics. +freenove-logo - -Esp32 chip is manufactured by Espressif®. ->Espressif® is a trademark of Espressif Systems (Shanghai) Co.Ltd (https://www.espressif.com/). -Freenove ESP32 Board can be uploaded code using Arduino® IDE. -> Arduino® is a trademark of Arduino LLC (https://www.arduino.cc/). +## start **Quick Start** - +Online Tutorial URL:[tutorial](https://docs.freenove.com/en/latest/) -### Download -Click the green "Code" button, then click "Download ZIP" button in the pop-up window. -Do NOT click the "Open in Desktop" button, it will lead you to install Github software. -> If you meet any difficulties, please contact our technical team for help. +## text **Materials Download** -### Use +Tutorial Materials Download URL:[download](https://docs.freenove.com/en/latest/about-freenove/tutorial.html) -1. Download the ZIP file as above. -2. Unzip it and you will get a folder contains tutorials and related files. -3. Please start with "Start Here.pdf". -### Support -Freenove provides free and quick customer support. Including but not limited to: +## support **Support** -* Quality problems of products -* Problems of products when used -* Questions of learning and creation -* Opinions and suggestions -* Ideas and thoughts +We are fully responsible for our products! -Please send an email to: +Please feel free to send us an email if you have any concerns, whether they are questions before buying or problems in use. [support@freenove.com](mailto:support@freenove.com) -We will reply within one working day. +In general, we will reply to you within one working day. -### Purchase -Please visit the following page to purchase our products: -http://freenove.com/store +## freenove**Freenove Official Website** -Business customers please contact us through the following email address: - -[sale@freenove.com](mailto:sale@freenove.com) - -### About - -Freenove provides open source electronic products and services. - -Freenove is committed to helping customers learn programming and electronic knowledge, quickly implement product prototypes, realize their creativity and launch innovative products. Our services include: - -* Kits for learning programming and electronics -* Kits compatible with Arduino®, Raspberry Pi®, micro:bit®, etc. -* Kits for robots, smart cars, drones, etc. -* Components, modules and tools -* Design and customization - -To learn more about us or get our latest information, please visit our website: - -http://www.freenove.com - -### Copyright - -All the files in this repository are released under [Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License](http://creativecommons.org/licenses/by-nc-sa/3.0/). -You can find a copy of the license in this repository. - -![markdown](https://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png) - -> It means you can use these files on your own derived works, in part or completely. But not for commercial use. - -Freenove® brand and logo are trademarks of Freenove Creative Technology Co., Ltd. Must not be used without permission. - -Other registered trademarks and their owners appearing in this repository: - -Arduino® is a trademark of Arduino LLC (https://www.arduino.cc/). -Raspberry Pi® is a trademark of Raspberry Pi Foundation (https://www.raspberrypi.org/). -micro:bit® is a trademark of Micro:bit Educational Foundation (https://www.microbit.org/). -Espressif® is a trademark of Espressif Systems (Shanghai) Co.Ltd (https://www.espressif.com/). +Freenove Official Website URL: [Freenove](https://freenove.com/) \ No newline at end of file diff --git a/Start Here.pdf b/Start Here.pdf deleted file mode 100644 index 2207b4b..0000000 Binary files a/Start Here.pdf and /dev/null differ diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..d0c3cbf --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = source +BUILDDIR = build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/locales/zh_CN/LC_MESSAGES/index.po b/docs/locales/zh_CN/LC_MESSAGES/index.po new file mode 100644 index 0000000..4c8f27f --- /dev/null +++ b/docs/locales/zh_CN/LC_MESSAGES/index.po @@ -0,0 +1,42 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2024, suhayl +# This file is distributed under the same license as the freenove-docs +# package. +# FIRST AUTHOR , 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: freenove-docs \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-10-11 16:15+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../source/index.rst:14 0380ee782e784c259217dcaf42b2e340 +msgid "Contents:" +msgstr "目录" + +#: ../../source/index.rst:7 efad79044c074ec29f0791952982af0b +msgid "freenove-docs documentation" +msgstr "费诺创新文档" + +#: ../../source/index.rst:9 eb5fb37e2e2243e3a94d87b8a98eb973 +msgid "" +"Add your content using ``reStructuredText`` syntax. See the " +"`reStructuredText `_ documentation for " +"details." +msgstr "" +"添加文本 ``reStructuredText`` 看这里" +"`reStructuredText `_ 有详细 " +"信息" + diff --git a/docs/locales/zh_CN/LC_MESSAGES/kits/index.po b/docs/locales/zh_CN/LC_MESSAGES/kits/index.po new file mode 100644 index 0000000..2c732b5 --- /dev/null +++ b/docs/locales/zh_CN/LC_MESSAGES/kits/index.po @@ -0,0 +1,30 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2024, suhayl +# This file is distributed under the same license as the freenove-docs +# package. +# FIRST AUTHOR , 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: freenove-docs \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-10-11 16:15+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../source/kits/index.rst:9 0da72e6315fb443ea8201dcb5663d6b0 +msgid "Contents:" +msgstr "目录" + +#: ../../source/kits/index.rst:7 acb2698d4fd240cbb9bfea3750ea62e4 +msgid "kits" +msgstr "产品" + diff --git a/docs/locales/zh_CN/LC_MESSAGES/kits/kit01/index.po b/docs/locales/zh_CN/LC_MESSAGES/kits/kit01/index.po new file mode 100644 index 0000000..9caeca4 --- /dev/null +++ b/docs/locales/zh_CN/LC_MESSAGES/kits/kit01/index.po @@ -0,0 +1,38 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2024, suhayl +# This file is distributed under the same license as the freenove-docs +# package. +# FIRST AUTHOR , 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: freenove-docs \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-10-11 16:15+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../source/kits/kit01/index.rst:14 +msgid "Contents:" +msgstr "目录" + +#: ../../source/kits/kit01/index.rst:7 2d78a4bc60334371a83aa03ff7c3dc9c +msgid "FNK0050 dog" +msgstr "机器狗" + +#: ../../source/kits/kit01/index.rst:9 1ad9b755afa14ea986b0a06e32dfa4a8 +msgid "" +"Add your content using ``reStructuredText`` syntax. See the " +"`reStructuredText `_ documentation for " +"details." +msgstr "这是什么 `引用 `_ " + diff --git a/docs/locales/zh_CN/LC_MESSAGES/kits/kit02/index.po b/docs/locales/zh_CN/LC_MESSAGES/kits/kit02/index.po new file mode 100644 index 0000000..5c32ba6 --- /dev/null +++ b/docs/locales/zh_CN/LC_MESSAGES/kits/kit02/index.po @@ -0,0 +1,34 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2024, suhayl +# This file is distributed under the same license as the freenove-docs +# package. +# FIRST AUTHOR , 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: freenove-docs \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-10-11 16:15+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../source/kits/kit02/index.rst:11 +msgid "Contents:" +msgstr "目录" + +#: ../../source/kits/kit02/index.rst:7 780b9cb37f5b4d5797cb33dcaea62956 +msgid "FNK0052 spider" +msgstr "蜘蛛" + +#: ../../source/kits/kit02/index.rst:9 dbdefb4224f14afa9893f8c044af62be +msgid "some words." +msgstr "一些文字" + diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 0000000..dc1312a --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=source +set BUILDDIR=build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000..ee18c40 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,60 @@ +# +# This file is autogenerated by pip-compile with python 3.10 +# To update, run: +# +# pip-compile docs/requirements.in +# +alabaster==0.7.16 + # via sphinx +babel==2.16.0 + # via sphinx +certifi==2022.6.15 + # via requests +charset-normalizer==2.1.0 + # via requests +docutils==0.21.2 + # via + # sphinx + # sphinx-rtd-theme +idna==3.3 + # via requests +imagesize==1.4.1 + # via sphinx +jinja2==3.1.2 + # via sphinx +markupsafe==2.1.1 + # via jinja2 +packaging==24.1 + # via sphinx +pygments==2.18.0 + # via sphinx +pyparsing==3.0.9 + # via packaging +pytz==2022.1 + # via babel +requests==2.32.3 + # via sphinx +snowballstemmer==2.2.0 + # via sphinx +sphinx==8.1.3 + # via + # -r docs/requirements.in + # sphinx-rtd-theme +sphinx-rtd-theme==3.0.1 + # via -r docs/requirements.in +sphinxcontrib-applehelp==2.0.0 + # via sphinx +sphinxcontrib-devhelp==2.0.0 + # via sphinx +sphinxcontrib-htmlhelp==2.1.0 + # via sphinx +sphinxcontrib-jsmath==1.0.1 + # via sphinx +sphinxcontrib-qthelp==2.0.0 + # via sphinx +sphinxcontrib-serializinghtml==2.0.0 + # via sphinx +urllib3==1.26.9 + # via requests + +myst_parser==4.0.0 diff --git a/docs/source/_static/css/color-roles copy.css b/docs/source/_static/css/color-roles copy.css new file mode 100644 index 0000000..660c6df --- /dev/null +++ b/docs/source/_static/css/color-roles copy.css @@ -0,0 +1,326 @@ +/* + * CSS hacks and small modification for my Sphinx website + * :copyright: Copyright 2013-2016 Lilian Besson + * :license: GPLv3, see LICENSE for details. + */ + + +/* Colors and text decoration. + For example, :black:`text in black` or :blink:`text blinking` in rST. */ + +.black { + color: black; +} + +.gray { + color: gray; +} + +.grey { + color: gray; +} + +.silver { + color: silver; +} + +.white { + color: white; +} + +.maroon { + color: maroon; +} + +.red { + color: red; +} + +.magenta { + color: magenta; +} + +.fuchsia { + color: fuchsia; +} + +.pink { + color: pink; +} + +.orange { + color: orange; +} + +.yellow { + color: yellow; +} + +.lime { + color: lime; +} + +.green { + color: green; +} + +.olive { + color: olive; +} + +.teal { + color: teal; +} + +.cyan { + color: cyan; +} + +.aqua { + color: aqua; +} + +.blue { + color: blue; +} + +.navy { + color: navy; +} + +.purple { + color: purple; +} + +.under { + text-decoration: underline; +} + +.over { + text-decoration: overline; +} + +.blink { + text-decoration: blink; +} + +/* .line { + text-decoration: line-through; +} + +.strike { + text-decoration: line-through; +} */ + +.it { + font-style: italic; +} + +.ob { + font-style: oblique; +} + +.small { + font-size: small; +} + +.large { + font-size: large; +} + +.smallpar { + font-size: small; +} + + +/* Style pour les badges en bas de la page. */ + +div.supportBadges { + margin: 1em; + text-align: right; +} + +div.supportBadges ul { + padding: 0; + display: inline; +} + +div.supportBadges li { + display: inline; +} + +div.supportBadges a { + margin-right: 1px; + opacity: 0.6; +} + +div.supportBadges a:hover { + opacity: 1; +} + + +/* Details elements in the sidebar */ + +a.reference { + border-bottom: none; + text-decoration: none; +} + +ul.details { + font-size: 80%; +} + +ul.details li p { + font-size: 85%; +} + +ul.externallinks { + font-size: 85%; +} + + +/* Pour le drapeau de langue */ + +img.languageswitch { + width: 50px; + height: 32px; + margin-left: 5px; + vertical-align: bottom; +} + +div.sphinxsidebar { + overflow: hidden !important; + font-size: 120%; + word-wrap: break-word; + width: 300px; + max-width: 300px; +} + +div.sphinxsidebar h3 { + font-size: 125%; +} + +div.sphinxsidebar h4 { + font-size: 110%; +} + +div.sphinxsidebar a { + font-size: 85%; +} + + +/* Image style for scrollUp jQuery plugin */ + +#scrollUpLeft { + bottom: 50px; + left: 260px; + height: 38px; + width: 38px; + background: url('//perso.crans.org/besson/_images/.top.svg'); + background: url('../_images/.top.svg'); +} + +@media screen and (max-width: 875px) { + #scrollUpLeft { + right: 50px; + left: auto; + } +} + + +/* responsive for font-size. */ + +@media (max-width: 875px) { + body { + font-size: 105%; + /* Increase font size for responsive theme */ + } +} + +@media (max-width: 1480px) and (min-width: 876px) { + body { + font-size: 110%; + /* Increase font size for not-so-big screens */ + } +} + +@media (min-width: 1481px) { + body { + font-size: 115%; + /* Increase even more font size for big screens */ + } +} + + +/* Social Icons in the sidebar (available: twitter, facebook, linkedin, google+, bitbucket, github) */ + +.social-icons { + display: inline-block; + margin: 0; + text-align: center; +} + +.social-icons a { + background: none no-repeat scroll center top #444444; + border: 1px solid #F6F6F6; + border-radius: 50% 50% 50% 50%; + display: inline-block; + height: 35px; + width: 35px; + margin: 0; + text-indent: -9000px; + transition: all 0.2s ease 0s; + text-align: center; + border-bottom: none; +} + +.social-icons li { + display: inline-block; + list-style-type: none; + border-bottom: none; +} +.social-icons li a { + border-bottom: none; +} + +.social-icons a:hover { + background-color: #666666; + transition: all 0.2s ease 0s; + text-decoration: none; +} + +.social-icons a.facebook { + background-image: url('../_images/.facebook.png'); + background-image: url('//perso.crans.org/besson/_images/.facebook.png'); + display: block; + margin-left: auto; + margin-right: auto; + background-size: 35px 35px; +} + +.social-icons a.bitbucket { + background-image: url('../_images/.bitbucket.png'); + background-image: url('//perso.crans.org/besson/_images/.bitbucket.png'); + display: block; + margin-left: auto; + margin-right: auto; + background-size: 35px 35px; +} + +.social-icons li a.github { + background-image: url('../_images/.github.png'); + background-image: url('//perso.crans.org/besson/_images/.github.png'); + display: block; + margin-left: auto; + margin-right: auto; + background-size: 35px 35px; +} + +.social-icons li a.wikipedia { + background-image: url('../_images/.wikipedia.png'); + background-image: url('//perso.crans.org/besson/_images/.wikipedia.png'); + display: block; + margin-left: auto; + margin-right: auto; + background-size: 35px 35px; +} \ No newline at end of file diff --git a/docs/source/_static/css/color-roles.css b/docs/source/_static/css/color-roles.css new file mode 100644 index 0000000..76c3b4f --- /dev/null +++ b/docs/source/_static/css/color-roles.css @@ -0,0 +1,142 @@ +/* + * CSS hacks and small modification for my Sphinx website + * :copyright: Copyright 2013-2016 Lilian Besson + * :license: GPLv3, see LICENSE for details. + */ + + +/* Colors and text decoration. + For example, :black:`text in black` or :blink:`text blinking` in rST. */ + +.black { + color: black; +} + +.gray { + color: gray; +} + +.grey { + color: gray; +} + +.silver { + color: silver; +} + +.white { + color: white; +} + +.maroon { + color: maroon; +} + +.red { + color: red; +} + +.magenta { + color: magenta; +} + +.fuchsia { + color: fuchsia; +} + +.pink { + color: pink; +} + +.orange { + color: orange; +} + +.yellow { + color: yellow; +} + +.lime { + color: lime; +} + +.green { + color: green; +} + +.olive { + color: olive; +} + +.teal { + color: teal; +} + +.cyan { + color: cyan; +} + +.aqua { + color: aqua; +} + +.blue { + color: blue; +} + +.navy { + color: navy; +} + +.purple { + color: purple; +} + +.huge { + font-size: xx-large; +} + +.big { + font-size: x-large; +} + +.small{ + font-size: small; +} + +.tiny{ + font-size: smaller; +} + + +.large { + font-size: large; +} + +.larger { + font-size: larger; +} + +.x-large{ + font-size: x-large; +} + +.xx-large{ + font-size: xx-large; +} + +.small { + font-size: small; +} + +.smaller { + font-size: smaller; +} + +.x-small{ + font-size: x-small; +} + +.xx-small{ + font-size: xx-small; +} \ No newline at end of file diff --git a/docs/source/_static/css/custom copy.css b/docs/source/_static/css/custom copy.css new file mode 100644 index 0000000..e475654 --- /dev/null +++ b/docs/source/_static/css/custom copy.css @@ -0,0 +1,377 @@ +/* 顶部导航栏 */ +#nav-bar { + height: 3.5rem; + width: 100%; + background-color: #f0f0f0; + position: fixed; + top: 0; + left: 0; + z-index: 100; +} + +/* 原RTD左侧导航栏下移 */ +.wy-nav-side { + /* top: 3.5rem; */ + z-index: 2; +} + +/* 原页面下移 */ +.wy-grid-for-nav { + top: 3.5rem; + height: calc(100% - 3.5rem); + overflow-y: auto; + position: fixed; +} + +/* 原Logo删除 */ +.wy-side-nav-search>.icon.icon-home { + display: none; +} + +/* 版本号删除 */ +.version { + display: none; +} + +/* 搜索栏调整 */ +.wy-side-nav-search { + /* 搜索栏背景去除 */ + background: none; + /* 移除搜索栏下方margin,让下面内容上移 */ + margin-bottom: 0 !important; + margin-top: 3.5rem; +} + +/* 搜索框调整 */ +.wy-side-nav-search input[type=text] { + /* 移除搜索框的蓝色边缘 */ + border-color: unset !important; +} + +.nav-bar-logo { + /* width: 15rem; */ + padding: 0rem; + height: 3.5rem; + width: 300px; + display: flex; + justify-content: center; + align-items: center; + overflow: hidden; + } + + #advertisingBox { + display: flex; + flex-direction: column; + height: 3.5rem; + width: 100%; + max-width: 800px; + } + + #advertising { + display: flex; + height: 2.1rem; + justify-content: center; + align-items: center; + font-size: 1.6rem; + background-color: #8a8585; + font-weight: bold; + } + + #advertising span { + color: black; + font-family: Roboto, sans-serif !important; + } + + #advertising span:nth-child(2), + #advertising span:last-child { + color: white; + } + + .nav-bar__itemBox { + display: flex; + justify-content: space-evenly; + align-items: center; + height: 1.4rem; + } + + .nav-bar-items { + display: flex; + max-width: 1100px; + } + + .nav-bar__item { + color: #202020; + font-size: 1rem; + line-height: 1rem; + text-align: center; + margin: 0 .6rem; + /* height: 3.5rem; */ + position: relative; + display: flex; + } + + .nav-bar__item>a { + text-decoration: none; + color: inherit; + font-family: Roboto, sans-serif !important; + font-weight: 400; + margin: auto; + } + + .nav-bar__item:hover>a { + color: #019cda; + } + + .icon.icon--arrow-bottom { + width: .8rem; + margin-left: .5rem; + } + + .icon.icon--nav-triangle { + display: none; + position: absolute; + bottom: -1px; + height: .6rem; + margin-left: 3rem; + z-index: 2; + transition: .2s ease-in-out; + } + + .icon.icon--nav-triangle-left { + position: absolute; + height: .8rem; + top: 1rem; + right: 100%; + } + + .icon.icon--arrow-right { + height: .8rem; + } + + .nav-dropdown { + display: none; + top: 100%; + position: absolute; + background-color: #ffffff; + min-width: 18rem; + text-align: start; + border: 1px solid #e1e3e4; + z-index: 1; + padding: .6rem 0; + } + + .nav-dropdown__item { + color: black; + position: relative; + padding: .4rem .8rem; + text-decoration: none; + display: block; + } + + .nav-dropdown .nav-dropdown { + top: -.6rem; + left: 100%; + } + + .nav-dropdown__item:hover>a { + color: #019cda; + } + + .nav-dropdown__item>a { + display: flex; + align-items: center; + justify-content: space-between; + cursor: pointer; + text-decoration: none; + color: inherit; + } + + .nav-bar__item:hover>.nav-dropdown, + .nav-bar__item:hover>a>.icon.icon--nav-triangle { + display: block; + } + + .nav-dropdown__item:hover>.nav-dropdown { + display: block; + } + + * { + font-family: "Verdana" ! important; + } + + .setMenu { + overflow-y: hidden; + } + + .setMenu::-webkit-scrollbar { + background: transparent; + height: 4px; + } + + .setMenu::-webkit-scrollbar-track-piece { + -webkit-border-radius: 4px; + border-radius: 4px; + background: #ccc; + + } + + .setMenu::-webkit-scrollbar-thumb { + background: #019cda; + height: 4px; + + } + + .rasPad .iconImg { + width: 178px; + border-radius: 0; + height: auto; + padding: 0; + margin: auto auto .809em auto; + + } + + .readTheDocIcon { + margin: auto auto .809em auto; + display: block; + } + + .readTheDocIcon .readIconImg { + width: 99px; + height: auto; + border-radius: 0px; + background-image: url("https://ezblock.cc/readDocFile/readTheDoc.svg"); + background-repeat: no-repeat; + background-position: left center; + background-size: 15px 15px; + color: #fff; + padding-left: 30px; + } + + footer { + opacity: 0; + } + + .addthis-smartlayers #at4-share, + .addthis-smartlayers #at4-soc { + right: 0 !important; + left: auto !important; + top: 35% !important; + animation-name: false !important; + } + + #at4-scc { + display: none !important; + } + + .addthis_inline_share_toolbox { + display: none !important; + } + + @media screen and (max-width: 768px) { + #advertising { + display: none !important; + } + + .nav-bar__itemBox { + height: 3.5rem; + overflow-x: auto; + } + + .wy-nav-content-wrap { + top: 3.5rem !important; + } + } +/* .extrabody-content { + position: fixed; + width: 100%; + height: 4em; + z-index: 200; + top: 0; + left: 0; +} + +.wy-nav-side { + position: fixed; + margin-top: 4em; + top: 0; + bottom: 0; + left: 0; + padding-bottom: 2em; + width: 300px; + overflow-x: hidden; + overflow-y: hidden; + min-height: 100%; + color: #9b9b9b; + background: #343131; + z-index: 200; +} + +.wy-side-nav-search { + position: static; + display: block; + width: 300px; + padding: .809em; + margin-bottom: .809em; + z-index: 200; + background-color: #2980b9; + text-align: center; + color: #fcfcfc; +} + +.wy-nav-content { + padding: 1.618em 3.236em; + height: 100%; + max-width: 800px; + margin-left: 0; + margin-top: 4em; + +} + + + +.dropdown-checkbox { + position: relative; + display: inline-block; +} + +.dropdown-content { + display: none; + position: absolute; + background-color: #f9f9f9; + min-width: 160px; + box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); + z-index: 1; +} + +.dropdown-content label { + display: block; + margin: 0; + padding: 5px 10px; + cursor: pointer; +} + +.dropdown-content label:hover { + background-color: #f1f1f1; +} + +.dropdown-checkbox .dropbtn { + background-color: #4CAF50; + color: white; + padding: 5px; + font-size: 16px; + border: none; + cursor: pointer; +} + +.dropdown-checkbox .dropbtn:hover { + background-color: #3e8e41 +} */ + +.product-table td { + white-space: normal !important; +} + +.product-image { + max-width: 120px; + width: 120px; +} \ No newline at end of file diff --git a/docs/source/_static/css/custom.css b/docs/source/_static/css/custom.css new file mode 100644 index 0000000..78a94e2 --- /dev/null +++ b/docs/source/_static/css/custom.css @@ -0,0 +1,25 @@ + +:root{ + --fn_nav_height: 2.0rem +} + +.extrabody-content{ + /* border: solid #00F 2px; */ + background-color: #EFEFEF; + height: var(--fn_nav_height); +} + + +.wy-grid-for-nav { + top: var(--fn_nav_height); + height: calc(100% - var(--fn_nav_height)); + height: 100%; + overflow-y: auto; + position: fixed; +} + + +.wy-nav-side { + top: var(--fn_nav_height); + z-index: 2; +} \ No newline at end of file diff --git a/docs/source/_static/css/font.css b/docs/source/_static/css/font.css new file mode 100644 index 0000000..0e98a22 --- /dev/null +++ b/docs/source/_static/css/font.css @@ -0,0 +1,3 @@ +.font-20 { + font-size: 20px; +} \ No newline at end of file diff --git a/docs/source/_static/css/navigationStyle.css b/docs/source/_static/css/navigationStyle.css new file mode 100644 index 0000000..d4bc3dc --- /dev/null +++ b/docs/source/_static/css/navigationStyle.css @@ -0,0 +1,105 @@ +@charset "utf-8"; +/* CSS Document */ +:root{ + --fn_nav_height: 2.0rem; + --fn_nav_fontsize: 1.5rem; +} + +.nav_fn { + /* border: solid #F00 5px; */ + background-color: rgb(52, 49, 49); + position: absolute; + width: fit-content; + height: auto; + left: 0; + top: 0; + z-index: 1; + opacity: 0.8; +} + +.nav_fn ul { + background-color: rgb(52, 49, 49); + /* border: solid #F00 5px; */ + width: auto; + height: auto; + font-size: var(--fn_nav_fontsize); + line-height: var(--fn_nav_height); + /* display:inline-block; */ + text-align: center; + float: left; + position: relative; + margin: 0; + padding: 0; + /* overflow:hidden; */ + list-style-type: none; +} + +.nav_fn li { + background-color: #003333; + display: block; + float: left; + width:9px; + height: var(--fn_nav_height); + cursor: pointer; + margin-left: 0px; + list-style-type: none; + opacity: 0.8; +} + +.navLogo { + background: url(../component-imgs/freenove-logo.png) no-repeat center; + background-size: 100%; + float: left; + width: auto; + height: var(--fn_nav_height); +} + +.nav_fn .navDropDown { + width: 100%; + height: 100%; + position: relative; +} + +.nav_fn .dropBtn { + /* border: solid #00F 2px; */ + display: inline-block; + color: white; + text-align: center; + width: 100%; + height: 100%; + text-decoration: none; +} + +.nav_fn a:hover, +.navDropDown:hover .dropBtn { + background-color: #111; +} + +.nav_fn .navDropDown { + width: 100%; + height: 100%; + display: inline-block; +} + +.nav_fn .dropDownContent { + /* opacity: 1; */ + width: 100%; + background-color: #F9F9F9; + position: absolute; + display: none; + box-shadow: 0px 8px 15px 5px rgba(0, 0, 0, 0.8); +} + +.nav_fn .dropDownContent a { + color: black; + text-decoration: none; + display: block; +} + +.nav_fn .dropDownContent a:hover { + background-color: #F1F1F1; +} + +.nav_fn .navDropDown:hover .dropDownContent { + display: block; +} \ No newline at end of file diff --git a/docs/source/_static/js/navigationStyle.js b/docs/source/_static/js/navigationStyle.js new file mode 100644 index 0000000..3895383 --- /dev/null +++ b/docs/source/_static/js/navigationStyle.js @@ -0,0 +1,55 @@ +// JavaScript Document +$(document).ready(function () { + loadReady(); + +}); +$(window).resize(function () { + // console.log('resize ... '); + NaviResize(); +}); + +function loadReady() { + // console.log('ready ... '); + NaviResize(); + var autoPlay2 = setInterval("test()", 1000); + $(".dropBtn").click(function () { + // $(this).css("background-color", "#FFF"); + $("#txt").text("click:"); + }); +} + +function NaviResize() { + // var wy_nav_side = document.getElementsByClassName('wy-nav-side')[0]; + // var wy_nav_content = document.getElementsByClassName('wy-nav-content')[0]; + // // var nav_fn = document.getElementsByClassName('nav_fn')[0]; + // var rect_wy_nav_side = wy_nav_side.getBoundingClientRect(); + // // var rect_wy_nav_content = wy_nav_content.getBoundingClientRect(); + // // var rect_nav_fn = nav_fn.getBoundingClientRect(); + // console.log('rect_wy_nav_side :', rect_wy_nav_side.width); + // console.log('wy_nav_content:', wy_nav_content.width); + // $('.wy-nav-content').on + // // var winWidth = $(window).width(); + // console.log("wy-nav-side " + $('.wy-nav-side').width() + ' wy-nav-content: ' + $('.wy-nav-content').outerWidth(true) + " " + $('.wy-nav-side').offset().left + ""); + var navWidth = $('.wy-nav-side').width() + $('.wy-nav-content').outerWidth(true) + $('.wy-nav-side').offset().left; + var navHeight = $(".extrabody-content").height(); + var navItemWidth = navWidth / 7; + navItemWidth = navItemWidth < 60 ? 60 : navItemWidth; + var navItemHeight = navItemWidth / 5; + console.log("navWidth " + navWidth + ' navItemWidth: ' + navItemWidth + " " + $('.wy-nav-side').offset().left + ""); + // $(".extrabody-content").height(navItemWidth); + // $(".nav_fn").height(navItemHeight); + // $(".nav_fn>ul").css("line-height", navItemHeight + "px"); + $(".nav_fn>ul>li").width(navItemWidth); + // console.log('.extrabody-content.height: ' + $(".extrabody-content").height()); + $(".nav_fn>ul>li").height($(".extrabody-content").height); + $(".nav_fn>ul a").css("font-size", navItemWidth * 0.15 + "px"); + +} +function test() { + //var today=new Date() + //var h=today.getHours() + //var m=today.getMinutes() + //var s=today.getSeconds() + $("#txt").fadeToggle(1000); + //$("#txt").text(bannerCount+":"+winWidth); +} \ No newline at end of file diff --git a/docs/source/_static/style/custom-style.txt b/docs/source/_static/style/custom-style.txt new file mode 100644 index 0000000..598edab --- /dev/null +++ b/docs/source/_static/style/custom-style.txt @@ -0,0 +1,16 @@ + + + +.. Text Sizes + ========== + +.. role:: large +.. role:: larger +.. role:: x-large +.. role:: xx-large +.. role:: small +.. role:: smaller +.. role:: x-small +.. role:: xx-small + +.. role:: medium diff --git a/docs/source/_templates/layout.html b/docs/source/_templates/layout.html new file mode 100644 index 0000000..83cf492 --- /dev/null +++ b/docs/source/_templates/layout.html @@ -0,0 +1,7 @@ +{%- extends "!layout.html" %} + +{%- block extrabody %} +
+ {%- include "navigation.html" %} +
+{% endblock %} \ No newline at end of file diff --git a/docs/source/_templates/navigation.html b/docs/source/_templates/navigation.html new file mode 100644 index 0000000..1e14779 --- /dev/null +++ b/docs/source/_templates/navigation.html @@ -0,0 +1,71 @@ + + + + +
\ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py new file mode 100644 index 0000000..7798da8 --- /dev/null +++ b/docs/source/conf.py @@ -0,0 +1,116 @@ +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. +from datetime import datetime +import os +import pathlib +import sys + +sys.path.insert(0, pathlib.Path(__file__).parents[2].resolve().as_posix()) + +os.system("rm -r freenove_Kit") +os.system("git clone --depth 1 https://github.com/Freenove/Freenove_Ultimate_Starter_Kit_for_ESP32 freenove_Kit") + + +def prepend_to_file(file_path, content): + with open(file_path, "r+") as file: + original = file.read() + file.seek(0) # 将文件光标移动到开头 + file.write(content) + file.write(original) + +def apend_to_file(file_path, content): + with open(file_path, "a") as file: + file.write(content) + +# extlinks = { +# "fnk0020_github_url": ( +# "https://github.com/Freenove/Freenove_Ultimate_Starter_Kit_for_Raspberry_Pi%s", +# "fnk0020_github_url%s", +# ) +# } + +print("hello") +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +project = "fnk0066-docs" +copyright = "2016 - " + str(datetime.now().year) + ", support@freenove.com" +author = "freenove" +release = "v1.0" +version = "v1.0" + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +# extensions = [] +extensions = [ + "sphinx_rtd_theme", + # "sphinx.ext.extlinks", + # "sphinx.ext.intersphinx", +] + +templates_path = ["_templates"] +exclude_patterns = [] + + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +# html_theme = 'alabaster' +html_theme = "sphinx_rtd_theme" +# html_theme = 'pydata_sphinx_theme' + + +html_static_path = ["_static"] + +html_logo = "freenove-logo.png" +html_theme_options = { + "collapse_navigation": False, + "logo_only": True, + "navigation_depth": -1, + "version_selector": True, + "includehidden": True, + # "flyout_display": "attached", + # 'style_nav_header_background': '#005500', +} + + +rst_prolog = """ +.. include:: +.. include:: ../../../_static/style/custom-style.txt + """ + +variables_to_export = [ + "project", + "copyright", + "version", +] +frozen_locals = dict(locals()) +prolog = "\n".join( + map(lambda x: f".. |{x}| replace:: {frozen_locals[x]}", + variables_to_export) +) +# rst_prolog = rst_prolog + prolog +print(rst_prolog) +del frozen_locals + + +html_css_files = [ + "css/color-roles.css", +] + +intersphinx_mapping = { + "rpi-starter-kit": ("https://freenove-docs2.readthedocs.io/projects/fnk0066/en/latest/", None), +} +intersphinx_disabled_reftypes = ["*"] + + +def setup(app): + pass + app.add_css_file("css/custom.css") + diff --git a/docs/source/fnk0060/codes/C.rst b/docs/source/fnk0060/codes/C.rst new file mode 100644 index 0000000..f5cf21f --- /dev/null +++ b/docs/source/fnk0060/codes/C.rst @@ -0,0 +1,43 @@ +###################################################### +C language +###################################################### + +.. toctree:: + :maxdepth: 1 + :caption: Important Information + :glob: + + C/Important_Information.rst + +.. toctree:: + :maxdepth: 1 + :caption: Preface + :glob: + + C/Preface.rst + +.. toctree:: + :maxdepth: 1 + :numbered: + :glob: + + C/1_LED.rst + C/27_Bluetooth.rst + C/30_Read_and_Write_the_Sdcard.rst + C/32_WiFi_Working_Modes.rst + C/33_TCP_IP.rst + C/34_Camera_Web_Server.rst + +.. toctree:: + :maxdepth: 1 + :caption: What's next? + :glob: + + C/What_s_next.rst + +.. toctree:: + :maxdepth: 1 + :caption: End of the Tutorial + :glob: + + C/End_of_the_Tutorial.rst diff --git a/docs/source/fnk0060/codes/C/1_LED.rst b/docs/source/fnk0060/codes/C/1_LED.rst new file mode 100644 index 0000000..6137aa6 --- /dev/null +++ b/docs/source/fnk0060/codes/C/1_LED.rst @@ -0,0 +1,170 @@ +############################################################################## +Chapter LED +############################################################################## + +This chapter is the Start Point in the journey to build and explore ESP32 electronic projects. We will start with simple "Blink" project. + +Project Blink +************************************* + +In this project, we will use ESP32 to control blinking a common LED. + +Component List +====================================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | GPIO Extension Board x1 | +| | | +| |Chapter01_00| | |Chapter01_01| | ++------------------------------------+-------------------------+ +| Breadboard x1 | +| | +| |Chapter01_02| | ++-----------------+------------------+-------------------------+ +| LED x1 | Resistor 220Ω x1 | Jumper M/M x2 | +| | | | +| |Chapter01_03| | |Chapter01_04| | |Chapter01_05| | ++-----------------+------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter01_01| image:: ../_static/imgs/1_LED/Chapter01_01.png +.. |Chapter01_02| image:: ../_static/imgs/1_LED/Chapter01_02.png +.. |Chapter01_03| image:: ../_static/imgs/1_LED/Chapter01_03.png +.. |Chapter01_04| image:: ../_static/imgs/1_LED/Chapter01_04.png +.. |Chapter01_05| image:: ../_static/imgs/1_LED/Chapter01_05.png + +Component knowledge +===================================== + +LED +-------------------------------------- + +A LED is a type of diode. All diodes only work if current is flowing in the correct direction and have two poles. A LED will only work (light up) if the longer pin (+) of LED is connected to the positive output from a power source and the shorter pin is connected to the negative (-). Negative output is also referred to as Ground (GND). This type of component is known as "diodes" (think One-Way Street). + +All common 2 lead diodes are the same in this respect. Diodes work only if the voltage of its positive electrode is higher than its negative electrode and there is a narrow range of operating voltage for most all common diodes of 1.9 and 3.4V. If you use much more than 3.3V the LED will be damaged and burn out. + +.. image:: ../_static/imgs/1_LED/Chapter01_06.png + :align: center + +.. note:: + + LEDs cannot be directly connected to a power supply, which usually ends in a damaged component. A resistor with a specified resistance value must be connected in series to the LED you plan to use. + +Resistor +-------------------------------------- + +Resistors use Ohms (Ω) as the unit of measurement of their resistance (R). 1MΩ=1000kΩ, 1kΩ=1000Ω. + +A resistor is a passive electrical component that limits or regulates the flow of current in an electronic circuit. + +On the left, we see a physical representation of a resistor, and the right is the symbol used to represent the presence of a resistor in a circuit diagram or schematic. + +.. image:: ../_static/imgs/1_LED/Chapter01_07.png + :align: center + +The bands of color on a resistor is a shorthand code used to identify its resistance value. For more details of resistor color codes, please refer to the appendix of this tutorial. + +With a fixed voltage, there will be less current output with greater resistance added to the circuit. The relationship between Current, Voltage and Resistance can be expressed by this formula: I=V/R known as Ohm's Law where I = Current, V = Voltage and R = Resistance. Knowing the values of any two of these allows you to solve the value of the third. + +In the following diagram, the current through R1 is: I=U/R=5V/10kΩ=0.0005A=0.5mA. + +.. image:: ../_static/imgs/1_LED/Chapter01_08.png + :align: center + +.. warning:: + + Never connect the two poles of a power supply with anything of low resistance value (i.e. a metal object or bare wire) this is a Short and results in high current that may damage the power supply and electronic components. + +.. note:: + + Unlike LEDs and diodes, resistors have no poles and re non-polar (it does not matter which direction you insert them into a circuit, it will work the same) + +Breadboard +----------------------------- + +Here we have a small breadboard as an example of how the rows of holes (sockets) are electrically attached. + +The left picture shows the way to connect pins. The right picture shows the practical internal structure. + +.. image:: ../_static/imgs/1_LED/Chapter01_09.png + :align: center + +Power +------------------------------- + +ESP32-WROVER needs 5v power supply. In this tutorial, we need connect ESP32-WROVER to computer via USB cable to power it and program it. We can also use other 5v power source to power it. + +.. image:: ../_static/imgs/1_LED/Chapter01_10.png + :align: center + +In the following projects, we only use USB cable to power ESP32-WROVER by default. + +In the whole tutorial, we don't use T extension to power ESP32-WROVER. So 5V and 3.3V (includeing EXT 3.3V) on the extension board are provided by ESP32-WROVER. + +We can also use DC jack of extension board to power ESP32-WROVER.In this way, 5v and EXT 3.3v on extension board are provided by external power resource. + +Circuit +=================================== + +First, disconnect all power from the ESP32-WROVER. Then build the circuit according to the circuit and hardware diagrams. After the circuit is built and verified correct, connect the PC to ESP32-WROVER. + +CAUTION: Avoid any possible short circuits (especially connecting 5V or GND, 3.3V and GND)! WARNING: A short circuit can cause high current in your circuit, generate excessive component heat and cause permanent damage to your hardware! + +.. list-table:: + :width: 100% + :header-rows: 1 + :align: center + + * - Schematic diagram + * - |Chapter01_11| + * - Hardware connection. + + :red:`If you need any support, please contact us via:` support@freenove.com + * - |Chapter01_12| + + :red:`Don't rotate ESP32-WROVER 180° for connection.` + +.. |Chapter01_11| image:: ../_static/imgs/1_LED/Chapter01_11.png +.. |Chapter01_12| image:: ../_static/imgs/1_LED/Chapter01_12.png + + +Sketch +================================= + +According to the circuit, when the GPIO2 of ESP32-WROVER output level is high, the LED turns ON. Conversely, when the GPIO2 ESP32-WROVER output level is low, the LED turns OFF. Therefore, we can let GPIO2 circularly output high and low level to make the LED blink. + +Upload the following Sketch: + +**Freenove_Ultimate_Starter_Kit_for_ESP32\Sketches\Sketch_01.1_Blink.** + +Before uploading the code, click "**Tools**", "**Board**" and select "**ESP32 Wrover Module**". + +.. image:: ../_static/imgs/1_LED/Chapter01_13.png + :align: center + +Select the serial port. + +.. image:: ../_static/imgs/1_LED/Chapter01_14.png + :align: center + +.. note:: + + For macOS users, if the uploading fails, please set the baud rate to 115200 before clicking + +"Upload Speed". + +.. image:: ../_static/imgs/1_LED/Chapter01_15.png + :align: center + +Sketch_Blink +--------------------------------- + +.. image:: ../_static/imgs/1_LED/Chapter01_16.png + :align: center + +Click "Upload", Download the code to ESP32-WROVER and your LED in the circuit starts Blink. + +.. image:: ../_static/imgs/1_LED/Chapter01_17.png + :align: center + +:red:`If you have any concerns, please contact us via:` support@freenove.com \ No newline at end of file diff --git a/docs/source/fnk0060/codes/C/27_Bluetooth.rst b/docs/source/fnk0060/codes/C/27_Bluetooth.rst new file mode 100644 index 0000000..dc2231b --- /dev/null +++ b/docs/source/fnk0060/codes/C/27_Bluetooth.rst @@ -0,0 +1,485 @@ +############################################################################## +Chapter Bluetooth +############################################################################## + +This chapter mainly introduces how to make simple data transmission through Bluetooth of ESP32-WROVER and mobile phones. + +Project 27.1 is classic Bluetooth and Project 27.2 is low power Bluetooth.If you are an iPhone user, please start with Project 27.2. + +Project 27.1 Bluetooth Passthrough +******************************************** + +Component List +================================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | Micro USB Wire x1 | +| | | +| |Chapter01_00| | |Chapter08_00| | ++------------------------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter08_00| image:: ../_static/imgs/8_Serial_Communication/Chapter08_00.png + +In this tutorial we need to use a Bluetooth APP called Serial Bluetooth Terminal to assist in the experiment. If you've not installed it yet, please do so by clicking: https://www.appsapk.com/serial-bluetooth-terminal/ The following is its logo. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_00.png + :align: center + +Component knowledge +====================================== + +ESP32's integrated Bluetooth function Bluetooth is a short-distance communication system, which can be divided into two types, namely Bluetooth Low Energy(BLE) and Classic Bluetooth. There are two modes for simple data transmission: master mode and slave mode. + +Master mode +------------------------------------- + +In this mode, works are done in the master device and it can connect with a slave device. And we can search and select slave devices nearby to connect with. When a device initiates connection request in master mode, it requires information of the other Bluetooth devices including their address and pairing passkey. After finishing pairing, it can connect with them directly. + +Slave mode +-------------------------------------- + +The Bluetooth module in slave mode can only accept connection request from a host computer, but cannot initiate a connection request. After connecting with a host device, it can send data to or receive from the host device. + +Bluetooth devices can make data interaction with each other, as one is in master mode and the other in slave mode. When they are making data interaction, the Bluetooth device in master mode searches and selects devices nearby to connect to. When establishing connection, they can exchange data. When mobile phones exchange data with ESP32, they are usually in master mode and ESP32 in slave mode. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_01.png + :align: center + +Circuit +====================================== + +Connect Freenove ESP32 to the computer using the USB cable. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_02.png + :align: center + +Sketch +=================================== + +Sketch_27.1_SerialToSerialBT +------------------------------------- + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_03.png + :align: center + +Compile and upload the code to the ESP32-WROVER, open the serial monitor, and set the baud rate to 115200. When you see the serial printing out the character string as below, it indicates that the Bluetooth of ESP32 is ready and waiting to connect with the mobile phone. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_04.png + :align: center + +Make sure that the Bluetooth of your phone has been turned on and Serial Bluetooth Terminal has been installed. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_05.png + :align: center + +Click "Search" to search Bluetooth devices nearby and select "ESP32 test" to connect to. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_06.png + :align: center + +Turn on software APP, click the left of the terminal. Select "Devices" + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_07.png + :align: center + +Select ESP32test in classic Bluetooth mode, and a successful connecting prompt will appear as shown on the right illustration. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_08.png + :align: center + +And now data can be transferred between your mobile phone and computer via ESP32-WROVER. + +Send 'Hello!'' from your phone, when the computer receives it, reply "Hi" to your phone. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_09.png + :align: center + +Reference +---------------------------------------- + +.. py:function:: Class BluetoothSerial + + This is a class library used to operate BluetoothSerial, which can directly read and set BluetoothSerial. Here are some member functions: + + **begin(localName,isMaster):** Initialization function of the Bluetooth + + **name:** name of Bluetooth module; Data type: String + + **isMaster:** bool type, whether to set Bluetooth as Master. By default, it is false. + + **available():** acquire digits sent from the buffer, if not, return 0. + + **read():** read data from Bluetooth, data type of return value is int. + + **readString():** read data from Bluetooth, data type of return value is String. + + **write(val):** send an int data val to Bluetooth. + + **write(str):** send an Srtring data str to Bluetooth. + + **write(buf, len):** Sends the first len data in the buf Array to Bluetooth. + + **setPin(const char *pin):** set a four-digit Bluetooth pairing code. By default, it is 1234 + + **connet(remoteName):** connect a Bluetooth named remoteName, data type: String + + **connect(remoteAddress[]):** connect the physical address of Bluetooth, data type: uint8-t. + + **disconnect():** disconnect all Bluetooth devices. + + **end():** disconnect all Bluetooth devices and turn off the Bluetooth, release all occupied space + +Project Bluetooth Low Energy Data Passthrough +*********************************************************** + +Component List +================================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | Micro USB Wire x1 | +| | | +| |Chapter01_00| | |Chapter08_00| | ++------------------------------------+-------------------------+ + +Circuit +========================= + +Connect Freenove ESP32 to the computer using the USB cable. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_10.png + :align: center + +Sketch +========================== + +Sketch_BLE +---------------------------- + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_11.png + :align: center + +Serial Bluetooth +------------------------------- + +Compile and upload code to ESP32, the operation is similar to the last section. + +First, make sure you've turned on the mobile phone Bluetooth, and then open the software. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_12.png + :align: center + +Click "Search" to search Bluetooth devices nearby and select "ESP32 test" to connect to. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_13.png + :align: center + +Turn on software APP, click the left of the terminal. Select "Devices" + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_14.png + :align: center + +Select BLUETOOTHLE, click SCAN to scan Low Energy Bluetooth devices nearby. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_15.png + :align: center + +Select"ESP32-Bluetooth" + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_16.png + :align: center + +Lightblue +--------------------------------------------- + +If you can't install Serial Bluetooth on your phone, try LightBlue.If you do not have this software installed on your phone, you can refer to this link:https://apps.apple.com/us/app/lightblue/id557428110#?platform=iphone. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_17.png + :align: center + +Step1. Upload the code of Project27.2 to ESP32. + +Step2. Click on serial monitor. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_18.png + :align: center + +Step3. Set baud rate to 115200. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_19.png + :align: center + +Turn ON Bluetooth on your phone, and open the Lightblue APP. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_20.png + :align: center + +In the Scan page, swipe down to refresh the name of Bluetooth that the phone searches for. Click ESP32_Bluetooth. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_21.png + :align: center + +Click "Receive". Select the appropriate Data format in the box to the right of Data Format. For example, HEX for hexadecimal, utf-string for character, Binary for Binary, etc. Then click SUBSCRIBE. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_22.png + :align: center + +Back to the serial monitor on your computer. You can type anything in the left border of Send, and then click Send. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_23.png + :align: center + +And then you can see the mobile Bluetooth has received the message. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_24.png + :align: center + +Similarly, you can select "Send" on your phone. Set Data format, and then enter anything in the sending box and click Write to send. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_25.png + :align: center + +And the computer will receive the message from the mobile Bluetooth. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_25.png + :align: center + +And now data can be transferred between your mobile phone and computer via ESP32-WROVER. + +The following is the program code: + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_27.2_BLE_USART/Sketch_27.2_BLE_USART.ino + :linenos: + :language: c + :dedent: + +Define the specified UUID number for BLE vendor. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_27.2_BLE_USART/Sketch_27.2_BLE_USART.ino + :linenos: + :language: c + :lines: 18-20 + :dedent: + +Write a Callback function for BLE server to manage connection of BLE. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_27.2_BLE_USART/Sketch_27.2_BLE_USART.ino + :linenos: + :language: c + :lines: 22-30 + :dedent: + +Write Callback function with BLE features. When it is called, as the mobile terminal send data to ESP32, it will store them into reload. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_27.2_BLE_USART/Sketch_27.2_BLE_USART.ino + :linenos: + :language: c + :lines: 32-42 + :dedent: + +Initialize the BLE function and name it. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_27.2_BLE_USART/Sketch_27.2_BLE_USART.ino + :linenos: + :language: c + :lines: 61-61 + :dedent: + +When the mobile phone send data to ESP32 via BLE Bluetooth, it will print them out with serial port; When the serial port of ESP32 receive data, it will send them to mobile via BLE Bluetooth. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_27.2_BLE_USART/Sketch_27.2_BLE_USART.ino + :linenos: + :language: c + :lines: 65-78 + :dedent: + +The design for creating the BLE server is: + +1. Create a BLE Server + +2. Create a BLE Service + +3. Create a BLE Characteristic on the Service + +4. Create a BLE Descriptor on the characteristic + +5. Start the service. + +6. Start advertising. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_27.2_BLE_USART/Sketch_27.2_BLE_USART.ino + :linenos: + :language: c + :lines: 44-57 + :dedent: + +Project Bluetooth Control LED +********************************************* + +In this section, we will control the LED with Bluetooth. + +Component List +====================================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | GPIO Extension Board x1 | +| | | +| |Chapter01_00| | |Chapter01_01| | ++------------------------------------+-------------------------+ +| Micro USB Wire x1 | +| | +| |Chapter08_00| | ++--------------------------------------------------------------+ +| Breadboard x1 | +| | +| |Chapter01_02| | ++-----------------+------------------+-------------------------+ +| LED x1 | Resistor 220Ω x1 | Jumper M/M x2 | +| | | | +| |Chapter01_03| | |Chapter01_04| | |Chapter01_05| | ++-----------------+------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter01_01| image:: ../_static/imgs/1_LED/Chapter01_01.png +.. |Chapter01_02| image:: ../_static/imgs/1_LED/Chapter01_02.png +.. |Chapter01_03| image:: ../_static/imgs/1_LED/Chapter01_03.png +.. |Chapter01_04| image:: ../_static/imgs/1_LED/Chapter01_04.png +.. |Chapter01_05| image:: ../_static/imgs/1_LED/Chapter01_05.png +.. |Chapter08_00| image:: ../_static/imgs/8_Serial_Communication/Chapter08_00.png + +Circuit +========================================== + +Connect Freenove ESP32 to the computer using a USB cable. + +.. list-table:: + :width: 80% + :header-rows: 1 + :align: center + + * - Schematic diagram + * - |Chapter27_27| + * - Hardware connection. + + If you need any support, please feel free to contact us via: support@freenove.com + + |Chapter27_28| + +.. |Chapter27_27| image:: ../_static/imgs/27_Bluetooth/Chapter27_27.png +.. |Chapter27_28| image:: ../_static/imgs/27_Bluetooth/Chapter27_28.png + +Sketch +====================================== + +Sketch_Bluetooth_Control_LED +-------------------------------------------- + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_29.png + :align: center + +Compile and upload code to ESP32. The operation of the APP is the same as 27.1, you only need to change the sending content to "led_on" and "led_off" to operate LEDs on the ESP32-WROVER. + +Data sent from mobile APP: + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_30.png + :align: center + +Display on the serial port of the computer: + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_31.png + :align: center + +The phenomenon of LED + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_32.png + :align: center + +Attention: If the sending content isn't "led-on' or "led-off", then the state of LED will not change. If the LED is on, when receiving irrelevant content, it keeps on; Correspondingly, if the LED is off, when receiving irrelevant content, it keeps off. + +The following is the program code: + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_27.3_BluetoothToLed/Sketch_27.3_BluetoothToLed.ino + :linenos: + :language: c + :dedent: + +Use character string to handle function header file. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_27.3_BluetoothToLed/Sketch_27.3_BluetoothToLed.ino + :linenos: + :language: c + :lines: 10-10 + :dedent: + +Define a buffer to receive data from Bluetooth, and use "count" to record the bytes of data received. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_27.3_BluetoothToLed/Sketch_27.3_BluetoothToLed.ino + :linenos: + :language: c + :lines: 13-14 + :dedent: + +Initialize the classic Bluetooth and name it as "ESP32test" + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_27.3_BluetoothToLed/Sketch_27.3_BluetoothToLed.ino + :linenos: + :language: c + :lines: 17-17 + :dedent: + +When receive data, read the Bluetooth data and store it into buffer array. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_27.3_BluetoothToLed/Sketch_27.3_BluetoothToLed.ino + :linenos: + :language: c + :lines: 23-27 + :dedent: + +Compare the content in buffer array with "led_on" and "led_off" to see whether they are the same. If yes, execute the corresponding operation. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_27.3_BluetoothToLed/Sketch_27.3_BluetoothToLed.ino + :linenos: + :language: c + :lines: 30-35 + :dedent: + +After comparing the content of array, to ensure successful transmission next time, please empty the array and set the count to zero. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_27.3_BluetoothToLed/Sketch_27.3_BluetoothToLed.ino + :linenos: + :language: c + :lines: 36-37 + :dedent: + +Reference +------------------------------- + +strncmp() functions are often used for string comparisons, which are accurate and stable. + +.. py:function:: int strncmp(const char *str1, const char *str2, size_t n) + + str1: the first string to be compared + + str2: the second string to be compared + + n: the biggest string to be compared + + Return value: if stir1>str2, then return value>0. + + If return value is 0, then the contents of str1 and str2 are the same. + + If str1< str2, then return value<0. + +| + +Function memset is mainly used to clean and initialize the memory of array + +.. py:function:: void *memset(void *s, int c, unsigned long n) + + Function memset() is to set the content of a certain internal storage as specified value. + + *s: the initial address of the content to clear out. + + c:to be replaced as specified value + + n: the number of byte to be replaced diff --git a/docs/source/fnk0060/codes/C/30_Read_and_Write_the_Sdcard.rst b/docs/source/fnk0060/codes/C/30_Read_and_Write_the_Sdcard.rst new file mode 100644 index 0000000..0da713c --- /dev/null +++ b/docs/source/fnk0060/codes/C/30_Read_and_Write_the_Sdcard.rst @@ -0,0 +1,256 @@ +############################################################################## +Chapter Read and Write the Sdcard +############################################################################## + +.. note:: + + The SD card chapter only applies to the ESP32 WROVER development board with an SD card slot on the back. If your ESP32 WROVER does not have an SD card slot on the back, please skip this chapter. + +An SDcard slot is integrated on the back of the ESP32 WROVER. In this chapter we learn how to use ESP32 to read and write SDcard. + +Project SDMMC Test +**************************************** + +.. list-table:: + :width: 100% + :header-rows: 1 + :align: center + + * - ESP32 WROVER x1 + - USB cable x1 + - SDcard reader x1 (random color) + - SDcard x1 + + * - |Chapter01_00| + - |Chapter30_00| + - |Chapter30_01| + + :red:`(Not a USB flash drive.)` + - |Chapter30_02| + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter30_00| image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_00.png +.. |Chapter30_01| image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_01.png +.. |Chapter30_02| image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_02.png + +Component knowledge +======================================= + +SD card read and write method +------------------------------------- + +ESP32 has two ways to use SD card, one is to use the SPI interface to access the SD card, and the other is to use the SDMMC interface to access the SD card. SPI mode uses 4 IOs to access SD card. The SDMMC has one-bit bus mode and four-bit bus mode. In one-bit bus mode, SDMMC use 3 IOs to access SD card. In four-bit bus mode, SDMMC uses 6 IOs to access the SD card. + +The above three methods can all be used to access the SD card, the difference is that the access speed is different. + +In the four-bit bus mode of SDMMC, the reading and writing speed of accessing the SD card is the fastest. In the one-bit bus mode of SDMMC, the access speed is about 80% of the four-bit bus mode. The access speed of SPI is the slowest, which is about 50% of the four-bit bus mode of SDMMC. + +Usually, we recommend using the one-bit bus mode to access the SD card, because in this mode, we only need to use the least pin IO to access the SD card with good performance and speed. + +Format SD card +======================================== + +Before starting the tutorial, we need to create a drive letter for the blank SD card and format it. This step requires a card reader and SD card. Please prepare them in advance. Below we will guide you to do it on different computer systems. You can choose the guide that matches your computer. + +Windows +----------------------------------------- + +Insert the SD card into the card reader, then insert the card reader into the computer. + +In the Windows search box, enter "Disk Management" and select "Create and format hard disk partitions". + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_03.png + :align: center + +In the new pop-up window, find an unallocated volume close to 1G in size. + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_04.png + :align: center + +Click to select the volume, right-click and select "New Simple Volume". + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_05.png + :align: center + +Click Next. + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_05.png + :align: center + +You can choose the drive letter on the right, or you can choose the default. By default, just click Next. + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_06.png + :align: center + +File system is FAT(or FAT32). The Allocation unit size is 16K, and the Volume label can be set to any name. After setting, click Next. + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_07.png + :align: center + +Click Finish. Wait for the SD card initialization to complete. + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_08.png + :align: center + +At this point, you can see the SD card in This PC. + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_09.png + :align: center + +MAC +--------------------------------------- + +Insert the SD card into the card reader, then insert the card reader into the computer. Some computers will prompt the following information, please click to ignore it. + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_10.png + :align: center + +Find "Disk Utility" in the MAC system and click to open it. + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_11.png + :align: center + +Select "Generic MassStorageClass Media", note that its size is about 1G. Please do not choose wrong item. Click "Erase". + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_12.png + :align: center + +Select the configuration as shown in the figure below, and then click "Erase". + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_13.png + :align: center + +Wait for the formatting to complete. When finished, it will look like the picture below. At this point, you can see a new disk on the desktop named "SD". + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_14.png + :align: center + +Circuit +======================================= + +Before connecting the USB cable, insert the SD card into the SD card slot on the back of the ESP32. + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_15.png + :align: center + +Connect Freenove ESP32 to the computer using the USB cable. + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_16.png + :align: center + +Sketch +====================================== + +Sketch_SDMMC_Test +--------------------------------------- + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_17.png + :align: center + +Compile and upload the code to ESP32, open the serial monitor, and press the RST button on the board. + +You can see the printout as shown below. + +.. image:: ../_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_18.png + :align: center + +The following is the program code: + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_30.1_SDMMC_Test/Sketch_30.1_SDMMC_Test.ino + :linenos: + :language: c + :dedent: + +Add the SD card drive header file. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_30.1_SDMMC_Test/Sketch_30.1_SDMMC_Test.ino + :linenos: + :language: c + :lines: 7-8 + :dedent: + +Defines the drive pins of the SD card. Please do not modify it. Because these pins are fixed. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_30.1_SDMMC_Test/Sketch_30.1_SDMMC_Test.ino + :linenos: + :language: c + :lines: 10-12 + :dedent: + +Initialize the serial port function. Sets the drive pin for SDMMC one-bit bus mode. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_30.1_SDMMC_Test/Sketch_30.1_SDMMC_Test.ino + :linenos: + :language: c + :lines: 15-16 + :dedent: + +Set the mount point of the SD card, set SDMMC to one-bit bus mode, and set the read and write speed to 20MHz. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_30.1_SDMMC_Test/Sketch_30.1_SDMMC_Test.ino + :linenos: + :language: c + :lines: 17-20 + :dedent: + +Get the type of SD card and print it out through the serial port. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_30.1_SDMMC_Test/Sketch_30.1_SDMMC_Test.ino + :linenos: + :language: c + :lines: 21-36 + :dedent: + +Call the listDir() function to read the folder and file names in the SD card, and print them out through the serial port. This function can be found in "sd_read_write.cpp". + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_30.1_SDMMC_Test/Sketch_30.1_SDMMC_Test.ino + :linenos: + :language: c + :lines: 41-41 + :dedent: + +Call createDir() to create a folder, and call removeDir() to delete a folder. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_30.1_SDMMC_Test/Sketch_30.1_SDMMC_Test.ino + :linenos: + :language: c + :lines: 43-46 + :dedent: + +Call writeFile() to write any content to the txt file. If there is no such file, create this file first. + +Call appendFile() to append any content to txt. + +Call readFile() to read the content in txt and print it via the serial port. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_30.1_SDMMC_Test/Sketch_30.1_SDMMC_Test.ino + :linenos: + :language: c + :lines: 49-51 + :dedent: + +Call deleteFile() to delete a specified file. + +Call renameFile() to copy a file and rename it. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_30.1_SDMMC_Test/Sketch_30.1_SDMMC_Test.ino + :linenos: + :language: c + :lines: 53-54 + :dedent: + +Call the testFileIO() function to test the time it takes to read 512 bytes and the time it takes to write 2048*512 bytes of data. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_30.1_SDMMC_Test/Sketch_30.1_SDMMC_Test.ino + :linenos: + :language: c + :lines: 57-57 + :dedent: + +Print the total size and used size of the SD card via the serial port. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_30.1_SDMMC_Test/Sketch_30.1_SDMMC_Test.ino + :linenos: + :language: c + :lines: 59-60 + :dedent: \ No newline at end of file diff --git a/docs/source/fnk0060/codes/C/32_WiFi_Working_Modes.rst b/docs/source/fnk0060/codes/C/32_WiFi_Working_Modes.rst new file mode 100644 index 0000000..8d43834 --- /dev/null +++ b/docs/source/fnk0060/codes/C/32_WiFi_Working_Modes.rst @@ -0,0 +1,332 @@ +############################################################################## +Chapter WiFi Working Modes +############################################################################## + +In this chapter, we'll focus on the WiFi infrastructure for ESP32-WROVER. + +ESP32-WROVER has 3 different WiFi operating modes: station mode, AP mode and AP+station mode. All WiFi programming projects must be configured with WiFi operating mode before using WiFi, otherwise WiFi cannot be used. + +Project Station mode +******************************************* + +Component List +=========================================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | Micro USB Wire x1 | +| | | +| |Chapter01_00| | |Chapter08_00| | ++------------------------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter08_00| image:: ../_static/imgs/8_Serial_Communication/Chapter08_00.png + +Component knowledge +====================================== + +Station mode +---------------------------------------- + +When ESP32 selects Station mode, it acts as a WiFi client. It can connect to the router network and communicate with other devices on the router via WiFi connection. As shown below, the PC is connected to the router, and if ESP32 wants to communicate with the PC, it needs to be connected to the router. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_00.png + :align: center + +Circuit +================================= + +Connect Freenove ESP32 to the computer using the USB cable. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_01.png + :align: center + +Sketch +================================= + +Sketch_Station_mode +------------------------------------ + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_02.png + :align: center + +Because the names and passwords of routers in various places are different, before the Sketch runs, users need to enter the correct router's name and password in the box as shown in the illustration above. + +After making sure the router name and password are entered correctly, compile and upload codes to ESP32-WROVER, open serial monitor and set baud rate to 115200. And then it will display as follows: + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_03.png + :align: center + +When ESP32-WROVER successfully connects to "ssid_Router", serial monitor will print out the IP address assigned to ESP32-WROVER by the router. + +The following is the program code: + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_32.1_WiFi_Station/Sketch_32.1_WiFi_Station.ino + :linenos: + :language: c + :dedent: + +Include the WiFi Library header file of ESP32. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_32.1_WiFi_Station/Sketch_32.1_WiFi_Station.ino + :linenos: + :language: c + :lines: 7-7 + :dedent: + +Enter correct router name and password. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_32.1_WiFi_Station/Sketch_32.1_WiFi_Station.ino + :linenos: + :language: c + :lines: 9-10 + :dedent: + +Set ESP32 in Station mode and connect it to your router. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_32.1_WiFi_Station/Sketch_32.1_WiFi_Station.ino + :linenos: + :language: c + :lines: 16-16 + :dedent: + +Check whether ESP32 has connected to router successfully every 0.5s. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_32.1_WiFi_Station/Sketch_32.1_WiFi_Station.ino + :linenos: + :language: c + :lines: 12-15 + :dedent: + +Serial monitor prints out the IP address assigned to ESP32-WROVER + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_32.1_WiFi_Station/Sketch_32.1_WiFi_Station.ino + :linenos: + :language: c + :lines: 23-23 + :dedent: + +Reference +------------------------------- + +.. py:function:: Class Station + + Every time when using WiFi, you need to include header file "WiFi.h.". + + **begin(ssid, password,channel, bssid, connect):** ESP32 is used as Station to connect hotspot. + + **ssid:** WiFi hotspot name + + **password:** WiFi hotspot password + + **channel:** WiFi hotspot channel number; communicating through specified channel; optional parameter + + **bssid:** mac address of WiFi hotspot, optional parameter + + **connect:** blloean optional parameter, defaulting to true. If set as false, then ESP32 won't connect WiFi. + + **config(local_ip, gateway, subnet, dns1, dns2):** set static local IP address. + + **local_ip:** station fixed IP address. + + **subnet:** subnet mask + + **dns1,dns2:** optional parameter. define IP address of domain name server + + **status:** obtain the connection status of WiFI + + **local IP():** obtian IP address in Station mode + + **disconnect():** disconnect wifi + + **setAutoConnect(boolen):** set automatic connection Every time ESP32 is power on, it will connect WiFi aitomatically. + + **setAutoReconnect(boolen):** set automatic reconnection Every time ESP32 disconnects WiFi, it will reconnect to WiFi automatically. + +Project AP mode +********************************************* + +Component List & Circuit +============================================ + +Component List & Circuit are the same as in Section 30.1. + +Component knowledge +============================================ + +AP mode +---------------------------------------------- + +When ESP32 selects AP mode, it creates a hotspot network that is separate from the Internet and waits for other WiFi devices to connect. As shown in the figure below, ESP32 is used as a hotspot. If a mobile phone or PC wants to communicate with ESP32, it must be connected to the hotspot of ESP32. Only after a connection is established with ESP32 can they communicate. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_04.png + :align: center + +Circuit +================================= + +Connect Freenove ESP32 to the computer using the USB cable. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_01.png + :align: center + +Sketch +================================== + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_05.png + :align: center + +Before the Sketch runs, you can make any changes to the AP name and password for ESP32 in the box as shown in the illustration above. Of course, you can leave it alone by default. + +Compile and upload codes to ESP32-WROVER, open the serial monitor and set the baud rate to 115200. And then it will display as follows. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_06.png + :align: center + +When observing the print information of the serial monitor, turn on the WiFi scanning function of your phone, and you can see the ssid_AP on ESP32, which is called "WiFi_Name" in this Sketch. You can enter the password "12345678" to connect it or change its AP name and password by modifying Sketch. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_07.png + :align: center + +Sketch_AP_mode +------------------------------------ + +The following is the program code: + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_32.2_WiFi_AP/Sketch_32.2_WiFi_AP.ino + :linenos: + :language: c + :dedent: + +Include WiFi Library header file of ESP32. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_32.2_WiFi_AP/Sketch_32.2_WiFi_AP.ino + :linenos: + :language: c + :lines: 7-7 + :dedent: + +Enter correct AP name and password. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_32.2_WiFi_AP/Sketch_32.2_WiFi_AP.ino + :linenos: + :language: c + :lines: 9-10 + :dedent: + +Set ESP32 in AP mode. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_32.2_WiFi_AP/Sketch_32.2_WiFi_AP.ino + :linenos: + :language: c + :lines: 21-21 + :dedent: + +Configure IP address, gateway and subnet mask for ESP32. + +.. code-block:: c + + WiFi.softAPConfig(local_IP, gateway, subnet) + +Turn on an AP in ESP32, whose name is set by ssid_AP and password is set by password_AP. + +.. code-block:: c + + WiFi.softAP(ssid_AP, password_AP); + +Check whether the AP is turned on successfully. If yes, print out IP and MAC address of AP established by ESP32. If no, print out the failure prompt. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_32.2_WiFi_AP/Sketch_32.2_WiFi_AP.ino + :linenos: + :language: c + :lines: 25-32 + :dedent: + +Reference +------------------------------ + +.. py:function:: Class AP + + Every time when using WiFi, you need to include header file "WiFi.h.". + + **softAP(ssid, password, channel, ssid_hidden, max_connection):** + + **ssid: ** WiFi hotspot name + + **password: ** WiFi hotspot password + + **channel: ** Number of WiFi connection channels, range 1-13. The default is 1. + + **ssid_hidden: ** Whether to hide WiFi name from scanning by other devices. The default is not hide. + + **max_connection: ** Maximum number of WiFi connected devices. The range is 1-4. The default is 4. + + **softAPConfig(local_ip, gateway, subnet): ** set static local IP address. + + **local_ip: ** station fixed IP address. + + **Gateway: ** gateway IP address + + **subnet: ** subnet mask + + **softAP(): ** obtian IP address in AP mode + + **softAPdisconnect (): ** disconnect AP mode. + +Project AP+Station mode +****************************************** + +Component List +========================================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | Micro USB Wire x1 | +| | | +| |Chapter01_00| | |Chapter08_00| | ++------------------------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter08_00| image:: ../_static/imgs/8_Serial_Communication/Chapter08_00.png + +Component knowledge +============================================= + +AP+Station mode +---------------------------------------------- + +In addition to AP mode and station mode, ESP32 can also use AP mode and station mode at the same time. This mode contains the functions of the previous two modes. Turn on ESP32's station mode, connect it to the router network, and it can communicate with the Internet via the router. At the same time, turn on its AP mode to create a hotspot network. Other WiFi devices can choose to connect to the router network or the hotspot network to communicate with ESP32. + +Circuit +============================================ + +Connect Freenove ESP32 to the computer using the USB cable. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_08.png + :align: center + +Sketch +============================================= + +Sketch_AP_Station_mode +-------------------------------------------- + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_09.png + :align: center + +It is analogous to project 32.1 and project 32.2. Before running the Sketch, you need to modify ssid_Router, password_Router, ssid_AP and password_AP shown in the box of the illustration above. + +After making sure that Sketch is modified correctly, compile and upload codes to ESP32-WROVER, open serial monitor and set baud rate to 115200. And then it will display as follows: + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_10.png + :align: center + +When observing the print information of the serial monitor, turn on the WiFi scanning function of your phone, and you can see the ssid_AP on ESP32. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_11.png + :align: center + +The following is the program code: + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_32.3_AP_Station/Sketch_32.3_AP_Station.ino + :linenos: + :language: c + :dedent: \ No newline at end of file diff --git a/docs/source/fnk0060/codes/C/33_TCP_IP.rst b/docs/source/fnk0060/codes/C/33_TCP_IP.rst new file mode 100644 index 0000000..05d74dc --- /dev/null +++ b/docs/source/fnk0060/codes/C/33_TCP_IP.rst @@ -0,0 +1,364 @@ +############################################################################## +Chapter TCP/IP +############################################################################## + +In this chapter, we will introduce how ESP32 implements network communications based on TCP/IP protocol. There are two roles in TCP/IP communication, namely Server and Client, which will be implemented respectively with two projects in this chapter. + +Project As Client +********************************** + +In this section, ESP32 is used as Client to connect Server on the same LAN and communicate with it. + +Component List +=========================================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | Micro USB Wire x1 | +| | | +| |Chapter01_00| | |Chapter08_00| | ++------------------------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter08_00| image:: ../_static/imgs/8_Serial_Communication/Chapter08_00.png + +Component knowledge +============================= + +TCP connection +------------------------------- + +Before transmitting data, TCP needs to establish a logical connection between the sending end and the receiving end. It provides reliable and error-free data transmission between the two computers. In the TCP connection, the client and the server must be clarified. The client sends a connection request to the server, and each time such a request is proposed, a "three-times handshake" is required. + +Three-times handshake: In the TCP protocol, during the preparation phase of sending data, the client and the server interact three times to ensure the reliability of the connection, which is called "three-times handshake". + +The first handshake, the client sends a connection request to the server and waits for the server to confirm. + +The second handshake, the server sends a response back to the client informing that it has received the connection request. + +The third handshake, the client sends a confirmation message to the server again to confirm the connection. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_00.png + :align: center + +TCP is a connection-oriented, low-level transmission control protocol. After TCP establishes a connection, the client and server can send and receive messages to each other, and the connection will always exist as long as the client or server does not initiate disconnection. Each time one party sends a message, the other party will reply with an ack signal. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_01.png + :align: center + +Install Processing +--------------------------------- + +In this tutorial, we use Processing to build a simple TCP/IP communication platform. + +If you've not installed Processing, you can download it by clicking https://processing.org/download/. You can choose an appropriate version to download according to your PC system. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_02.png + :align: center + +Unzip the downloaded file to your computer. Click "processing.exe" as the figure below to run this software. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_03.png + :align: center + +Use Server mode for communication +------------------------------------------ + +Install ControlP5. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_04.png + :align: center + +Open the "Freenove_Ultimate_Starter_Kit_for_ESP32\Sketches\Sketches\Sketch_33.1_WiFiClient\sketchWiFi\sketchWiFi.pde", and click "Run". + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_05.png + :align: center + +The new pop-up interface is as follows. If ESP32 is used as client, select TCP SERVER mode for sketchWiFi. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_06.png + :align: center + +When sketchWiFi selects TCP SERVER mode, ESP32 Sketch needs to be changed according to sketchWiFi's displaying of LOCAL IP or LOCAL PORT. + +If ESP32 serves as server, select TCP CLIENT mode for sketchWiFi. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_07.png + :align: center + +When sketchWiFi selects TCP CLIENT mode, the LOCAL IP and LOCAL PORT of sketchWiFi need to be changed according to the IP address and port number printed by the serial monitor. + +**Mode selection:** select Server mode/Client mode. + +**IP address:** In server mode, this option does not need to be filled in, and the computer will automatically obtain the IP address. In client mode, fill in the remote IP address to be connected. + +**Port number:** In server mode, fill in a port number for client devices to make an access connection. In client mode, fill in port number given by the Server devices to make an access connection. + +**Start button:** In server mode, push the button, then the computer will serve as server and open a port number for client to make access connection. During this period, the computer will keep monitoring. In client mode, before pushing the button, please make sure the server is on, remote IP address and remote port number is correct; push the button, and the computer will make access connection to the remote port number of the remote IP as a client. + +**clear receive:** clear out the content in the receiving text box + +**clear send:** clear out the content in the sending text box + +**Sending button:** push the sending button, the computer will send the content in the text box to others. + +Circuit +========================================= + +Connect Freenove ESP32 to the computer using USB cable. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_08.png + :align: center + +Sketch +====================================== + +Before running the Sketch, please open "sketchWiFi.pde." first, and click "Run". + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_09.png + :align: center + +Next, open Sketch_33.1_WiFiClient.ino. Before running it, please change the following information based on "LOCAL IP" and "LOCAL PORT" in the figure above. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_10.png + :align: center + +REMOTE_IP needs to be filled in according to the interface of sketchWiFi.pde. Taking this tutorial as an example, its REMOTE_IP is "192.168.1.133". Generally, by default, the ports do not need to change its value. + +Click LISTENING, turn on TCP SERVER's data listening function and wait for ESP32 to connect. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_11.png + :align: center + +Compile and upload code to ESP32-WROVER, open the serial monitor and set the baud rate to 115200. ESP32 connects router, obtains IP address and sends access request to server IP address on the same LAN till the connection is successful. When connect successfully, ESP32 can send messages to server. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_12.png + :align: center + +ESP32 connects with TCP SERVER, and TCP SERVER receives messages from ESP32, as shown in the figure below. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_13.png + :align: center + +Sketch_As_Client +---------------------------------------- + +The following is the program code: + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_33.1_WiFiClient/Sketch_33.1_WiFiClient.ino + :linenos: + :language: c + :dedent: + +Add WiFi function header file. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_33.1_WiFiClient/Sketch_33.1_WiFiClient.ino + :linenos: + :language: c + :lines: 7-7 + :dedent: + +Enter the actual router name, password, remote server IP address, and port number. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_33.1_WiFiClient/Sketch_33.1_WiFiClient.ino + :linenos: + :language: c + :lines: 9-12 + :dedent: + +Apply for the method class of WiFiClient. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_33.1_WiFiClient/Sketch_33.1_WiFiClient.ino + :linenos: + :language: c + :lines: 13-13 + :dedent: + +Connect specified WiFi until it is successful. If the name and password of WiFi are correct but it still fails to connect, please push the reset key. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_33.1_WiFiClient/Sketch_33.1_WiFiClient.ino + :linenos: + :language: c + :lines: 19-24 + :dedent: + +Send connection request to remote server until connect successfully. When connect successfully, print out the connecting prompt on the serial monitor and send messages to remote server. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_33.1_WiFiClient/Sketch_33.1_WiFiClient.ino + :linenos: + :language: c + :lines: 34-39 + :dedent: + +When ESP32 receive messages from servers, it will print them out via serial port; Users can also send messages to servers from serial port. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_33.1_WiFiClient/Sketch_33.1_WiFiClient.ino + :linenos: + :language: c + :lines: 44-54 + :dedent: + +If the server is disconnected, turn off WiFi of ESP32. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_33.1_WiFiClient/Sketch_33.1_WiFiClient.ino + :linenos: + :language: c + :lines: 55-58 + :dedent: + +Reference +------------------------------- + +.. py:function:: Class Client + + Every time when using Client, you need to include header file "WiFi.h." + + **connect(ip, port, timeout)/connect(*host, port, timeout):** establish a TCP connection. + + **ip, *host:** ip address of target server + + **port:** port number of target server + + **timeout:** connection timeout + + **connected():** judge whether client is connecting. If return value is 1, then connect successfully; If return value is 0, then fail to connect. + + **stop():** stop tcp connection + + **print():** send data to server connecting to client + + **available():** return to the number of bytes readable in receive buffer, if no, return to 0 or -1. + + **read():** read one byte of data in receive buffer + + **readString():** read string in receive buffer + +Project As Server +******************************************* + +In this section, ESP32 is used as a server to wait for the connection and communication of client on the same LAN. + +Component List +=============================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | Micro USB Wire x1 | +| | | +| |Chapter01_00| | |Chapter08_00| | ++------------------------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter08_00| image:: ../_static/imgs/8_Serial_Communication/Chapter08_00.png + +Circuit +========================================== + +Connect Freenove ESP32 to the computer using a USB cable. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_14.png + :align: center + +Sketch +============================================ + +Before running Sketch, please modify the contents of the box below first. + +Sketch_As_Server +--------------------------------------------- + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_15.png + :align: center + +Compile and upload code to ESP32-WROVER board, open the serial monitor and set the baud rate to 115200. Turn on server mode for ESP32, waiting for the connection of other devices on the same LAN. Once a device connects to server successfully, they can send messages to each other. + +If the ESP32 fails to connect to router, press the reset button as shown below and wait for ESP32 to run again. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_16.png + :align: center + +Serial Monitor + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_17.png + :align: center + +Processing: + +Open the "Freenove_Ultimate_Starter_Kit_for_ESP32\Sketches\Sketches\Sketch_33.2_WiFiServer\ + +sketchWiFi\sketchWiFi.pde". + +Based on the messages printed by the serial monitor, enter correct IP address and serial port in Processing to establish connection and make communication. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_18.png + :align: center + +The following is the program code: + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_33.2_WiFiServer/Sketch_33.2_WiFiServer.ino + :linenos: + :language: c + :dedent: + +Apply for method class of WiFiServer. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_33.2_WiFiServer/Sketch_33.2_WiFiServer.ino + :linenos: + :language: c + :lines: 13-13 + :dedent: + +Connect specified WiFi until it is successful. If the name and password of WiFi are correct but it still fails to connect, please push the reset key. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_33.2_WiFiServer/Sketch_33.2_WiFiServer.ino + :linenos: + :language: c + :lines: 20-28 + :dedent: + +Print out the IP address and port number of ESP32. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_33.2_WiFiServer/Sketch_33.2_WiFiServer.ino + :linenos: + :language: c + :lines: 29-31 + :dedent: + +Turn on server mode of ESP32, turn on automatic reconnection. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_33.2_WiFiServer/Sketch_33.2_WiFiServer.ino + :linenos: + :language: c + :lines: 32-33 + :dedent: + +When ESP32 receive messages from servers, it will print them out via serial port; Users can also send messages to servers from serial port. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_33.2_WiFiServer/Sketch_33.2_WiFiServer.ino + :linenos: + :language: c + :lines: 41-48 + :dedent: + +Reference +------------------------------------- + +.. py:function:: Class Server + + Every time use Server functionality, we need to include header file"WiFi.h". + + **WiFiServer(uint16_t port=80, uint8_t max_clients=4):** create a TCP Server. + + **port:** ports of Server; range from 0 to 65535 with the default number as 80. + + **max_clients:** maximum number of clients with default number as 4. + + **begin(port):** start the TCP Server. + + **port:** ports of Server; range from 0 to 65535 with the default number as 0. + + **setNoDelay(bool nodelay):** whether to turn off the delay sending functionality. + + **nodelay:** true stands for forbidden Nagle algorithm. + + **close():** close tcp connection. + + **stop():** stop tcp connection. \ No newline at end of file diff --git a/docs/source/fnk0060/codes/C/34_Camera_Web_Server.rst b/docs/source/fnk0060/codes/C/34_Camera_Web_Server.rst new file mode 100644 index 0000000..6ebe293 --- /dev/null +++ b/docs/source/fnk0060/codes/C/34_Camera_Web_Server.rst @@ -0,0 +1,253 @@ +############################################################################## +Chapter Camera Web Server +############################################################################## + +In this section, we'll use ESP32's video function as an example to study. + +Project Camera Web Server +****************************************** + +Connect ESP32 using USB and check its IP address through serial monitor. Use web page to access IP address to obtain video and image data. + +Component List +=========================================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | Micro USB Wire x1 | +| | | +| |Chapter01_00| | |Chapter08_00| | ++------------------------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter08_00| image:: ../_static/imgs/8_Serial_Communication/Chapter08_00.png + +Circuit +================================= + +Connect Freenove ESP32 to the computer using the USB cable. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_01.png + :align: center + +Sketch +===================================== + +Sketch_As_CameraWebServer +--------------------------------------- + +.. image:: ../_static/imgs/34_Camera_Web_Server/Chapter34_00.png + :align: center + +Before running the program, please modify your router's name and password in the box shown in the illustration above to make sure that your Sketch can compile and work successfully. + +If your Arduino IDE prompts you that your sketch is out of your project's storage space, compile the code again as configured below. + +.. image:: ../_static/imgs/34_Camera_Web_Server/Chapter34_01.png + :align: center + +Compile and upload codes to ESP32, open the serial monitor and set the baud rate to 115200, and the serial monitor will print out a network link address. + +.. image:: ../_static/imgs/34_Camera_Web_Server/Chapter34_02.png + :align: center + +If your ESP32 has been in the process of connecting to router, but the information above has not been printed out, please re-check whether the router name and password have been entered correctly and press the reset key on ESP32-WROVER to wait for a successful connection prompt. + +Open a web browser, enter the IP address printed by the serial monitor in the address bar, and access it. + +Taking the Google browser as an example, here's what the browser prints out after successful access to ESP32's IP. + +We recommend that the resolution not exceed VGA(640x480). + +.. image:: ../_static/imgs/34_Camera_Web_Server/Chapter34_03.png + :align: center + +Click on Start Stream. The effect is shown in the image below. + +.. image:: ../_static/imgs/34_Camera_Web_Server/Chapter34_04.png + :align: center + +.. note:: + + If sketch compilation fails due to ESP32 support package, follow the steps of the image to open the CameraWebServer. This sketch is the same as described in the tutorial above. + +.. image:: ../_static/imgs/34_Camera_Web_Server/Chapter34_05.png + :align: center + +The following is the main program code. You need include other code files in the same folder when write your own code. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_34.1_CameraWebServer/Sketch_34.1_CameraWebServer.ino + :linenos: + :language: c + :dedent: + +Add procedure files and API interface files related to ESP32 camera. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_34.1_CameraWebServer/Sketch_34.1_CameraWebServer.ino + :linenos: + :language: c + :lines: 8-30 + :dedent: + +Enter the name and password of the router + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_34.1_CameraWebServer/Sketch_34.1_CameraWebServer.ino + :linenos: + :language: c + :lines: 32-33 + :dedent: + +Initialize serial port, set baud rate to 115200; open the debug and output function of the serial. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_34.1_CameraWebServer/Sketch_34.1_CameraWebServer.ino + :linenos: + :language: c + :lines: 40-42 + :dedent: + +Configure parameters including interface pins of the camera. Note: It is generally not recommended to change them. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_34.1_CameraWebServer/Sketch_34.1_CameraWebServer.ino + :linenos: + :language: c + :lines: 79-106 + :dedent: + +ESP32 connects to the router and prints a successful connection prompt. If it has not been successfully connected, press the reset key on the ESP32-WROVER. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_34.1_CameraWebServer/Sketch_34.1_CameraWebServer.ino + :linenos: + :language: c + :lines: 59-66 + :dedent: + +Open the video streams server function of the camera and print its IP address via serial port. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_34.1_CameraWebServer/Sketch_34.1_CameraWebServer.ino + :linenos: + :language: c + :lines: 68-72 + :dedent: + +Configure the display image information of the camera. + +The set_vflip() function sets whether the image is flipped 180°, with 0 for no flip and 1 for flip 180°. + +The set_brightness() function sets the brightness of the image, with values ranging from -2 to 2. + +The set_saturation() function sets the color saturation of the image, with values ranging from -2 to 2. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_34.1_CameraWebServer/Sketch_34.1_CameraWebServer.ino + :linenos: + :language: c + :lines: 53-57 + :dedent: + +Modify the resolution and sharpness of the images captured by the camera. The sharpness ranges from 10 to 63, and the smaller the number, the sharper the picture. The larger the number, the blurrier the picture. Please refer to the table below. + +.. code-block:: c + + config.frame_size = FRAMESIZE_VGA; + config.jpeg_quality = 10; + +Reference +-------------------------------- + ++-------------------+-----------+------------------+-----------+ +| Image resolution | Sharpness | Image resolution | Sharpness | ++-------------------+-----------+------------------+-----------+ +| FRAMESIZE_96x96 | 96x96 | FRAMESIZE_HVGA | 480x320 | ++-------------------+-----------+------------------+-----------+ +| FRAMESIZE_QQVGA | 160x120 | FRAMESIZE_VGA | 640x480 | ++-------------------+-----------+------------------+-----------+ +| FRAMESIZE_QCIF | 176x144 | FRAMESIZE_SVGA | 800x600 | ++-------------------+-----------+------------------+-----------+ +| FRAMESIZE_HQVGA | 240x176 | FRAMESIZE_XGA | 1024x768 | ++-------------------+-----------+------------------+-----------+ +| FRAMESIZE_240x240 | 240x240 | FRAMESIZE_HD | 1280x720 | ++-------------------+-----------+------------------+-----------+ +| FRAMESIZE_QVGA | 320x240 | FRAMESIZE_SXGA | 1280x1024 | ++-------------------+-----------+------------------+-----------+ +| FRAMESIZE_CIF | 400x296 | FRAMESIZE_UXGA | 1600x1200 | ++-------------------+-----------+------------------+-----------+ + +:red:`We recommend that the resolution not exceed VGA(640x480).` + +Project Video Web Server +******************************************* + +Connect to ESP32 using USB and view its IP address through a serial monitor. Access IP addresses through web pages to obtain real-time video data. + +Component List +============================================ + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | Micro USB Wire x1 | +| | | +| |Chapter01_00| | |Chapter08_00| | ++------------------------------------+-------------------------+ + +Circuit +================================= + +Connect Freenove ESP32 to the computer using the USB cable. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_01.png + :align: center + +Sketch +================================= + +Sketch_As_VideoWebServer +--------------------------------- + +.. image:: ../_static/imgs/34_Camera_Web_Server/Chapter34_06.png + :align: center + +Before running the program, please modify your router's name and password in the box shown in the illustration above to make sure that your Sketch can compile and work successfully. + +Compile and upload codes to ESP32, open the serial monitor and set the baud rate to 115200, and the serial monitor will print out a network link address. + +.. image:: ../_static/imgs/34_Camera_Web_Server/Chapter34_07.png + :align: center + +If your ESP32 has been in the process of connecting to router, but the information above has not been printed out, please re-check whether the router name and password have been entered correctly and press the reset key on ESP32-WROVER to wait for a successful connection prompt. + +Open a web browser, enter the IP address printed by the serial monitor in the address bar, and access it. + +Taking the Google browser as an example, here's what the browser prints out after successful access to ESP32's IP. + +The effect is shown in the image below. + +.. image:: ../_static/imgs/34_Camera_Web_Server/Chapter34_08.png + :align: center + +The following is the main program code. You need include other code files in the same folder when write your own code. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_34.2_As_VideoWebServer/Sketch_34.2_As_VideoWebServer.ino + :linenos: + :language: c + :dedent: + +Configure parameters including interface pins of the camera. Note: It is generally not recommended to change them. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_34.2_As_VideoWebServer/Sketch_34.2_As_VideoWebServer.ino + :linenos: + :language: c + :lines: 24-44 + :dedent: + +ESP32 connects to the router and prints a successful connection prompt. If it has not been successfully connected, press the reset key on the ESP32-WROVER. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_34.2_As_VideoWebServer/Sketch_34.2_As_VideoWebServer.ino + :linenos: + :language: c + :lines: 69-76 + :dedent: + +Open the video streams server function of the camera and print its IP address via serial port. + +.. literalinclude:: ../../../freenove_Kit/C/Sketches/Sketch_34.2_As_VideoWebServer/Sketch_34.2_As_VideoWebServer.ino + :linenos: + :language: c + :lines: 78-82 + :dedent: \ No newline at end of file diff --git a/docs/source/fnk0060/codes/C/End_of_the_Tutorial.rst b/docs/source/fnk0060/codes/C/End_of_the_Tutorial.rst new file mode 100644 index 0000000..e0c3a6c --- /dev/null +++ b/docs/source/fnk0060/codes/C/End_of_the_Tutorial.rst @@ -0,0 +1,5 @@ +############################################################################## +End of the Tutorial +############################################################################## + +Thank you again for choosing Freenove products. \ No newline at end of file diff --git a/docs/source/fnk0060/codes/C/Important_Information.rst b/docs/source/fnk0060/codes/C/Important_Information.rst new file mode 100644 index 0000000..caf20dc --- /dev/null +++ b/docs/source/fnk0060/codes/C/Important_Information.rst @@ -0,0 +1,92 @@ +###################################################### +Important Information +###################################################### + +Thank you for choosing Freenove products! + +Getting Started +********************************************* + +First, please read the Start Here.pdf document in the unzipped folder you created. + +If you have not yet downloaded the zip file, associated with this kit, please do so now and unzip it. + +Get Support and Offer Input +********************************************* + +Freenove provides free and responsive product and technical support, including but not limited to: + +- Product quality issues + +- Product use and build issues + +- Questions regarding the technology employed in our products for learning and education + +- Your input and opinions are always welcome + +- We also encourage your ideas and suggestions for new products and product improvements + +For any of the above, you may send us an email to: + +support@freenove.com + +Safety and Precautions +******************************************* + +Please follow the following safety precautions when using or storing this product: + +- Keep this product out of the reach of children under 6 years old. + +- This product should be used only when there is adult supervision present as young children lack necessary judgment regarding safety and the consequences of product misuse. + +- This product contains small parts and parts, which are sharp. This product contains electrically conductive parts. Use caution with electrically conductive parts near or around power supplies, batteries and powered (live) circuits. + +- When the product is turned ON, activated or tested, some parts will move or rotate. To avoid injuries to hands and fingers keep them away from any moving parts! + +- It is possible that an improperly connected or shorted circuit may cause overheating. Should this happen, immediately disconnect the power supply or remove the batteries and do not touch anything until it cools down! When everything is safe and cool, review the product tutorial to identify the cause. + +- Only operate the product in accordance with the instructions and guidelines of this tutorial, otherwise parts may be damaged or you could be injured. + +- Store the product in a cool dry place and avoid exposing the product to direct sunlight. + +- After use, always turn the power OFF and remove or unplug the batteries before storing. + +About Freenove +******************************************* + +Freenove provides open source electronic products and services worldwide. + +Freenove is committed to assist customers in their education of robotics, programming and electronic circuits so that they may transform their creative ideas into prototypes and new and innovative products. To this end, our services include but are not limited to: + +- Educational and Entertaining Project Kits for Robots, Smart Cars and Drones + +- Educational Kits to Learn Robotic Software Systems for Arduino, Raspberry Pi and micro: bit + +- Electronic Component Assortments, Electronic Modules and Specialized Tools + +- Product Development and Customization Services + +You can find more about Freenove and get our latest news and updates through our website: + +http://www.freenove.com + +sale@freenove.com + +Copyright +******************************************** + +All the files, materials and instructional guides provided are released under `Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License `_. A copy of this license can be found in the folder containing the Tutorial and software files associated with this product. + +This means you can use these resource in your own derived works, in part or completely but NOT for the intent or purpose of commercial use. + +Freenove brand and logo are copyright of Freenove Creative Technology Co., Ltd. and cannot be used without written permission. + +.. image:: ../_static/imgs/Welcome/welcome00.png + :align: center + +This means you can use these resource in your own derived works, in part or completely but NOT for the intent or purpose of commercial use. + +Freenove brand and logo are copyright of Freenove Creative Technology Co., Ltd. and cannot be used without written permission. + +.. image:: ../_static/imgs/Welcome/welcome01.png + :align: center \ No newline at end of file diff --git a/docs/source/fnk0060/codes/C/Preface.rst b/docs/source/fnk0060/codes/C/Preface.rst new file mode 100644 index 0000000..1a77c55 --- /dev/null +++ b/docs/source/fnk0060/codes/C/Preface.rst @@ -0,0 +1,430 @@ +############################################################################## +Preface +############################################################################## + +ESP32 is a micro control unit with integrated Wi-Fi launched by Espressif, which features strong properties and integrates rich peripherals. It can be designed and studied as an ordinary Single Chip Micyoco(SCM) chip, or connected to the Internet and used as an Internet of Things device. + +ESP32 can be developed using the Arduino platform, which will definitely make it easier for people who have learned arduino to master. Moreover, the code of ESP32 is completely open-source, so beginners can quickly learn how to develop and design IOT smart household products including smart curtains, fans, lamps and clocks. + +Generally, ESP32 projects consist of code and circuits. Don't worry even if you've never learned code and circuits, because we will gradually introduce the basic knowledge of C programming language and electronic circuits, from easy to difficult. Our products contain all the electronic components and modules needed to complete these projects. It's especially suitable for beginners. + +We divide each project into four parts, namely Component List, Component Knowledge, Circuit and Code. Component List helps you to prepare material for the experiment more quickly. Component Knowledge allows you to quickly understand new electronic modules or components, while Circuit helps you understand the operating principle of the circuit. And Code allows you to easily master the use of SEP32 and accessory kit. After finishing all the projects in this tutorial, you can also use these components and modules to make products such as smart household, smart cars and robots to transform your creative ideas into prototypes and new and innovative products. + +In addition, if you have any difficulties or questions with this tutorial or toolkit, feel free to ask for our quick and free technical support through support@freenove.com + +.. _ESP32_Wrover: + +ESP32-WROVER +*********************************************************************** + +ESP32-WROVER has launched a total of two antenna packages, PCB on-board antenna and IPEX antenna respectively. The PCB on-board antenna is an integrated antenna in the chip module itself, so it is convenient to carry and design. The IPEX antenna is a metal antenna derived from the integrated antenna of the chip module itself, which is used to enhance the signal of the module. + +.. list-table:: + :width: 80% + :header-rows: 1 + :align: center + + * - PCB on-board antenna + - IPEX antenna + + * - |Preface00| + - |Preface01| + +.. |Preface00| image:: ../_static/imgs/Preface/Preface00.png +.. |Preface01| image:: ../_static/imgs/Preface/Preface01.png + +In this tutorial, the ESP32-WROVER is designed based on the PCB on-board antenna-packaged ESP32-WROVER module. + +ESP32-WROVER + +.. image:: ../_static/imgs/Preface/Preface02.png + :align: center + +The hardware interfaces of ESP32-WROVER are distributed as follows: + +.. image:: ../_static/imgs/Preface/Preface03.png + :align: center + +Compare the left and right images. We've boxed off the resources on the ESP32-WROVER in different colors to facilitate your understanding of the ESP32-WROVER. + +.. list-table:: + :width: 80% + :header-rows: 1 + :align: center + + * - Box color + - Corresponding resources introduction + + * - |Preface04| + - GPIO pin + + * - |Preface05| + - LED indicator + + * - |Preface06| + - Camera interface + + * - |Preface07| + - Reset button, Boot mode selection button + + * - |Preface08| + - USB portX + +.. |Preface04| image:: ../_static/imgs/Preface/Preface04.png +.. |Preface05| image:: ../_static/imgs/Preface/Preface05.png +.. |Preface06| image:: ../_static/imgs/Preface/Preface06.png +.. |Preface07| image:: ../_static/imgs/Preface/Preface07.png +.. |Preface08| image:: ../_static/imgs/Preface/Preface08.png + +.. image:: ../_static/imgs/Preface/Preface09.png + :align: center + +For more information, please visit: https://www.espressif.com/sites/default/files/documentation/esp32-wrover_datasheet_en.pdf + +Extension board of the ESP32-WROVER +********************************************** +And we also design an extension board, so that you can use the ESP32 more easily in accordance with the circuit diagram provided. The followings are their photos. + +The hardware interfaces of ESP32-WROVER are distributed as follows: + +.. image:: ../_static/imgs/Preface/Preface10.png + :align: center + +We've boxed off the resources on the ESP32-WROVER in different colors to facilitate your understanding of the ESP32-WROVER. + +.. list-table:: + :width: 80% + :header-rows: 1 + :align: center + + * - Box color + - Corresponding resources introduction + + * - |Preface11| + - GPIO pin + + * - |Preface12| + - LED indicator + + * - |Preface13| + - GPIO interface of development board + + * - |Preface14| + - power supplied by the extension board + + * - |Preface15| + - External power supply + +.. |Preface11| image:: ../_static/imgs/Preface/Preface11.png +.. |Preface12| image:: ../_static/imgs/Preface/Preface12.png +.. |Preface13| image:: ../_static/imgs/Preface/Preface13.png +.. |Preface14| image:: ../_static/imgs/Preface/Preface14.png +.. |Preface15| image:: ../_static/imgs/Preface/Preface15.png + +In ESP32, GPIO is an interface to control peripheral circuit. For beginners, it is necessary to learn the functions of each GPIO. The following is an introduction to the GPIO resources of the ESP32-WROVER development board. + +In the following projects, we only use USB cable to power ESP32-WROVER by default. + +In the whole tutorial, we don't use T extension to power ESP32-WROVER. So 5V and 3.3V (including EXT 3.3V) on the extension board are provided by ESP32-WROVER. + +We can also use DC jack of extension board to power ESP32-WROVER.In this way, 5v and EXT 3.3v on extension board are provided by external power resource. + +CH340 (Importance) +*********************************** + +ESP32 uses CH340 to download codes. So before using it, we need to install CH340 driver in our computers. + +Windows +==================================== + +Check whether CH340 has been installed + +1. Connect your computer and ESP32 with a USB cable. + +.. image:: ../_static/imgs/Preface/Preface16.png + :align: center + +2. Turn to the main interface of your computer, select "This PC" and right-click to select "Manage". + +.. image:: ../_static/imgs/Preface/Preface17.png + :align: center + +3. Click "Device Manager". If your computer has installed CH340, you can see"USB-SERIAL CH340 (COMx)". And you can click :ref:`here ` to move to the next step. + +.. image:: ../_static/imgs/Preface/Preface18.png + :align: center + +Installing CH340 +------------------------------------ + +1. First, download CH340 driver, click http://www.wch-ic.com/search?q=CH340&t=downloads to download the appropriate one based on your operating system. + +.. image:: ../_static/imgs/Preface/Preface19.png + :align: center + +If you would not like to download the installation package, you can open "Freenove_Ultimate_Starter_Kit_for_ESP32/CH340", we have prepared the installation package. + +.. image:: ../_static/imgs/Preface/Preface20.png + :align: center + +2. Open the folder "Freenove_Ultimate_Starter_Kit_for_ESP32/CH340/Windows/" + +.. image:: ../_static/imgs/Preface/Preface21.png + :align: center + +3. Double click "CH341SER.EXE". + +.. image:: ../_static/imgs/Preface/Preface22.png + :align: center + +4. Click "INSTALL" and wait for the installation to complete. + +.. image:: ../_static/imgs/Preface/Preface23.png + :align: center + +5. Install successfully. Close all interfaces. + +.. image:: ../_static/imgs/Preface/Preface24.png + :align: center + +6. When ESP32 is connected to computer, select "This PC", right-click to select "Manage" and click "Device Manager" in the newly pop-up dialog box, and you can see the following interface. + +.. image:: ../_static/imgs/Preface/Preface25.png + :align: center + +7. So far, CH340 has been installed successfully. Close all dialog boxes. + +MAC +============================== + +First, download CH340 driver, click http://www.wch-ic.com/search?q=CH340&t=downloads to download the appropriate one based on your operating system. + +.. image:: ../_static/imgs/Preface/Preface26.png + :align: center + +If you would not like to download the installation package, you can open "Freenove_Ultimate_Starter_Kit_for_ESP32/CH340", we have prepared the installation package. + +Second, open the folder "Freenove_Ultimate_Starter_Kit_for_ESP32/CH340/MAC/" + +.. image:: ../_static/imgs/Preface/Preface27.png + :align: center + +Third, click Continue. + +.. image:: ../_static/imgs/Preface/Preface28.png + :align: center + +Fourth, click Install. + +.. image:: ../_static/imgs/Preface/Preface29.png + :align: center + +Then, waiting Finsh. + +.. image:: ../_static/imgs/Preface/Preface30.png + :align: center + +Finally, restart your PC. + +.. image:: ../_static/imgs/Preface/Preface31.png + :align: center + +If you still haven't installed the CH340 by following the steps above, you can view readme.pdf to install it. + +.. image:: ../_static/imgs/Preface/Preface32.png + :align: center + +.. _programming: + +Programming Software +******************************************** + +Arduino Software (IDE) is used to write and upload the code for Arduino Board. + +First, install Arduino Software (IDE): visit https://www.arduino.cc, click "Download" to enter the download page. + +.. image:: ../_static/imgs/Preface/Preface33.png + :align: center + +Select and download corresponding installer according to your operating system. If you are a windows user, please select the "Windows Installer" to download to install the driver correctly. + +.. image:: ../_static/imgs/Preface/Preface34.png + :align: center + +After the download completes, run the installer. For Windows users, there may pop up an installation dialog box of driver during the installation process. When it popes up, please allow the installation. + +After installation is complete, an Arduino Software shortcut will be generated in the desktop. Run the Arduino Software. + +.. image:: ../_static/imgs/Preface/Preface35.png + :align: center + +The interface of Arduino Software is as follows: + +.. image:: ../_static/imgs/Preface/Preface36.png + :align: center + +Programs written with Arduino Software (IDE) are called sketches. These sketches are written in the text editor and saved with the file extension.ino. The editor has features for cutting/pasting and searching/replacing text. The message area gives feedback while saving and exporting and also displays errors. The console displays text output by the Arduino Software (IDE), including complete error messages and other information. The bottom right-hand corner of the window displays the configured board and serial port. The toolbar buttons allow you to verify and upload programs, create, open, and save sketches, and open the serial monitor. + +.. image:: ../_static/imgs/Preface/Preface37.png + :align: center + +Additional commands are found within the five menus: File, Edit, Sketch, Tools, Help. The menus are context sensitive, which means only those items relevant to the work currently being carried out are available. + +Environment Configuration +*********************************** + +First, open the software platform arduino, and then click File in Menus and select Preferences. + +.. image:: ../_static/imgs/Preface/Preface38.png + :align: center + +Second, click on the symbol behind "Additional Boards Manager URLs" + +.. image:: ../_static/imgs/Preface/Preface39.png + :align: center + +Third, fill in https://espressif.github.io/arduino-esp32/package_esp32_index.json in the new window, click OK, and click OK on the Preferences window again. + +.. image:: ../_static/imgs/Preface/Preface40.png + :align: center + +Fourth, click "BOARDS MANAGER" on the left and type "ESP32" in the search box. + +.. image:: ../_static/imgs/Preface/Preface41.png + :align: center + +Fifth, select Espressif Systems' ESP32 and select version 3.0.x. Click "INSTALL" to install esp32. + +.. image:: ../_static/imgs/Preface/Preface42.png + :align: center + +.. note:: + + it takes a while to install the ESP32, make sure your network is stable. + +When finishing installation, click Tools in the Menus again and select Board: "Arduino Uno", and then you can see information of ESP32 Wrover Module. Click " ESP32 Wrover Module" so that the ESP32 programming development environment is configured. + +.. image:: ../_static/imgs/Preface/Preface43.png + :align: center + +.. image:: ../_static/imgs/Preface/Preface44.png + :align: center + +.. _GPIO: + +Notes for GPIO +********************************* + +Strapping Pin +================================= + +There are five Strapping pins for ESP32:MTDI、GPIO0、GPIO2、MTDO、GPIO5。 + +With the release of the chip's system reset (power-on reset, RTC watchdog reset, undervoltage reset), the strapping pins sample the level and store it in the latch as "0" or "1" ", and keep it until the chip is powered off or turned off. + +Each Strapping pin is connecting to internal pull-up/pull-down. Connecting to high-impedance external circuit or without an external connection, a strapping pin's default value of input level will be determined by internal weak pull-up/pull-down. To change the value of the Strapping, users can apply an external pull-down/pull-up resistor, or use the GPIO of the host MCU to control the level of the strapping pin when the ESP32's power on reset is released. + +**When releasing the reset, the strapping pin has the same function as a normal pin.** + +The followings are default configurations of these five strapping pins at power-on and their functions under the corresponding configuration. + +.. image:: ../_static/imgs/Preface/Preface45.png + :align: center + +.. image:: ../_static/imgs/Preface/Preface46.png + :align: center + +If you have any questions about the information of GPIO, you can click here to go back to ESP32-WROVER to view specific information about GPIO. + +If you have any difficulties or questions with this tutorial or toolkit, feel free to ask for our quick and free technical support through support@freenove.com at any time. + +or check: https://www.espressif.com/sites/default/files/documentation/esp32-wrover_datasheet_en.pdf + +Strapping Pin + +.. image:: ../_static/imgs/Preface/Preface47.png + :align: center + +Flash Pin + +GPIO6-11 has been used to connect the integrated SPI flash on the module, and is used when GPIO 0 is power on and at high level. Flash is related to the operation of the whole chip, so the external pin GPIO6-11 cannot be used as an experimental pin for external circuits, otherwise it may cause errors in the operation of the program. + +In older versions, the flash pin looks like the image below. + +.. image:: ../_static/imgs/Preface/Preface48.png + :align: center + +In the new release, we no longer introduce GPIO6-11. + +.. image:: ../_static/imgs/Preface/Preface49.png + :align: center + +GPIO16-17 has been used to connect the integrated PSRAM on the module. + +Because of external pull-up, MTDI pin is not suggested to be used as a touch sensor. For details, please refer to Peripheral Interface and Sensor chapter in "ESP32 Data_Sheet". + +For more relevant information, please check: https://www.espressif.com/sites/default/files/documentation/esp32-wrover_datasheet_en.pdf. + +Cam Pin +======================================== + +When using the camera of our ESP32-WROVER, please check the pins of it. + +Pins with underlined numbers are used by the camera function, if you want to use other functions besides it, please avoid using them. + +.. image:: ../_static/imgs/Preface/Preface50.png + :align: center + +.. list-table:: + :width: 80% + :header-rows: 1 + :align: center + + * - CAM_Pin + - GPIO_pin + + * - I2C_SDA + - GPIO26 + + * - I2C_SCL + - GPIO27 + + * - CSI_VYSNC + - GPIO25 + + * - CSI_HREF + - GPIO23 + + * - CSI_Y9 + - GPIO35 + + * - XCLK + - GPIO21 + + * - CSI_Y8 + - GPIO34 + + * - CSI_Y7 + - GPIO39 + + * - CSI_PCLK + - GPIO22 + + * - CSI_Y6 + - GPIO36 + + * - CSI_Y2 + - GPIO4 + + * - CSI_Y5 + - GPIO19 + + * - CSI_Y3 + - GPIO5 + + * - CSI_Y4 + - GPIO18 + +If you have any questions about the information of GPIO, you can click :ref:`here ` to go back to ESP32-WROVER to view specific information about GPIO. + +or check: https://www.espressif.com/sites/default/files/documentation/esp32-wrover_datasheet_en.pdf. \ No newline at end of file diff --git a/docs/source/fnk0060/codes/C/What_s_next.rst b/docs/source/fnk0060/codes/C/What_s_next.rst new file mode 100644 index 0000000..c7bb38e --- /dev/null +++ b/docs/source/fnk0060/codes/C/What_s_next.rst @@ -0,0 +1,15 @@ +############################################################################## +What's next? +############################################################################## + +Thanks for your reading. This tutorial is all over here. If you find any mistakes, omissions or you have other ideas and questions about contents of this tutorial or the kit and etc., please feel free to contact us: + +support@freenove.com + +We will check and correct it as soon as possible. + +If you are interesting in processing, you can learn the Processing.pdf in: Freenove_Ultimate_Starter_Kit_for_ESP32\C\Processing.pdf + +If you want to learn more about Arduino, Raspberry Pi, smart cars, robots and other interesting products in science and technology, please continue to focus on our website. We will continue to launch cost-effective, innovative and exciting products. + +http://www.freenove.com/ \ No newline at end of file diff --git a/docs/source/fnk0060/codes/Python.rst b/docs/source/fnk0060/codes/Python.rst new file mode 100644 index 0000000..0491a09 --- /dev/null +++ b/docs/source/fnk0060/codes/Python.rst @@ -0,0 +1,43 @@ +###################################################### +Python language +###################################################### + +.. toctree:: + :maxdepth: 1 + :caption: Important_Information + :glob: + + Python/Welcome.rst + +.. toctree:: + :maxdepth: 1 + :caption: Prepare + :glob: + + Python/Prepare.rst + +.. toctree:: + :maxdepth: 1 + :numbered: + :glob: + + Python/1_LED_(Important).rst + Python/27_Bluetooth.rst + Python/28_WiFi_Working_Modes.rst + Python/29_TCP_IP.rst + Python/30_Camera_Web_Server.rst + + .. toctree:: + :maxdepth: 1 + :caption: What's next? + :glob: + + Python/What_s_next(47).rst + Python/What_s_next(others).rst + +.. toctree:: + :maxdepth: 1 + :caption: End of the Tutorial + :glob: + + Python/End_of_the_Tutorial.rst \ No newline at end of file diff --git a/docs/source/fnk0060/codes/Python/1_LED_(Important).rst b/docs/source/fnk0060/codes/Python/1_LED_(Important).rst new file mode 100644 index 0000000..cde0be8 --- /dev/null +++ b/docs/source/fnk0060/codes/Python/1_LED_(Important).rst @@ -0,0 +1,511 @@ +############################################################################## +Chapter LED (Important) +############################################################################## + +This chapter is the Start Point in the journey to build and explore ESP32 electronic projects. We will start with simple "Blink" project. + +Project Blink +******************************* + +In this project, we will use ESP32 to control blinking a common LED. + +If you have not yet installed Thonny, click :ref:`here`. + +If you have not yet downloaded Micropython Firmware, click :ref:`here`. + +If you have not yet loaded Micropython Firmware, click :ref:`here`. + +Component List +=============================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | USB cable | +| | | +| |Chapter01_00| | |Chapter08_00| | ++------------------------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter08_00| image:: ../_static/imgs/8_Serial_Communication/Chapter08_00.png + +Power +----------------------------- + +ESP32-WROVER needs 5v power supply. In this tutorial, we need connect ESP32-WROVER to computer via USB cable to power it and program it. We can also use other 5v power source to power it. + +.. image:: ../_static/imgs/1_LED/Chapter01_18.png + :align: center + +In the following projects, we only use USB cable to power ESP32-WROVER by default. + +In the whole tutorial, we don't use T extension to power ESP32-WROVER. So 5V and 3.3V (includeing EXT 3.3V) on the extension board are provided by ESP32-WROVER. + +We can also use DC jack of extension board to power ESP32-WROVER.In this way, 5v and EXT 3.3v on extension board are provided by external power resource. + +Code +=========================== + +Codes used in this tutorial are saved in "Freenove_Ultimate_Starter_Kit_for_ESP32/Python/ + +Python_Codes". You can move the codes to any location. For example, we save the codes in Disk(D) with the path of "D:/Micropython_Codes". + +Blink +--------------------------- + +Open "Thonny", click "This computer" -> "D:" -> "Micropython_Codes". + +.. image:: ../_static/imgs/1_LED/Chapter01_19.png + :align: center + +Expand folder "01.1_Blink" and double click "Blink.py" to open it. As shown in the illustration below. + +.. image:: ../_static/imgs/1_LED/Chapter01_20.png + :align: center + +Make sure ESP32 has been connected with the computer with ESP32 correctly. Click "Stop/Restart backend" or press the reset button, and then wait to see what interface will show up. + +.. image:: ../_static/imgs/1_LED/Chapter01_21.png + :align: center + +Click "Run current script" shown in the box above, the code starts to be executed and the LED in the circuit starts to blink. + +.. image:: ../_static/imgs/1_LED/Chapter01_22.png + :align: center + +Due to different versions, some board leds will show the opposite effect. + +.. note:: + + This is the code :ref:`running online `. If you disconnect USB cable and repower ESP32 or press its reset key, LED stops blinking and the following messages will be displayed in Thonny. + +.. image:: ../_static/imgs/1_LED/Chapter01_23.png + :align: center + +Uploading code to ESP32 +------------------------------ + +As shown in the following illustration, right-click the file Blink.py and select "Upload to /" to upload code to ESP32. + +.. image:: ../_static/imgs/1_LED/Chapter01_24.png + :align: center + +Upload boot.py in the same way. + +.. image:: ../_static/imgs/1_LED/Chapter01_25.png + :align: center + +Press the reset key of ESP32 and you can see LED is ON for one second and then OFF for one second, which repeats in an endless loop. + +.. image:: ../_static/imgs/1_LED/Chapter01_26.png + :align: center + +:red:`Due to different versions, some board leds will show the opposite effect.` + +.. note:: + + Codes here is run offline. If you want to stop running offline and enter Shell, just click "Stop" in Thonny. + +.. image:: ../_static/imgs/1_LED/Chapter01_27.png + :align: center + +:red:`If you have any concerns, please contact us via:` support@freenove.com + +The following is the program code: + +.. code-block:: python + + from time import sleep_ms + from machine import Pin + + led=Pin(2,Pin.OUT) #create LED object from pin2,Set Pin2 to output + try: + while True: + led.value(1) #Set led turn on + sleep_ms(1000) + led.value(0) #Set led turn off + sleep_ms(1000) + except: + pass + +Each time a new file is opened, the program will be executed from top to bottom. When encountering a loop construction, it will execute the loop statement according to the loop condition. + +.. image:: ../_static/imgs/1_LED/Chapter01_28.png + :align: center + +Print() function is used to print data to Terminal. It can be executed in Terminal directly or be written in a Python file and executed by running the file. + +.. code-block:: python + + print("Hello world!") + +Each time when using the functions of ESP32, you need to import modules corresponding to those functions: Import sleep_ms module of time module and Pin module of machine module. + +.. code-block:: python + + from time import sleep_ms + from machine import Pin + +Configure GPIO2 of ESP32-WROVER to output mode and assign it to an object named "led". + +.. code-block:: python + + led=Pin(2,Pin.OUT) #create LED object from pin2,Set Pin2 to output + +It means that from now on, LED represents GPIO2 that is in output mode. + +Set the value of LED to 1 and GPIO2 will output high level. + +.. code-block:: python + + led.value(1) #Set led turn on + +Set the value of LED to 0 and GPIO2 will output low level. + +.. code-block:: python + + led.value(0) #Set led turn on + +Execute codes in a while loop. + +.. code-block:: python + + while True: + ...... + +Put statements that may cause an error in "try" block and the executing statements when an error occurs in "except" block. In general, when the program executes statements, it will execute those in "try" block. However, when an error occurs to ESP32 due to some interference or other reasons, it will execute statements in "except" block. + +"Pass" is an empty statement. When it is executed, nothing happens. It is useful as a placeholder to make the structure of a program look better. + +.. code-block:: python + + try: + ... + except: + pass + +The single-line comment of Micropython starts with a "#" and continues to the end of the line. Comments help us to understand code. When programs are running, Thonny will ignore comments. + +.. code-block:: python + + #Set led turn on + +MicroPython uses indentations to distinguish different blocks of code instead of braces. The number of indentations is changeable, but it must be consistent throughout one block. If the indentation of the same code block is inconsistent, it will cause errors when the program runs. + +.. code-block:: python + + while True: + led.value(1) #Set led turn on + sleep_ms(1000) + led.value(0) #Set led turn off + sleep_ms(1000) + +How to import python files +----------------------------------- + +Whether to import the built-in python module or to import that written by users, the command "import" is needed. + +If you import the module directly you should indicate the module to which the function or attribute belongs when using the function or attribute (constant, variable) in the module. The format should be: ., otherwise an error will occur. + +.. image:: ../_static/imgs/1_LED/Chapter01_29.png + :align: center + +If you only want to import a certain function or attribute in the module, use the from...import statement. The format is as follows + +.. image:: ../_static/imgs/1_LED/Chapter01_30.png + :align: center + +When using "from...import" statement to import function, to avoid conflicts and for easy understanding, you can use "as" statement to rename the imported function, as follows + +.. image:: ../_static/imgs/1_LED/Chapter01_31.png + :align: center + +Reference +--------------------------- + +.. py:function:: Class machine + + Before each use of the machine module, please add the statement "import machine" to the top of python file. + + **machine.freq(freq_val):** When freq_val is not specified, it is to return to the current CPU frequency; Otherwise, it is to set the current CPU frequency. + + **freq_val:** 80000000(80MHz)、160000000(160MHz)、240000000(240MHz) + + **machine.reset():** A reset function. When it is called, the program will be reset. + + **machine.unique_id():** Obtains MAC address of the device. + + **machine.idle():** Turns off any temporarily unused functions on the chip and its clock, which is useful to reduce power consumption at any time during short or long periods. + + **machine.disable_irq():** Disables interrupt requests and return the previous IRQ state. The disable_irq () function and enable_irq () function need to be used together; Otherwise the machine will crash and restart. + + **machine.enable_irq(state):** To re-enable interrupt requests. The parameter state should be the value that was returned from the most recent call to the disable_irq() function + + **machine.time_pulse_us(pin, pulse_level, timeout_us=1000000):** + + Tests the duration of the external pulse level on the given pin and returns the duration of the external pulse level in microseconds. When pulse level = 1, it tests the high level duration; When pulse level = 0, it tests the low level duration. + + If the setting level is not consistent with the current pulse level, it will wait until they are consistent, and then start timing. If the set level is consistent with the current pulse level, it will start timing immediately. + + When the pin level is opposite to the set level, it will wait for timeout and return "-2". When the pin level and the set level is the same, it will also wait timeout but return "-1". timeout_us is the duration of timeout. + +.. py:function:: Class Pin(id[, mode, pull, value]) + + Before each use of the Pin module, please add the statement "from machine import Pin" to the top of python file. + + **id:** Arbitrary pin number + + **mode:** Mode of pins + + **Pin.IN:** Input Mode + + **Pin.OUT:** Output Mode + + **Pin.OPEN_DRAIN:** Open-drain Mode + + Pull: Whether to enable the internal pull up and down mode + + **None:** No pull up or pull down resistors + + **Pin.PULL_UP:** Pull-up Mode, outputting high level by default + + **Pin.PULL_DOWN:** Pull-down Mode, outputting low level by default + + **Value:** State of the pin level, 0/1 + + **Pin.init(mode, pull):** Initialize pins + + **Pin.value([value]):** Obtain or set state of the pin level, return 0 or 1 according to the logic level of pins. Without parameter, it reads input level. With parameter given, it is to set output level. + + **value:** It can be either True/False or 1/0. + + **Pin.irq(trigger, handler):** Configures an interrupt handler to be called when the pin level meets a condition. + + **trigger:** + + **Pin.IRQ_FALLING:** interrupt on falling edge + + **Pin.IRQ_RISING:** interrupt on rising edge + + **3:** interrupt on both edges + + **Handler:** callback function + +.. py:function:: Class time + + Before each use of the **time** module, please add the statement " **import time** " to the top of python file + + **time.sleep(sec):** Sleeps for the given number of seconds + + **sec:** This argument should be either an int or a float. + + **time.sleep_ms(ms):** Sleeps for the given number of milliseconds, ms should be an int. + + **time.sleep_us(us):** Sleeps for the given number of microseconds, us should be an int. + + **time.time():** Obtains the timestamp of CPU, with second as its unit. + + **time.ticks_ms():** Returns the incrementing millisecond counter value, which recounts after some values. + + **time.ticks_us():** Returns microsecond + + **time.ticks_cpu():** Similar to ticks_ms() and ticks_us(), but it is more accurate(return clock of CPU). + + **time.ticks_add(ticks, delta):** Gets the timestamp after the offset. + + **ticks:** ticks_ms()、ticks_us()、ticks_cpu() + + **delta:** Delta can be an arbitrary integer number or numeric expression + + **time.ticks_diff(old_t, new_t):** Calculates the interval between two timestamps, such as ticks_ms(), ticks_us() or ticks_cpu(). + + **old_t:** Starting time + + **new_t:** Ending time + +Project Blink +******************************** + +In this project, we will use ESP32 to control blinking a common LED. + +Component List +====================================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | GPIO Extension Board x1 | +| | | +| |Chapter01_00| | |Chapter01_01| | ++------------------------------------+-------------------------+ +| Breadboard x1 | +| | +| |Chapter01_02| | ++-----------------+------------------+-------------------------+ +| LED x1 | Resistor 220Ω x1 | Jumper M/M x2 | +| | | | +| |Chapter01_03| | |Chapter01_04| | |Chapter01_05| | ++-----------------+------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter01_01| image:: ../_static/imgs/1_LED/Chapter01_01.png +.. |Chapter01_02| image:: ../_static/imgs/1_LED/Chapter01_02.png +.. |Chapter01_03| image:: ../_static/imgs/1_LED/Chapter01_03.png +.. |Chapter01_04| image:: ../_static/imgs/1_LED/Chapter01_04.png +.. |Chapter01_05| image:: ../_static/imgs/1_LED/Chapter01_05.png + +Component knowledge +========================== + +LED +------------------------- + +An LED is a type of diode. All diodes only work if current is flowing in the correct direction and have two Poles. An LED will only work (light up) if the longer pin (+) of LED is connected to the positive output from a power source and the shorter pin is connected to the negative (-). Negative output is also referred to as Ground (GND). This type of component is known as "Polar" (think One-Way Street). + +All common 2 lead diodes are the same in this respect. Diodes work only if the voltage of its positive electrode is higher than its negative electrode and there is a narrow range of operating voltage for most all common diodes of 1.9 and 3.4V. If you use much more than 3.3V the LED will be damaged and burn out. + +.. image:: ../_static/imgs/1_LED/Chapter01_32.png + :align: center + +.. note:: + + LEDs cannot be directly connected to a power supply, which usually ends in a damaged component. A resistor with a specified resistance value must be connected in series to the LED you plan to use. + +Resistor +------------------------- + +Resistors use Ohms (Ω) as the unit of measurement of their resistance (R). 1MΩ=1000kΩ, 1kΩ=1000Ω. + +A resistor is a passive electrical component that limits or regulates the flow of current in an electronic circuit. + +On the left, we see a physical representation of a resistor, and the right is the symbol used to represent the presence of a resistor in a circuit diagram or schematic. + +.. image:: ../_static/imgs/1_LED/Chapter01_33.png + :align: center + +The bands of color on a resistor is a shorthand code used to identify its resistance value. For more details of resistor color codes, please refer to the appendix of this tutorial. + +With a fixed voltage, there will be less current output with greater resistance added to the circuit. The relationship between Current, Voltage and Resistance can be expressed by this formula: I=V/R known as Ohm's Law where I = Current, V = Voltage and R = Resistance. Knowing the values of any two of these allows you to solve the value of the third. + +In the following diagram, the current through R1 is: I=U/R=5V/10kΩ=0.0005A=0.5mA. + +.. image:: ../_static/imgs/1_LED/Chapter01_34.png + :align: center + +.. warning:: + + Never connect the two poles of a power supply with anything of low resistance value (i.e. a metal object or bare wire) this is a Short and results in high current that may damage the power supply and electronic components. + +.. note:: + + Unlike LEDs and Diodes, Resistors have no poles and re non-polar (it does not matter which direction you insert them into a circuit, it will work the same) + +Breadboard +------------------------------------- + +Here we have a small breadboard as an example of how the rows of holes (sockets) are electrically attached. + +The left picture shows the way to connect pins. The right picture shows the practical internal structure. + +.. image:: ../_static/imgs/1_LED/Chapter01_35.png + :align: center + +Power +---------------------------------- + +ESP32-WROVER needs 5v power supply. In this tutorial, we need connect ESP32-WROVER to computer via USB cable to power it and program it. We can also use other 5v power source to power it. + +.. image:: ../_static/imgs/1_LED/Chapter01_36.png + :align: center + +Later, we only use USB cable to power ESP32-WROVER in default. + +In the whole tutorial, we don't use T extension to power ESP32-WROVER. So 5V and 3.3V (include EXT 3.3V) on the extension board are from ESP32-WROVER. + +We can also use DC jack of extension board to power ESP32-WROVER. Then 5v and EXT 3.3v on extension board are from external power resource. + +Circuit +============================== + +First, disconnect all power from the ESP32-WROVER. Then build the circuit according to the circuit and hardware diagrams. After the circuit is built and verified correct, connect the PC to ESP32-WROVER. + +CAUTION: Avoid any possible short circuits (especially connecting 5V or GND, 3.3V and GND)! WARNING: A short circuit can cause high current in your circuit, create excessive component heat and cause permanent damage to your hardware! + +.. list-table:: + :width: 100% + :header-rows: 1 + :align: center + + * - Schematic diagram + * - |Chapter01_37| + + * - Hardware connection. + + :red:`If you need any support, please contact us via:` support@freenove.com + + * - |Chapter01_38| + + :red:`Don't rotate ESP32-WROVER 180° for connection.` + +.. |Chapter01_37| image:: ../_static/imgs/1_LED/Chapter01_37.png +.. |Chapter01_38| image:: ../_static/imgs/1_LED/Chapter01_38.png + +Code +===================================== + +Codes used in this tutorial are saved in "Freenove_Ultimate_Starter_Kit_for_ESP32/Python/ + +Python_Codes". You can move the codes to any location. For example, we save the codes in Disk(D) with the path of "D:/Micropython_Codes". + +Blink +------------------------------------- + +Open "Thonny"'click "This computer" -> "D:" -> "Micropython_Codes". + +.. image:: ../_static/imgs/1_LED/Chapter01_39.png + :align: center + +Expand folder "01.1_Blink" and double click "Blink.py" to open it. As shown in the illustration below. + +.. image:: ../_static/imgs/1_LED/Chapter01_40.png + :align: center + +Make sure ESP32 has been connected with the computer with ESP32 correctly. Click "Stop/Restart backend" or press the reset button, and then wait to see what interface will show up. + +.. image:: ../_static/imgs/1_LED/Chapter01_41.png + :align: center + +Click "Run current script" shown in the box above, the code starts to be executed and the LED in the circuit starts to blink. + +.. image:: ../_static/imgs/1_LED/Chapter01_42.png + :align: center + +.. note:: + + This is the code :ref:`running online `. If you disconnect USB cable and repower ESP32 or press its reset key, LED stops blinking and the following messages will be displayed in Thonny. + +.. image:: ../_static/imgs/1_LED/Chapter01_43.png + :align: center + +Uploading code to ESP32 +-------------------------------- + +As shown in the following illustration, right-click the file Blink.py and select "Upload to /" to upload code to ESP32. + +.. image:: ../_static/imgs/1_LED/Chapter01_44.png + :align: center + +Upload boot.py in the same way. + +.. image:: ../_static/imgs/1_LED/Chapter01_45.png + :align: center + +Press the reset key of ESP32 and you can see LED is ON for one second and then OFF for one second, which repeats in an endless loop. + +.. image:: ../_static/imgs/1_LED/Chapter01_46.png + :align: center + +.. note:: + + Codes here is run offline. If you want to stop running offline and enter Shell, just click "Stop" in Thonny. + +.. image:: ../_static/imgs/1_LED/Chapter01_47.png + :align: center + +:red:`If you have any concerns, please contact us via:` support@freenove.com \ No newline at end of file diff --git a/docs/source/fnk0060/codes/Python/27_Bluetooth.rst b/docs/source/fnk0060/codes/Python/27_Bluetooth.rst new file mode 100644 index 0000000..0a12c05 --- /dev/null +++ b/docs/source/fnk0060/codes/Python/27_Bluetooth.rst @@ -0,0 +1,230 @@ +############################################################################## +Chapter Bluetooth +############################################################################## + +This chapter mainly introduces how to make simple data transmission through Bluetooth of ESP32-WROVER and mobile phones. + +Project 27.1 is classic Bluetooth and Project 27.2 is low power Bluetooth.If you are an iPhone user, please start with Project 27.2. + +Project Bluetooth Low Energy Data Passthrough +**************************************************** + +Component List +================================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | Micro USB Wire x1 | +| | | +| |Chapter01_00| | |Chapter08_00| | ++------------------------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter08_00| image:: ../_static/imgs/8_Serial_Communication/Chapter08_00.png + +In this tutorial we need to use a Bluetooth APP called Serial Bluetooth Terminal to assist in the experiment. If you've not installed it yet, please do so by clicking: https://www.appsapk.com/serial-bluetooth-terminal/ The following is its logo. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_00.png + :align: center + +Lightblue +====================================== + +If you can't install Serial Bluetooth on your phone, try LightBlue.If you do not have this software installed on your phone, you can refer to this link: https://apps.apple.com/us/app/lightblue/id557428110#?platform=iphone + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_43.png + :align: center + +Code +====================================== + +Move the program folder "Freenove_Ultimate_Starter_Kit_for_ESP32/Python/Python_Codes" to disk(D) in advance with the path of "D:/Micropython_Codes". + +Open "Thonny", click "This computer" -> "D:" -> "Micropython_Codes" -> "27.1_BLE". Select "ble_advertising.py", right click your mouse to select "Upload to /", wait for "ble_advertising.py" to be uploaded to ESP32-WROVER and then double click "BLE.py". + +BLE +-------------------------------------- + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_33.png + :align: center + +Click run for BLE.py. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_34.png + :align: center + +Turn ON Bluetooth on your phone, and open the Lightblue APP. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_35.png + :align: center + +In the Scan page, swipe down to refresh the name of Bluetooth that the phone searches for. Click ESP32. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_36.png + :align: center + +After Bluetooth is connect successfully, Shell will printer the information. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_37.png + :align: center + +Click "Receive". Select the appropriate Data format in the box to the right of Data Format. For example, HEX for hexadecimal, utf-string for character, Binary for Binary, etc. Then click SUBSCRIBE. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_38.png + :align: center + +You can type "Hello" in Shell and press "Enter" to send. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_39.png + :align: center + +And then you can see the mobile Bluetooth has received the message. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_40.png + :align: center + +Similarly, you can select "Send" on your phone. Set Data format, and then enter anything in the sending box and click Write to send. + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_41.png + :align: center + +You can check the message from Bluetooth in "Shell". + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_42.png + :align: center + +And now data can be transferred between your mobile phone and computer via ESP32-WROVER. + +The following is the program code: + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/27.1_BLE/BLE.py + :language: python + :dedent: + +Define the specified UUID number for BLE vendor. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/27.1_BLE/BLE.py + :language: python + :lines: 20-28 + :dedent: + +Write an _irq function to manage BLE interrupt events. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/27.1_BLE/BLE.py + :language: python + :lines: 46-63 + :dedent: + +Initialize the BLE function and name it. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/27.1_BLE/BLE.py + :language: python + :lines: 36-36 + :dedent: + +When the mobile phone send data to ESP32 via BLE Bluetooth, it will print them out with serial port; When the serial port of ESP32 receive data, it will send them to mobile via BLE Bluetooth. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/27.1_BLE/BLE.py + :language: python + :lines: 80-96 + :dedent: + + +Project Bluetooth Control LED +********************************************* + +In this section, we will control the LED with Bluetooth. + +Component List +====================================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | GPIO Extension Board x1 | +| | | +| |Chapter01_00| | |Chapter01_01| | ++------------------------------------+-------------------------+ +| Micro USB Wire x1 | +| | +| |Chapter08_00| | ++--------------------------------------------------------------+ +| Breadboard x1 | +| | +| |Chapter01_02| | ++-----------------+------------------+-------------------------+ +| LED x1 | Resistor 220Ω x1 | Jumper M/M x2 | +| | | | +| |Chapter01_03| | |Chapter01_04| | |Chapter01_05| | ++-----------------+------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter01_01| image:: ../_static/imgs/1_LED/Chapter01_01.png +.. |Chapter01_02| image:: ../_static/imgs/1_LED/Chapter01_02.png +.. |Chapter01_03| image:: ../_static/imgs/1_LED/Chapter01_03.png +.. |Chapter01_04| image:: ../_static/imgs/1_LED/Chapter01_04.png +.. |Chapter01_05| image:: ../_static/imgs/1_LED/Chapter01_05.png +.. |Chapter08_00| image:: ../_static/imgs/8_Serial_Communication/Chapter08_00.png + +Circuit +========================================== + +Connect Freenove ESP32 to the computer using a USB cable. + +.. list-table:: + :width: 80% + :header-rows: 1 + :align: center + + * - Schematic diagram + * - |Chapter27_27| + * - Hardware connection. + + If you need any support, please feel free to contact us via: support@freenove.com + + |Chapter27_28| + +.. |Chapter27_27| image:: ../_static/imgs/27_Bluetooth/Chapter27_27.png +.. |Chapter27_28| image:: ../_static/imgs/27_Bluetooth/Chapter27_28.png + +Code +==================================== + +Move the program folder "Freenove_Ultimate_Starter_Kit_for_ESP32/Python/Python_Codes" to disk(D) in advance with the path of "D:/Micropython_Codes". + +Open "Thonny", click "This computer" -> "D:" -> "Micropython_Codes" -> "27.2_ BLE_LED". Select "ble_advertising.py", right click your mouse to select "Upload to /", wait for "ble_advertising.py" to be uploaded to ESP32-WROVER and then double click "BLE_LED.py". + +BLE_LED +----------------------------------- + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_44.png + :align: center + +Compile and upload code to ESP32. The operation of the APP is the same as 27.1, you only need to change the sending content to "led_on" and "led_off" to operate LEDs on the ESP32-WROVER. + +Data sent from mobile APP: + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_45.png + :align: center + +You can check the message sent by Bluetooth in "Shell". + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_46.png + :align: center + +The phenomenon of LED + +.. image:: ../_static/imgs/27_Bluetooth/Chapter27_47.png + :align: center + +Attention: If the sending content isn't "led_on' or "led_off", then the state of LED will not change. If the LED is on, when receiving irrelevant content, it keeps on; Correspondingly, if the LED is off, when receiving irrelevant content, it keeps off. + +The following is the program code: + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/27.2_BLE_LED/BLE_LED.py + :language: python + :dedent: + +Compare received message with "led_on" and "led_off" and take action accordingly. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/27.2_BLE_LED/BLE_LED.py + :language: python + :lines: 88-91 + :dedent: diff --git a/docs/source/fnk0060/codes/Python/28_WiFi_Working_Modes.rst b/docs/source/fnk0060/codes/Python/28_WiFi_Working_Modes.rst new file mode 100644 index 0000000..c369ed7 --- /dev/null +++ b/docs/source/fnk0060/codes/Python/28_WiFi_Working_Modes.rst @@ -0,0 +1,356 @@ +############################################################################## +Chapter WiFi Working Modes +############################################################################## + +In this chapter, we'll focus on the WiFi infrastructure for ESP32-WROVER. + +ESP32-WROVER has 3 different WiFi operating modes: station mode, AP mode and AP+station mode. All WiFi programming projects must be configured with WiFi operating mode before using WiFi, otherwise WiFi cannot be used. + +Project Station mode +******************************************* + +Component List +=========================================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | Micro USB Wire x1 | +| | | +| |Chapter01_00| | |Chapter08_00| | ++------------------------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter08_00| image:: ../_static/imgs/8_Serial_Communication/Chapter08_00.png + +Component knowledge +====================================== + +Station mode +---------------------------------------- + +When ESP32 selects Station mode, it acts as a WiFi client. It can connect to the router network and communicate with other devices on the router via WiFi connection. As shown below, the PC is connected to the router, and if ESP32 wants to communicate with the PC, it needs to be connected to the router. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_00.png + :align: center + +Circuit +================================= + +Connect Freenove ESP32 to the computer using the USB cable. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_01.png + :align: center + +Code +================================ + +Move the program folder "Freenove_Ultimate_Starter_Kit_for_ESP32/Python/Python_Codes" to disk(D) in advance with the path of "D:/Micropython_Codes". + +Open "Thonny", click "This computer" -> "D:" -> "Micropython_Codes" -> "28.1_Station_mode" and double click "Station_mode.py". + +28.1_Station_mode +----------------------------------- + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_12.png + :align: center + +Because the names and passwords of routers in various places are different, before the Code runs, users need to enter the correct router’s name and password in the box as shown in the illustration above. + +After making sure the router name and password are entered correctly, compile and upload codes to ESP32-WROVER, wait for ESP32 to connect to your router and print the IP address assigned by the router to ESP32 in "Shell". + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_13.png + :align: center + +The following is the program code: + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.1_Station_mode/Station_mode.py + :language: python + :dedent: + +Import network module. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.1_Station_mode/Station_mode.py + :language: python + :lines: 2-2 + :dedent: + +Enter correct router name and password. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.1_Station_mode/Station_mode.py + :language: python + :lines: 4-5 + :dedent: + +Set ESP32 in Station mode. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.1_Station_mode/Station_mode.py + :language: python + :lines: 9-9 + :dedent: + +Activate ESP32's Station mode, initiate a connection request to the router and enter the password to connect. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.1_Station_mode/Station_mode.py + :language: python + :lines: 14-15 + :dedent: + +Print the IP address assigned to ESP32-WROVER in "Shell". + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.1_Station_mode/Station_mode.py + :language: python + :lines: 16-16 + :dedent: + +Reference +------------------------------ + +.. py:function:: Class network + + Before each use of **network** , please add the statement " **import network** " to the top of the python file. + + **WLAN(interface_id):** Set to WiFi mode. + + **network.STA_IF:** Client, connecting to other WiFi access points. + + **network.AP_IF:** Access points, allowing other WiFi clients to connect. + + **active(is_active):** With parameters, it is to check whether to activate the network interface; Without parameters, it is to query the current state of the network interface. + + **scan(ssid, bssid, channel, RSSI, authmode, hidden):** Scan for wireless networks available nearby (only scan on STA interface), return a tuple list of information about the WiFi access point. + + **bssid:** The hardware address of the access point, returned in binary form as a byte object. You can use ubinascii.hexlify() to convert it to ASCII format. + + **authmode:** Access type + + **AUTH_OPEN** = 0 + + **AUTH_WEP** = 1 + + **AUTH_WPA_PSK** = 2 + + **AUTH_WPA2_PSK** = 3 + + **AUTH_WPA_WPA2_PSK** = 4 + + **AUTH_MAX** = 6 + + **Hidden:** Whether to scan for hidden access points + + **False:** Only scanning for visible access points + + **True:** Scanning for all access points including the hidden ones. + + **isconnected():** Check whether ESP32 is connected to AP in Station mode. In STA mode, it returns True if it is connected to a WiFi access point and has a valid IP address; Otherwise it returns False. + + **connect(ssid, password):** Connecting to wireless network. + + **ssid:** WiFiname + + **password:** WiFipassword + + **disconnect():** Disconnect from the currently connected wireless network. + +Project AP mode +********************************************* + +Component List & Circuit +============================================ + +Component List & Circuit are the same as in Section 30.1. + +Component knowledge +============================================ + +AP mode +---------------------------------------------- + +When ESP32 selects AP mode, it creates a hotspot network that is separate from the Internet and waits for other WiFi devices to connect. As shown in the figure below, ESP32 is used as a hotspot. If a mobile phone or PC wants to communicate with ESP32, it must be connected to the hotspot of ESP32. Only after a connection is established with ESP32 can they communicate. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_04.png + :align: center + +Circuit +================================= + +Connect Freenove ESP32 to the computer using the USB cable. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_01.png + :align: center + +Code +=================================== + +Move the program folder "Freenove_Ultimate_Starter_Kit_for_ESP32/Python/Python_Codes" to disk(D) in advance with the path of "D:/Micropython_Codes". + +Open "Thonny", click "This computer" -> "D:" -> "Micropython_Codes" -> "28.2_AP_mode". and double click "AP_mode.py". + +AP_mode +---------------------------------- + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_14.png + :align: center + +Before the Code runs, you can make any changes to the AP name and password for ESP32 in the box as shown in the illustration above. Of course, you can leave it alone by default. + +Click "Run current script", open the AP function of ESP32 and print the access point information. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_15.png + :align: center + +Turn on the WiFi scanning function of your phone, and you can see the ssid_AP on ESP32, which is called "WiFi_Name" in this Code. You can enter the password "12345678" to connect it or change its AP name and password by modifying Code. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_16.png + :align: center + +The following is the program code: + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.2_AP_mode/AP_mode.py + :language: python + :dedent: + +Import network module. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.2_AP_mode/AP_mode.py + :language: python + :lines: 1-1 + :dedent: + +Enter correct AP name and password. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.2_AP_mode/AP_mode.py + :language: python + :lines: 3-4 + :dedent: + +Set ESP32 in AP mode. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.2_AP_mode/AP_mode.py + :language: python + :lines: 11-11 + :dedent: + +Configure IP address, gateway and subnet mask for ESP32. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.2_AP_mode/AP_mode.py + :language: python + :lines: 14-14 + :dedent: + +Turn on an AP in ESP32, whose name is set by ssid_AP and password is set by password_AP. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.2_AP_mode/AP_mode.py + :language: python + :lines: 16-17 + :dedent: + +If the program is running abnormally, the AP disconnection function will be called. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.2_AP_mode/AP_mode.py + :language: python + :lines: 25-25 + :dedent: + +Reference +---------------------------------- + +.. py:function:: Class network + + Before each use of **network** , please add the statement " **import network** " to the top of the python file. + + **WLAN(interface_id):** Set to WiFi mode. + + **network.STA_IF:** Client, connecting to other WiFi access points + + **network.AP_IF:** Access points, allowing other WiFi clients to connect + + **active(is_active):** With parameters, it is to check whether to activate the network interface; Without parameters, it is to query the current state of the network interface + + **isconnected():** In AP mode, it returns True if it is connected to the station; otherwise it returns False. + + **connect(ssid, password):** Connecting to wireless network + + **ssid:** WiFiname + + **password:** WiFipassword + + **config(essid, channel):** To obtain the MAC address of the access point or to set the WiFi channel and the name of the WiFi access point. + + **ssid:** WiFi account name + + **channel:** WiFichannel + + **ifconfig([(ip, subnet, gateway, dns)]):** Without parameters, it returns a 4-tuple (ip, subnet_mask, gateway, DNS_server); With parameters, it configures static IP. + + **ip:** IPaddress + + **subnet_mask:** subnet mask + + **gateway:** gateway + + **DNS_server:** DNSserver + + **disconnect():** Disconnect from the currently connected wireless network + + **status():** Return the current status of the wireless connection + +Project AP+Station mode +****************************************** + +Component List +========================================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | Micro USB Wire x1 | +| | | +| |Chapter01_00| | |Chapter08_00| | ++------------------------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter08_00| image:: ../_static/imgs/8_Serial_Communication/Chapter08_00.png + +Component knowledge +============================================= + +AP+Station mode +---------------------------------------------- + +In addition to AP mode and station mode, ESP32 can also use AP mode and station mode at the same time. This mode contains the functions of the previous two modes. Turn on ESP32's station mode, connect it to the router network, and it can communicate with the Internet via the router. At the same time, turn on its AP mode to create a hotspot network. Other WiFi devices can choose to connect to the router network or the hotspot network to communicate with ESP32. + +Circuit +============================================ + +Connect Freenove ESP32 to the computer using the USB cable. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_08.png + :align: center + +Code +============================ + +Move the program folder "Freenove_Ultimate_Starter_Kit_for_ESP32/Python/Python_Codes" to disk(D) in advance with the path of "D:/Micropython_Codes". + +Open "Thonny", click "This computer" -> "D:" -> "Micropython_Codes" -> "28.3_AP+STA_mode"and double click "AP+STA_mode.py". + +AP+STA_mode +-------------------------- + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_17.png + :align: center + +It is analogous to project 28.1 and project 28.2. Before running the Code, you need to modify ssidRouter, passwordRouter, ssidAP and passwordAP shown in the box of the illustration above. + +After making sure that the code is modified correctly, click "Run current script" and the "Shell" will display as follows: + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_18.png + :align: center + +Turn on the WiFi scanning function of your phone, and you can see the ssidAP on ESP32. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_19.png + :align: center + +The following is the program code: + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.3_AP+STA_mode/AP+STA_mode.py + :language: python + :dedent: diff --git a/docs/source/fnk0060/codes/Python/29_TCP_IP.rst b/docs/source/fnk0060/codes/Python/29_TCP_IP.rst new file mode 100644 index 0000000..38da43c --- /dev/null +++ b/docs/source/fnk0060/codes/Python/29_TCP_IP.rst @@ -0,0 +1,353 @@ +############################################################################## +Chapter TCP/IP +############################################################################## + +In this chapter, we will introduce how ESP32 implements network communications based on TCP/IP protocol. There are two roles in TCP/IP communication, namely Server and Client, which will be implemented respectively with two projects in this chapter. + +Project As Client +********************************** + +In this section, ESP32 is used as Client to connect Server on the same LAN and communicate with it. + +Component List +=========================================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | Micro USB Wire x1 | +| | | +| |Chapter01_00| | |Chapter08_00| | ++------------------------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter08_00| image:: ../_static/imgs/8_Serial_Communication/Chapter08_00.png + +Component knowledge +============================= + +TCP connection +------------------------------- + +Before transmitting data, TCP needs to establish a logical connection between the sending end and the receiving end. It provides reliable and error-free data transmission between the two computers. In the TCP connection, the client and the server must be clarified. The client sends a connection request to the server, and each time such a request is proposed, a "three-times handshake" is required. + +Three-times handshake: In the TCP protocol, during the preparation phase of sending data, the client and the server interact three times to ensure the reliability of the connection, which is called "three-times handshake". + +The first handshake, the client sends a connection request to the server and waits for the server to confirm. + +The second handshake, the server sends a response back to the client informing that it has received the connection request. + +The third handshake, the client sends a confirmation message to the server again to confirm the connection. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_00.png + :align: center + +TCP is a connection-oriented, low-level transmission control protocol. After TCP establishes a connection, the client and server can send and receive messages to each other, and the connection will always exist as long as the client or server does not initiate disconnection. Each time one party sends a message, the other party will reply with an ack signal. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_01.png + :align: center + +Install Processing +--------------------------------- + +In this tutorial, we use Processing to build a simple TCP/IP communication platform. + +If you've not installed Processing, you can download it by clicking https://processing.org/download/. You can choose an appropriate version to download according to your PC system. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_02.png + :align: center + +Unzip the downloaded file to your computer. Click "processing.exe" as the figure below to run this software. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_03.png + :align: center + +Use Server mode for communication +------------------------------------------ + +Install ControlP5. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_04.png + :align: center + +Open the "Freenove_Ultimate_Starter_Kit_for_ESP32\Sketches\Sketches\Sketch_33.1_WiFiClient\sketchWiFi\sketchWiFi.pde", and click "Run". + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_05.png + :align: center + +The new pop-up interface is as follows. If ESP32 is used as client, select TCP SERVER mode for sketchWiFi. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_06.png + :align: center + +When sketchWiFi selects TCP SERVER mode, ESP32 Sketch needs to be changed according to sketchWiFi's displaying of LOCAL IP or LOCAL PORT. + +If ESP32 serves as server, select TCP CLIENT mode for sketchWiFi. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_07.png + :align: center + +When sketchWiFi selects TCP CLIENT mode, the LOCAL IP and LOCAL PORT of sketchWiFi need to be changed according to the IP address and port number printed by the serial monitor. + +**Mode selection:** select Server mode/Client mode. + +**IP address:** In server mode, this option does not need to be filled in, and the computer will automatically obtain the IP address. In client mode, fill in the remote IP address to be connected. + +**Port number:** In server mode, fill in a port number for client devices to make an access connection. In client mode, fill in port number given by the Server devices to make an access connection. + +**Start button:** In server mode, push the button, then the computer will serve as server and open a port number for client to make access connection. During this period, the computer will keep monitoring. In client mode, before pushing the button, please make sure the server is on, remote IP address and remote port number is correct; push the button, and the computer will make access connection to the remote port number of the remote IP as a client. + +**clear receive:** clear out the content in the receiving text box + +**clear send:** clear out the content in the sending text box + +**Sending button:** push the sending button, the computer will send the content in the text box to others. + +Circuit +========================================= + +Connect Freenove ESP32 to the computer using USB cable. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_08.png + :align: center + +Code +======================================= + +Before running the Code, please open "sketchWiFi.pde." first, and click "Run". + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_19.png + :align: center + +The newly pop up window will use the computer's IP address by default and open a data monitor port. Click"Listening"。 + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_20.png + :align: center + +Move the program folder "Freenove_Ultimate_Starter_Kit_for_ESP32/Python/Python_Codes" to disk(D) in advance with the path of "D:/Micropython_Codes". + +Open "Thonny", click "This computer" -> "D:" -> "Micropython_Codes" -> "29.1_TCP_as_Client" and double click "TCP_as_Client.py". + +Before clicking "Run current script", please modify the name and password of your router and fill in the "host" and "port" according to the IP information shown in the box below: + +TCP_as_Client +------------------------------- + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_21.png + :align: center + +Click "Run current script" and in "Shell", you can see ESP32-WROVER automatically connects to sketchWiFi. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_22.png + :align: center + +If you don't click "Listening" for sketchWiFi, ESP32-WROVER will fail to connect and will print information as follows: + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_23.png + :align: center + +ESP32 connects with TCP SERVER, and TCP SERVER receives messages from ESP32, as shown in the figure below. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_24.png + :align: center + +The following is the program code: + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/29.1_TCP_as_Client/TCP_as_Client.py + :language: python + :dedent: + +Import network、socket、time modules. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.3_AP+STA_mode/AP+STA_mode.py + :language: python + :lines: 1-3 + :dedent: + +Enter the actual router name, password, remote server IP address, and port number. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.3_AP+STA_mode/AP+STA_mode.py + :language: python + :lines: 5-8 + :dedent: + +Connect specified Router until it is successful. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.3_AP+STA_mode/AP+STA_mode.py + :language: python + :lines: 13-21 + :dedent: + +Connect router and then connect it to remote server. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.3_AP+STA_mode/AP+STA_mode.py + :language: python + :lines: 23-27 + :dedent: + +Send messages to the remote server, receive the messages from it and print them out, and then send the messages back to the server. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.3_AP+STA_mode/AP+STA_mode.py + :language: python + :lines: 28-37 + :dedent: + +If an exception occurs in the program, for example, the remote server is shut down, execute the following program, turn off the socket function, and disconnect the WiFi. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/28.3_AP+STA_mode/AP+STA_mode.py + :language: python + :lines: 39-43 + :dedent: + +Reference +---------------------------------- + +.. py:function:: Class socket + + Before each use of **socket** , please add the statement " **import socket** " to the top of the python file. + + **socket([af, type, proto]):** Create a socket. + + **af:** address + + **socket.AF_INET:** IPv4 + + **socket.AF_INET6:** IPv6 + + **type:** type + + **socket.SOCK_STREAM** : TCP stream + + **socket.SOCK_DGRAM** : UDP datagram + + **socket.SOCK_RAW** : Original socket + + **socket.SO_REUSEADDR** : socket reusable + + **proto:** protocol number + + **socket.IPPROTO_TCP:** TCPmode + + **socket.IPPROTO_UDP:** UDPmode + + **socket.setsockopt(level, optname, value):** Set the socket according to the options. + + **Level:** Level of socket option + + **socket.SOL_SOCKET:** Level of socket option. By default, it is 4095. + + **optname:** Options of socket + + **socket.SO_REUSEADDR:** Allowing a socket interface to be tied to an address that is already in use. + + **value:** The value can be an integer or a bytes-like object representing a buffer. + + **socket.connect(address):** To connect to server. + + **Address:** Tuple or list of the server's address and port number + + **send(bytes):** Send data and return the bytes sent. + + **recv(bufsize):** Receive data and return a bytes object representing the data received. + + **close():** Close socket. + +To learn more please visit: http://docs.micropython.org/en/latest/ + +Project As Server +******************************************* + +In this section, ESP32 is used as a server to wait for the connection and communication of client on the same LAN. + +Component List +=============================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | Micro USB Wire x1 | +| | | +| |Chapter01_00| | |Chapter08_00| | ++------------------------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter08_00| image:: ../_static/imgs/8_Serial_Communication/Chapter08_00.png + +Circuit +========================================== + +Connect Freenove ESP32 to the computer using a USB cable. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_14.png + :align: center + +Code +=============================== + +Move the program folder "Freenove_Ultimate_Starter_Kit_for_ESP32/Python/Python_Codes" to disk(D) in advance with the path of "D:/Micropython_Codes". + +Open "Thonny", click "This computer" -> "D:" -> "Micropython_Codes" -> "29.2_TCP_as_Server" and double click "TCP_as_Server.py". + +Before clicking "Run current script", please modify the name and password of your router shown in the box below. +- +TCP_as_Server +--------------------------------- + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_25.png + :align: center + +After making sure that the router's name and password are correct, click "Run current script" and in "Shell", you can see a server opened by the ESP32- WROVER waiting to connecting to other network devices. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_26.png + :align: center + +Processing: + +Open the " **Freenove_Ultimate_Starter_Kit_for_ESP32/Codes/MicroPython_Codes/29.2_TCP_as_Server/sketchWiFi/sketchWiFi.pde** ". + +Based on the message printed in "Shell", enter the correct IP address and port when processing, and click to establish a connection with ESP32 to communicate. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_27.png + :align: center + +You can enter any information in the "Send Box" of sketchWiFi. Click "Send" and ESP32 will print the received messages to "Shell" and send them back to sketchWiFi. + +.. image:: ../_static/imgs/33_TCP_IP/Chapter33_28.png + :align: center + +The following is the program code: + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/29.2_TCP_as_Server/TCP_as_Server.py + :language: python + :dedent: + +Call function connectWifi() to connect to router and obtain the dynamic IP that it assigns to ESP32. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/29.2_TCP_as_Server/TCP_as_Server.py + :language: python + :lines: 22-23 + :dedent: + +Open the socket server, bind the server to the dynamic IP, and open a data monitoring port. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/29.2_TCP_as_Server/TCP_as_Server.py + :language: python + :lines: 24-27 + :dedent: + +Print the server's IP address and port, monitor the port and wait for the connection of other network devices. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/29.2_TCP_as_Server/TCP_as_Server.py + :language: python + :lines: 29-34 + :dedent: + +Each time receiving data, print them in "Shell" and send them back to the client. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/29.2_TCP_as_Server/TCP_as_Server.py + :language: python + :lines: 36-46 + :dedent: + +If the client is disconnected, close the server and disconnect WiFi. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/29.2_TCP_as_Server/TCP_as_Server.py + :language: python + :lines: 47-52 + :dedent: diff --git a/docs/source/fnk0060/codes/Python/30_Camera_Web_Server.rst b/docs/source/fnk0060/codes/Python/30_Camera_Web_Server.rst new file mode 100644 index 0000000..b5e6a77 --- /dev/null +++ b/docs/source/fnk0060/codes/Python/30_Camera_Web_Server.rst @@ -0,0 +1,201 @@ +############################################################################## +Chapter Camera Web Server +############################################################################## + +In this section, we'll use ESP32's video function as an example to study. + +Project Camera Web Server +****************************************** + +Connect ESP32 using USB and check its IP address through serial monitor. Use web page to access IP address to obtain video and image data. + +Component List +=========================================== + ++------------------------------------+-------------------------+ +| ESP32-WROVER x1 | Micro USB Wire x1 | +| | | +| |Chapter01_00| | |Chapter08_00| | ++------------------------------------+-------------------------+ + +.. |Chapter01_00| image:: ../_static/imgs/1_LED/Chapter01_00.png +.. |Chapter08_00| image:: ../_static/imgs/8_Serial_Communication/Chapter08_00.png + +Circuit +================================= + +Connect Freenove ESP32 to the computer using the USB cable. + +.. image:: ../_static/imgs/32_WiFi_Working_Modes/Chapter32_01.png + :align: center + +Code +================================== + +Move the program folder " **Freenove_Ultimate_Starter_Kit_for_ESP32/Python/Python_Codes** " to disk(D) in advance with the path of " **D:/Micropython_Codes** ". + +Since Micropython does not provide firmware including camera module, in this chapter, we will use the camera based on the firmware in lemariva's Github project, micropython-camera-driver. + +Project link: https://github.com/lemariva/micropython-camera-driver + +Before starting the project, we need to re-upload the firmware with the camera module via steps below. + +Open Thonny, click "run" and select "Select interpreter..."" + +.. image:: ../_static/imgs/34_Camera_Web_Server/Chapter34_09.png + :align: center + +Select "Micropython (ESP32)", select "USB-SERIAL CH340 (COM4)", and then click the long button under "Firmware". + +.. image:: ../_static/imgs/34_Camera_Web_Server/Chapter34_10.png + :align: center + +In the new popup window, select corresponding "USB-SERIAL CH340 (COM3)" for port. Click "Browse", select " **30.1_Camera_WebServer\firmware\micropython_camera_feeeb5ea3_esp32_idf4_4.bin** ". + +Select "Erase…" and click "Install"。 + +.. image:: ../_static/imgs/34_Camera_Web_Server/Chapter34_11.png + :align: center + +Wait for completion. + +Open "Thonny", click "This computer" -> "D:" -> "Micropython_Codes" -> "30.1_Camera_WebServer". Select folder "lib", right click your mouse to select "Upload to /", wait for "lib" to be uploaded to ESP32-WROVER and then double click "picoweb_video.py". + +Camera_WebServer +--------------------------------- + +.. image:: ../_static/imgs/34_Camera_Web_Server/Chapter34_12.png + :align: center + +Before running the program, please modify your router's name and password in the box shown in the illustration above to make sure that your code can compile and work successfully. + +Click "run" to run the code "picoweb_video.py", then you can see the following content in the shell area. + +.. image:: ../_static/imgs/34_Camera_Web_Server/Chapter34_13.png + :align: center + +If your ESP32 has been in the process of connecting to router, but the information above has not been printed out, please re-check whether the router name and password have been entered correctly and press the reset key on ESP32-WROVER to wait for a successful connection prompt. + +Open a web browser, enter the IP address printed by the serial monitor in the address bar, and access it. + +Taking the Google browser as an example, here's what the browser prints out after successful access to ESP32's IP. + +.. image:: ../_static/imgs/34_Camera_Web_Server/Chapter34_14.png + :align: center + +The effect is shown in the image below. + +.. image:: ../_static/imgs/34_Camera_Web_Server/Chapter34_15.png + :align: center + +.. note:: + + If the shell area prompts an error when you click to run the code, please press the rst button on the esp32, wait for the system reset to complete, and then re-run the code. + +The following is the program code. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/30.1_Camera_WebServer/picoweb_video.py + :language: python + :dedent: + +Import picoweb、utime、camera、gc modules. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/30.1_Camera_WebServer/picoweb_video.py + :language: python + :lines: 3-6 + :dedent: + +Before running the code, please modify the WiFi name and password in the code to ensure that the ESP32 can connect to the network. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/30.1_Camera_WebServer/picoweb_video.py + :language: python + :lines: 8-9 + :dedent: + +Define the WiFi connection function, set the ESP32 to STA mode, and let the ESP32 connect to the nearby WiFi. If the connection is successful, the WiFi configuration information of the ESP32 will be printed; if the connection fails, the connection timeout will be printed. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/30.1_Camera_WebServer/picoweb_video.py + :language: python + :lines: 12-26 + :dedent: + +The deinit() is used to disable the configuration of the camera to prevent the previous configuration from interfering with the following configuration. + +The init() is used to configure the camera's pin driver, image data format, resolution and other information. By default, please do not modify this function, otherwise the camera initialization fails and the image cannot be obtained. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/30.1_Camera_WebServer/picoweb_video.py + :language: python + :lines: 31-37 + :dedent: + +This function can set the resolution of the camera individually, you can refer to the notes below to select the appropriate resolution size. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/30.1_Camera_WebServer/picoweb_video.py + :language: python + :lines: 39-45 + :dedent: + +The following functions can modify the image information obtained by the camera. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/30.1_Camera_WebServer/picoweb_video.py + :language: python + :lines: 47-58 + :dedent: + +This is the code for a simple web interface, used here as an example. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/30.1_Camera_WebServer/picoweb_video.py + :language: python + :lines: 61-72 + :dedent: + +Web page response function. When a user visits the webpage "/" built by ESP32, ESP32 calls this function, allowing the user to observe a display interface in the browser. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/30.1_Camera_WebServer/picoweb_video.py + :language: python + :lines: 75-77 + :dedent: + +send_frame() can send the image obtained by ESP32 in web page format. When someone visits the webpage "/video" built by the ESP32, the video(req, resp) function is used to continuously fetch images and send them to the browser. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/30.1_Camera_WebServer/picoweb_video.py + :language: python + :lines: 79-93 + :dedent: + +Create two route decorators and declare their listening strings and corresponding response handlers respectively. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/30.1_Camera_WebServer/picoweb_video.py + :language: python + :lines: 96-100 + :dedent: + +This is the main part of the program. First initialize the ESP32 camera, and then configure WiFi to connect the ESP32 to the network. Call the picoweb library, build a webserver, and run it. + +.. literalinclude:: ../../../freenove_Kit/Python/Python_Codes/30.1_Camera_WebServer/picoweb_video.py + :language: python + :lines: 105-113 + :dedent: + +Reference +---------------------------------------- + ++-------------------+-----------+------------------+-----------+ +| Image resolution | Sharpness | Image resolution | Sharpness | ++===================+===========+==================+===========+ +| FRAMESIZE_96x96 | 96x96 | FRAMESIZE_HVGA | 480x320 | ++-------------------+-----------+------------------+-----------+ +| FRAMESIZE_QQVGA | 160x120 | FRAMESIZE_VGA | 640x480 | ++-------------------+-----------+------------------+-----------+ +| FRAMESIZE_QCIF | 176x144 | FRAMESIZE_SVGA | 800x600 | ++-------------------+-----------+------------------+-----------+ +| FRAMESIZE_HQVGA | 240x176 | FRAMESIZE_XGA | 1024x768 | ++-------------------+-----------+------------------+-----------+ +| FRAMESIZE_240x240 | 240x240 | FRAMESIZE_HD | 1280x720 | ++-------------------+-----------+------------------+-----------+ +| FRAMESIZE_QVGA | 320x240 | FRAMESIZE_SXGA | 1280x1024 | ++-------------------+-----------+------------------+-----------+ +| FRAMESIZE_CIF | 400x296 | FRAMESIZE_UXGA | 1600x1200 | ++-------------------+-----------+------------------+-----------+ + +:red:`We recommend that the resolution not exceed VGA(640x480).` diff --git a/docs/source/fnk0060/codes/Python/End_of_the_Tutorial.rst b/docs/source/fnk0060/codes/Python/End_of_the_Tutorial.rst new file mode 100644 index 0000000..8c406f7 --- /dev/null +++ b/docs/source/fnk0060/codes/Python/End_of_the_Tutorial.rst @@ -0,0 +1,5 @@ +############################################################################## +End of the Tutorial +############################################################################## + +Thank you again for choosing Freenove products. diff --git a/docs/source/fnk0060/codes/Python/Prepare.rst b/docs/source/fnk0060/codes/Python/Prepare.rst new file mode 100644 index 0000000..305a745 --- /dev/null +++ b/docs/source/fnk0060/codes/Python/Prepare.rst @@ -0,0 +1,128 @@ +############################################################################## +Prepare +############################################################################## + +ESP32 is a micro control unit with integrated Wi-Fi launched by Espressif, which features strong properties and integrates rich peripherals. It can be designed and studied as an ordinary Single Chip Micyoco(SCM) chip, or connected to the Internet and used as an Internet of Things device. + +ESP32 can be developed both either with C/C++ language or micropython language. In this tutorial, we use micropython. With Micropython is as easy to learn as Python with little code, making it ideal for beginners. + +Moreover, the code of ESP32 is completely open-source, so beginners can quickly learn how to develop and design IOT smart household products including smart curtains, fans, lamps and clocks. + +We divide each project into four parts, namely Component List, Component Knowledge, Circuit and Code. Component List helps you to prepare material for the experiment more quickly. Component Knowledge allows you to quickly understand new electronic modules or components, while Circuit helps you understand the operating principle of the circuit. And Code allows you to easily master the use of ESP32 and its accessory kit. After finishing all the projects in this tutorial, you can also use these components and modules to make products such as smart household, smart cars and robots to transform your creative ideas into prototypes and new and innovative products. + +In addition, if you have any difficulties or questions with this tutorial or toolkit, feel free to ask for our quick and free technical support through support@freenove.com + +ESP32-WROVER +************************************** + +ESP32-WROVER has launched a total of two antenna packages, PCB on-board antenna and IPEX antenna respectively. The PCB on-board antenna is an integrated antenna in the chip module itself, so it is convenient to carry and design. The IPEX antenna is a metal antenna derived from the integrated antenna of the chip module itself, which is used to enhance the signal of the module. + +.. list-table:: + :width: 80% + :header-rows: 1 + :align: center + + * - PCB on-board antenna + - IPEX antenna + + * - |Preface00| + - |Preface01| + +.. |Preface00| image:: ../_static/imgs/Preface/Preface00.png +.. |Preface01| image:: ../_static/imgs/Preface/Preface01.png + +In this tutorial, the ESP32-WROVER is designed based on the PCB on-board antenna-packaged ESP32-WROVER module. + +ESP32-WROVER + +.. image:: ../_static/imgs/Preface/Preface02.png + :align: center + +The hardware interfaces of ESP32-WROVER are distributed as follows: + +.. image:: ../_static/imgs/Preface/Preface03.png + :align: center + +Compare the left and right images. We've boxed off the resources on the ESP32-WROVER in different colors to facilitate your understanding of the ESP32-WROVER. + +.. list-table:: + :width: 80% + :header-rows: 1 + :align: center + + * - Box color + - Corresponding resources introduction + + * - |Preface04| + - GPIO pin + + * - |Preface05| + - LED indicator + + * - |Preface06| + - Camera interface + + * - |Preface07| + - Reset button, Boot mode selection button + + * - |Preface08| + - USB portX + +.. |Preface04| image:: ../_static/imgs/Preface/Preface04.png +.. |Preface05| image:: ../_static/imgs/Preface/Preface05.png +.. |Preface06| image:: ../_static/imgs/Preface/Preface06.png +.. |Preface07| image:: ../_static/imgs/Preface/Preface07.png +.. |Preface08| image:: ../_static/imgs/Preface/Preface08.png + +.. image:: ../_static/imgs/Preface/Preface09.png + :align: center + +For more information, please visit: https://www.espressif.com/sites/default/files/documentation/esp32-wrover_datasheet_en.pdf + +Extension board of the ESP32-WROVER +********************************************** +And we also design an extension board, so that you can use the ESP32 more easily in accordance with the circuit diagram provided. The followings are their photos. + +The hardware interfaces of ESP32-WROVER are distributed as follows: + +.. image:: ../_static/imgs/Preface/Preface10.png + :align: center + +We've boxed off the resources on the ESP32-WROVER in different colors to facilitate your understanding of the ESP32-WROVER. + +.. list-table:: + :width: 80% + :header-rows: 1 + :align: center + + * - Box color + - Corresponding resources introduction + + * - |Preface11| + - GPIO pin + + * - |Preface12| + - LED indicator + + * - |Preface13| + - GPIO interface of development board + + * - |Preface14| + - power supplied by the extension board + + * - |Preface15| + - External power supply + +.. |Preface11| image:: ../_static/imgs/Preface/Preface11.png +.. |Preface12| image:: ../_static/imgs/Preface/Preface12.png +.. |Preface13| image:: ../_static/imgs/Preface/Preface13.png +.. |Preface14| image:: ../_static/imgs/Preface/Preface14.png +.. |Preface15| image:: ../_static/imgs/Preface/Preface15.png + +In ESP32, GPIO is an interface to control peripheral circuit. For beginners, it is necessary to learn the functions of each GPIO. The following is an introduction to the GPIO resources of the ESP32-WROVER development board. + +In the following projects, we only use USB cable to power ESP32-WROVER by default. + +In the whole tutorial, we don't use T extension to power ESP32-WROVER. So 5V and 3.3V (including EXT 3.3V) on the extension board are provided by ESP32-WROVER. + +We can also use DC jack of extension board to power ESP32-WROVER.In this way, 5v and EXT 3.3v on extension board are provided by external power resource. \ No newline at end of file diff --git a/docs/source/fnk0060/codes/Python/Welcome.rst b/docs/source/fnk0060/codes/Python/Welcome.rst new file mode 100644 index 0000000..927a40d --- /dev/null +++ b/docs/source/fnk0060/codes/Python/Welcome.rst @@ -0,0 +1,100 @@ +############################################################################## +Welcome +############################################################################## + +Thank you for choosing Freenove products! + +How to Start +******************************* + +When reading this, you should have downloaded the ZIP file for this product. + +Unzip it and you will get a folder containing tutorials and related files. Please start with this PDF tutorial. + +:red:`!` Unzip the ZIP file instead of opening the file in the ZIP file directly. + +:red:`!` Do not move, delete or rename files in the folder just unzipped. + +Get Support +************************************* + +Encounter problems? Don't worry! Refer to "TroubleShooting.pdf" or contact us. + +When there are packaging damage, quality problems, questions encountering in use, etc., just send us an email. We will reply to you within one working day and provide a solution. + +support@freenove.com + +Attention +**************************************** + +Pay attention to safety when using and storing this product: + +- This product is not suitable for children under 12 years of age because of small parts and sharp parts. + +- Minors should use this product under the supervision and guidance of adults. + +- This product contains small and sharp parts. Do not swallow, prick and scratch to avoid injury. + +- This product contains conductive parts. Do not hold them to touch power supply and other circuits. + +- To avoid personal injury, do not touch parts rotating or moving while working. + +- The wrong operation may cause overheat. Do not touch and disconnect the power supply immediately. + +- Operate in accordance with the requirements of the tutorial. Fail to do so may damage the parts. + +- Store this product in a dry and dark environment. Keep away from children. + +- Turn off the power of the circuit before leaving. + +About +************************************ + +Freenove provides open source electronic products and services. + +Freenove is committed to helping customers learn programming and electronic knowledge, quickly implement product prototypes, realize their creativity and launch innovative products. Our services include: + +- Kits for learning programming and electronics + +- Kits compatible with Arduino®, Raspberry Pi®, micro:bit®, ESP32®, etc. + +- Kits for robots, smart cars, drones, etc. + +- Components, modules and tools + +- Design and customization + +To learn more about us or get our latest information, please visit our website: + +http://www.freenove.com + +Copyright +*************************************** + +All the files provided in the ZIP file are released under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. You can find a copy of the license in the ZIP file. + +It means you can use these files on your own derived works, in part or completely. But not for commercial use. + +Freenove brand and logo are copyright of Freenove Creative Technology Co., Ltd. and cannot be used without written permission. + +.. image:: ../_static/imgs/Welcome/welcome00.png + :align: center + +This means you can use these resource in your own derived works, in part or completely but NOT for the intent or purpose of commercial use. + +Freenove brand and logo are copyright of Freenove Creative Technology Co., Ltd. and cannot be used without written permission. + +.. image:: ../_static/imgs/Welcome/welcome01.png + :align: center + +Other registered trademarks and their owners appearing in this document: + +Arduino® is a trademark of Arduino LLC (https://www.arduino.cc/). + +Raspberry Pi® is a trademark of Raspberry Pi Foundation (https://www.raspberrypi.org/). + +micro:bit® is a trademark of Micro:bit Educational Foundation (https://www.microbit.org/). + +ESPRESSIF® and ESP32® are trademarks of ESPRESSIF Systems (Shanghai) Co. Ltd + +(https://www.espressif.com/). diff --git a/docs/source/fnk0060/codes/Python/What_s_next(47).rst b/docs/source/fnk0060/codes/Python/What_s_next(47).rst new file mode 100644 index 0000000..ad8b0f7 --- /dev/null +++ b/docs/source/fnk0060/codes/Python/What_s_next(47).rst @@ -0,0 +1,13 @@ +############################################################################## +What's next?(47) +############################################################################## + +Thanks for your reading. This tutorial is all over here. If you find any mistakes, omissions or you have other ideas and questions about contents of this tutorial or the kit and etc., please feel free to contact us: + +support@freenove.com + +We will check and correct it as soon as possible. + +If you want to learn more about Arduino, Raspberry Pi, smart cars, robots and other interesting products in science and technology, please continue to focus on our website. We will continue to launch cost-effective, innovative and exciting products. + +http://www.freenove.com/ diff --git a/docs/source/fnk0060/codes/Python/What_s_next(others).rst b/docs/source/fnk0060/codes/Python/What_s_next(others).rst new file mode 100644 index 0000000..3a6da47 --- /dev/null +++ b/docs/source/fnk0060/codes/Python/What_s_next(others).rst @@ -0,0 +1,17 @@ +############################################################################## +What's next?(others) +############################################################################## + +Thanks for your reading. This tutorial is all over here. If you find any mistakes, omissions or you have other ideas and questions about contents of this tutorial or the kit and etc., please feel free to contact us: + +support@freenove.com + +We will check and correct it as soon as possible. + +If you want learn more about ESP32, you view our ultimate tutorial: + +https://github.com/Freenove/Freenove_Ultimate_Starter_Kit_for_ESP32/archive/master.zip + +If you want to learn more about Arduino, Raspberry Pi, smart cars, robots and other interesting products in science and technology, please continue to focus on our website. We will continue to launch cost-effective, innovative and exciting products. + +http://www.freenove.com/ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_00.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_00.png new file mode 100644 index 0000000..0bba2d0 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_01.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_01.png new file mode 100644 index 0000000..c06d151 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_02.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_02.png new file mode 100644 index 0000000..735a5f6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_03.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_03.png new file mode 100644 index 0000000..8210ae3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_04.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_04.png new file mode 100644 index 0000000..1cba0ba Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_05.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_05.png new file mode 100644 index 0000000..c5ec464 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_06.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_06.png new file mode 100644 index 0000000..c2ef9cb Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_07.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_07.png new file mode 100644 index 0000000..43e772f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_08.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_08.png new file mode 100644 index 0000000..0487387 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_09.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_09.png new file mode 100644 index 0000000..a396d25 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_10.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_10.png new file mode 100644 index 0000000..7a1095e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_11.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_11.png new file mode 100644 index 0000000..12789b1 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_12.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_12.png new file mode 100644 index 0000000..91e1d54 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_13.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_13.png new file mode 100644 index 0000000..7df6892 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_14.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_14.png new file mode 100644 index 0000000..88e19bf Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_15.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_15.png new file mode 100644 index 0000000..cd3a2cd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_16.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_16.png new file mode 100644 index 0000000..9ae574f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_16.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_17.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_17.png new file mode 100644 index 0000000..8156537 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_17.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_18.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_18.png new file mode 100644 index 0000000..e18088b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_18.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_19.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_19.png new file mode 100644 index 0000000..9e676c5 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_19.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_20.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_20.png new file mode 100644 index 0000000..287b024 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_20.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_21.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_21.png new file mode 100644 index 0000000..48d83ae Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_21.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_22.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_22.png new file mode 100644 index 0000000..f4d1781 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_22.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_23.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_23.png new file mode 100644 index 0000000..2543484 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_23.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_24.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_24.png new file mode 100644 index 0000000..07df955 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_24.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_25.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_25.png new file mode 100644 index 0000000..882cb18 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_25.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_26.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_26.png new file mode 100644 index 0000000..5c1e1a4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_26.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_27.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_27.png new file mode 100644 index 0000000..967742d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_27.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_28.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_28.png new file mode 100644 index 0000000..68848ba Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_28.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_29.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_29.png new file mode 100644 index 0000000..e3d2d57 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_29.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_30.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_30.png new file mode 100644 index 0000000..9a01ea3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_30.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_31.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_31.png new file mode 100644 index 0000000..cc69662 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_31.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_32.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_32.png new file mode 100644 index 0000000..79bf7d4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_32.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_33.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_33.png new file mode 100644 index 0000000..61f788c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_33.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_34.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_34.png new file mode 100644 index 0000000..36b994f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_34.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_35.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_35.png new file mode 100644 index 0000000..b2f1857 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_35.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_36.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_36.png new file mode 100644 index 0000000..4cfd7f6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_36.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_37.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_37.png new file mode 100644 index 0000000..7928996 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_37.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_38.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_38.png new file mode 100644 index 0000000..0812d55 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_38.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_39.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_39.png new file mode 100644 index 0000000..b1fdb73 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_39.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_40.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_40.png new file mode 100644 index 0000000..c57ac91 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_40.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_41.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_41.png new file mode 100644 index 0000000..939466b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_41.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_42.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_42.png new file mode 100644 index 0000000..f97d0a4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_42.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_43.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_43.png new file mode 100644 index 0000000..e1d83f3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_43.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_44.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_44.png new file mode 100644 index 0000000..8dbb050 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_44.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_45.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_45.png new file mode 100644 index 0000000..c519ed3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_45.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_46.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_46.png new file mode 100644 index 0000000..1c50f04 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_46.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_47.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_47.png new file mode 100644 index 0000000..8eeee08 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_47.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_48.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_48.png new file mode 100644 index 0000000..189ecbd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_48.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_49.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_49.png new file mode 100644 index 0000000..9583294 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_49.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_50.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_50.png new file mode 100644 index 0000000..ecd04b8 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_50.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_51.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_51.png new file mode 100644 index 0000000..2ecacf0 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_51.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_52.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_52.png new file mode 100644 index 0000000..808a895 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_52.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_53.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_53.png new file mode 100644 index 0000000..e4edd8b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_53.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_54.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_54.png new file mode 100644 index 0000000..2ccf2e0 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_54.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_55.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_55.png new file mode 100644 index 0000000..b8c1bf9 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_55.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_56.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_56.png new file mode 100644 index 0000000..249fb14 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_56.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_57.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_57.png new file mode 100644 index 0000000..a00ccfe Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_57.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_58.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_58.png new file mode 100644 index 0000000..e725ebd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_58.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_59.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_59.png new file mode 100644 index 0000000..663081a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_59.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_60.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_60.png new file mode 100644 index 0000000..8b9e302 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_60.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_61.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_61.png new file mode 100644 index 0000000..8b3162d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_61.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_62.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_62.png new file mode 100644 index 0000000..039b7db Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_62.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_63.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_63.png new file mode 100644 index 0000000..ebc4738 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_63.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_64.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_64.png new file mode 100644 index 0000000..7e48495 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_64.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_65.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_65.png new file mode 100644 index 0000000..5665c54 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_65.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_66.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_66.png new file mode 100644 index 0000000..ebe1b6d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_66.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_67.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_67.png new file mode 100644 index 0000000..1618455 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_67.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_68.png b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_68.png new file mode 100644 index 0000000..52241b1 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/0_LED/Chapter00_68.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_00.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_00.png new file mode 100644 index 0000000..397d3dd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_01.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_01.png new file mode 100644 index 0000000..0394bda Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_02.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_02.png new file mode 100644 index 0000000..11f3a84 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_03.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_03.png new file mode 100644 index 0000000..8fb2e5b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_04.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_04.png new file mode 100644 index 0000000..ecdbc20 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_05.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_05.png new file mode 100644 index 0000000..2489215 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_06.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_06.png new file mode 100644 index 0000000..3c6da65 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_07.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_07.png new file mode 100644 index 0000000..11ec5f7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_08.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_08.png new file mode 100644 index 0000000..c250fc6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_09.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_09.png new file mode 100644 index 0000000..27bae71 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_10.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_10.png new file mode 100644 index 0000000..11fe897 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_11.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_11.png new file mode 100644 index 0000000..e358a47 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_12.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_12.png new file mode 100644 index 0000000..dd9dcfe Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_13.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_13.png new file mode 100644 index 0000000..971c196 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_14.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_14.png new file mode 100644 index 0000000..df80841 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_15.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_15.png new file mode 100644 index 0000000..875f4c2 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_16.png b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_16.png new file mode 100644 index 0000000..fc44f9e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/10_Touch_Sensor/Chapter10_16.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_00.png b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_00.png new file mode 100644 index 0000000..7e77830 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_01.png b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_01.png new file mode 100644 index 0000000..d49ac9e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_02.png b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_02.png new file mode 100644 index 0000000..2032bb7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_03.png b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_03.png new file mode 100644 index 0000000..6d22445 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_04.png b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_04.png new file mode 100644 index 0000000..79b634e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_05.png b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_05.png new file mode 100644 index 0000000..08c5c8f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_06.png b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_06.png new file mode 100644 index 0000000..ea8a938 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_07.png b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_07.png new file mode 100644 index 0000000..7ea02ae Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_08.png b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_08.png new file mode 100644 index 0000000..39f6b5d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_09.png b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_09.png new file mode 100644 index 0000000..48f889f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_10.png b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_10.png new file mode 100644 index 0000000..2741fa9 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_11.png b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_11.png new file mode 100644 index 0000000..384a97e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_12.png b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_12.png new file mode 100644 index 0000000..6ac03fa Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_13.png b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_13.png new file mode 100644 index 0000000..52b231c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/11_Potentiometer_&_LED/Chapter11_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_00.png b/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_00.png new file mode 100644 index 0000000..702ea62 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_01.png b/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_01.png new file mode 100644 index 0000000..c4be1c4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_02.png b/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_02.png new file mode 100644 index 0000000..9b8cdad Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_03.png b/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_03.png new file mode 100644 index 0000000..1a53e66 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_04.png b/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_04.png new file mode 100644 index 0000000..d4156b3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_05.png b/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_05.png new file mode 100644 index 0000000..d227163 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/12_Photoresistor_&_LED/Chapter12_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_00.png b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_00.png new file mode 100644 index 0000000..5062185 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_01.png b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_01.png new file mode 100644 index 0000000..77d84ad Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_02.png b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_02.png new file mode 100644 index 0000000..a2878fc Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_03.png b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_03.png new file mode 100644 index 0000000..daf0a17 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_04.png b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_04.png new file mode 100644 index 0000000..cd32c35 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_05.png b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_05.png new file mode 100644 index 0000000..c6aa109 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_06.png b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_06.png new file mode 100644 index 0000000..503fd30 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_07.png b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_07.png new file mode 100644 index 0000000..77285dc Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_08.png b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_08.png new file mode 100644 index 0000000..fabac11 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_09.png b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_09.png new file mode 100644 index 0000000..35ca49f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_10.png b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_10.png new file mode 100644 index 0000000..15e0909 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/13_Thermistor/Chapter13_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_00.png b/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_00.png new file mode 100644 index 0000000..802fa82 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_01.png b/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_01.png new file mode 100644 index 0000000..7dab99b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_02.png b/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_02.png new file mode 100644 index 0000000..5f587a5 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_03.png b/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_03.png new file mode 100644 index 0000000..f88fade Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_04.png b/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_04.png new file mode 100644 index 0000000..d99db52 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_05.png b/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_05.png new file mode 100644 index 0000000..690ef3f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_06.png b/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_06.png new file mode 100644 index 0000000..db74ff1 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_07.png b/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_07.png new file mode 100644 index 0000000..9f63606 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/14_Joystick/Chapter14_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_00.png b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_00.png new file mode 100644 index 0000000..ef45c64 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_01.png b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_01.png new file mode 100644 index 0000000..ed33aaf Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_02.png b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_02.png new file mode 100644 index 0000000..b4b5e6b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_03.png b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_03.png new file mode 100644 index 0000000..f8d3997 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_04.png b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_04.png new file mode 100644 index 0000000..5959ba3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_05.png b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_05.png new file mode 100644 index 0000000..038bc01 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_06.png b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_06.png new file mode 100644 index 0000000..9f2aa18 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_07.png b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_07.png new file mode 100644 index 0000000..0f8c069 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_08.png b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_08.png new file mode 100644 index 0000000..38ce40c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_09.png b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_09.png new file mode 100644 index 0000000..448b119 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_10.png b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_10.png new file mode 100644 index 0000000..df6e643 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/15_74HC595_&_LED_Bar_Graph/Chapter15_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_00.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_00.png new file mode 100644 index 0000000..7cf4aa6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_01.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_01.png new file mode 100644 index 0000000..1dbbf5e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_02.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_02.png new file mode 100644 index 0000000..6f16541 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_03.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_03.png new file mode 100644 index 0000000..793974b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_04.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_04.png new file mode 100644 index 0000000..c695142 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_05.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_05.png new file mode 100644 index 0000000..5bab552 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_06.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_06.png new file mode 100644 index 0000000..cae6c74 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_07.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_07.png new file mode 100644 index 0000000..e9ffdaa Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_08.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_08.png new file mode 100644 index 0000000..b39518f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_09.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_09.png new file mode 100644 index 0000000..55b9f0c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_10.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_10.png new file mode 100644 index 0000000..5bf807e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_11.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_11.png new file mode 100644 index 0000000..9979878 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_12.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_12.png new file mode 100644 index 0000000..84bff3c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_13.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_13.png new file mode 100644 index 0000000..1cc5f5b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_14.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_14.png new file mode 100644 index 0000000..6b3e37e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_15.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_15.png new file mode 100644 index 0000000..3f5eef9 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_7-Segment_Display/Chapter16_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_00.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_00.png new file mode 100644 index 0000000..e4fd5a3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_01.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_01.png new file mode 100644 index 0000000..20f454b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_02.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_02.png new file mode 100644 index 0000000..ea8d81e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_03.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_03.png new file mode 100644 index 0000000..df4a1fd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_04.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_04.png new file mode 100644 index 0000000..e7bbb46 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_05.png b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_05.png new file mode 100644 index 0000000..f7c51ca Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/16_74HC595_&_LED_Matrix/Chapter16_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_00.png b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_00.png new file mode 100644 index 0000000..bc20c40 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_01.png b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_01.png new file mode 100644 index 0000000..8221206 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_02.png b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_02.png new file mode 100644 index 0000000..c70fd0f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_03.png b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_03.png new file mode 100644 index 0000000..8387a36 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_04.png b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_04.png new file mode 100644 index 0000000..94ac8eb Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_05.png b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_05.png new file mode 100644 index 0000000..00b2af2 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_06.png b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_06.png new file mode 100644 index 0000000..cdd8d87 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_07.png b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_07.png new file mode 100644 index 0000000..a197ea3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_08.png b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_08.png new file mode 100644 index 0000000..5900aa0 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_09.png b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_09.png new file mode 100644 index 0000000..e44ad19 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_10.png b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_10.png new file mode 100644 index 0000000..a766b80 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17.2_Motor_&_Driver/Chapter17_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_00.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_00.png new file mode 100644 index 0000000..35dfc80 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_01.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_01.png new file mode 100644 index 0000000..0dc70a3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_02.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_02.png new file mode 100644 index 0000000..32237c7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_03.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_03.png new file mode 100644 index 0000000..1921403 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_04.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_04.png new file mode 100644 index 0000000..4ab5159 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_05.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_05.png new file mode 100644 index 0000000..a89ef09 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_06.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_06.png new file mode 100644 index 0000000..ef07507 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_07.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_07.png new file mode 100644 index 0000000..f144f20 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_08.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_08.png new file mode 100644 index 0000000..71cf976 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_09.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_09.png new file mode 100644 index 0000000..ac89051 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_10.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_10.png new file mode 100644 index 0000000..34875de Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_11.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_11.png new file mode 100644 index 0000000..0b2f684 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_12.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_12.png new file mode 100644 index 0000000..2576cdd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_13.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_13.png new file mode 100644 index 0000000..5ef0eaf Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_14.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_14.png new file mode 100644 index 0000000..b3cd616 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_15.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_15.png new file mode 100644 index 0000000..b8bde39 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_16.png b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_16.png new file mode 100644 index 0000000..f346ecf Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/17_Relay_&_Motor/Chapter17_16.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_00.png b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_00.png new file mode 100644 index 0000000..24790bc Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_01.png b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_01.png new file mode 100644 index 0000000..22f2aa9 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_02.png b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_02.png new file mode 100644 index 0000000..1c7faa1 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_03.png b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_03.png new file mode 100644 index 0000000..22ce222 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_04.png b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_04.png new file mode 100644 index 0000000..819450d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_05.png b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_05.png new file mode 100644 index 0000000..a5e74c2 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_06.png b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_06.png new file mode 100644 index 0000000..1d4d3a2 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_07.png b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_07.png new file mode 100644 index 0000000..964bc29 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_08.png b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_08.png new file mode 100644 index 0000000..da4461a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_09.png b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_09.png new file mode 100644 index 0000000..350b580 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_10.png b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_10.png new file mode 100644 index 0000000..9f0f12f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_11.png b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_11.png new file mode 100644 index 0000000..67331bf Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_12.png b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_12.png new file mode 100644 index 0000000..7ba988d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_13.png b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_13.png new file mode 100644 index 0000000..6829c00 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_14.png b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_14.png new file mode 100644 index 0000000..a172e89 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_15.png b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_15.png new file mode 100644 index 0000000..d51583e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/18_Servo/Chapter18_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_00.png b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_00.png new file mode 100644 index 0000000..7bc3ea2 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_01.png b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_01.png new file mode 100644 index 0000000..95c3efc Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_02.png b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_02.png new file mode 100644 index 0000000..7fdf8c9 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_03.png b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_03.png new file mode 100644 index 0000000..0e20086 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_04.png b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_04.png new file mode 100644 index 0000000..671bd95 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_05.png b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_05.png new file mode 100644 index 0000000..8cc673f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_06.png b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_06.png new file mode 100644 index 0000000..76064af Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_07.png b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_07.png new file mode 100644 index 0000000..511a3a7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_08.png b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_08.png new file mode 100644 index 0000000..dc2e019 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/19_Stepper_Motor/Chapter19_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_00.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_00.png new file mode 100644 index 0000000..153a499 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_01.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_01.png new file mode 100644 index 0000000..69a3ebc Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_02.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_02.png new file mode 100644 index 0000000..bb6a417 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_03.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_03.png new file mode 100644 index 0000000..20af5c3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_04.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_04.png new file mode 100644 index 0000000..cb6399e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_05.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_05.png new file mode 100644 index 0000000..0fade62 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_06.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_06.png new file mode 100644 index 0000000..9949a88 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_07.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_07.png new file mode 100644 index 0000000..2c4c458 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_08.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_08.png new file mode 100644 index 0000000..00ce231 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_09.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_09.png new file mode 100644 index 0000000..552ae43 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_10.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_10.png new file mode 100644 index 0000000..c94835f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_11.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_11.png new file mode 100644 index 0000000..7141548 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_12.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_12.png new file mode 100644 index 0000000..80f8040 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_13.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_13.png new file mode 100644 index 0000000..1d61b0b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_14.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_14.png new file mode 100644 index 0000000..c94a7fe Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_15.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_15.png new file mode 100644 index 0000000..cfa3719 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_16.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_16.png new file mode 100644 index 0000000..035726e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_16.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_17.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_17.png new file mode 100644 index 0000000..b837e32 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_17.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_18.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_18.png new file mode 100644 index 0000000..53cbe99 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_18.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_19.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_19.png new file mode 100644 index 0000000..db4d011 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_19.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_20.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_20.png new file mode 100644 index 0000000..18bc7e0 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_20.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_21.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_21.png new file mode 100644 index 0000000..13ac884 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_21.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_22.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_22.png new file mode 100644 index 0000000..762f8e3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_22.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_23.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_23.png new file mode 100644 index 0000000..d875a9d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_23.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_24.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_24.png new file mode 100644 index 0000000..b085337 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_24.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_25.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_25.png new file mode 100644 index 0000000..7addd8e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_25.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_26.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_26.png new file mode 100644 index 0000000..61ee880 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_26.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_27.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_27.png new file mode 100644 index 0000000..b46cdcc Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_27.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_28.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_28.png new file mode 100644 index 0000000..f1a4b7a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_28.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_29.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_29.png new file mode 100644 index 0000000..27ab36a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_29.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_30.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_30.png new file mode 100644 index 0000000..f699af3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_30.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_31.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_31.png new file mode 100644 index 0000000..5979e61 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_31.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_32.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_32.png new file mode 100644 index 0000000..74eb762 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_32.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_33.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_33.png new file mode 100644 index 0000000..1095c2a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_33.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_34.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_34.png new file mode 100644 index 0000000..e9fa925 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_34.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_35.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_35.png new file mode 100644 index 0000000..06d0f16 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_35.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_36.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_36.png new file mode 100644 index 0000000..26e0a31 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_36.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_37.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_37.png new file mode 100644 index 0000000..8d0b870 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_37.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_38.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_38.png new file mode 100644 index 0000000..f8fb114 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_38.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_39.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_39.png new file mode 100644 index 0000000..d556875 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_39.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_40.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_40.png new file mode 100644 index 0000000..1c97c6e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_40.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_41.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_41.png new file mode 100644 index 0000000..70bf835 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_41.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_42.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_42.png new file mode 100644 index 0000000..762838e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_42.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_43.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_43.png new file mode 100644 index 0000000..b77fcc4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_43.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_44.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_44.png new file mode 100644 index 0000000..4a354dc Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_44.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_45.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_45.png new file mode 100644 index 0000000..81b3a73 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_45.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_46.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_46.png new file mode 100644 index 0000000..14a849e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_46.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_47.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_47.png new file mode 100644 index 0000000..680af61 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter01_47.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_00.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_00.png new file mode 100644 index 0000000..473a0f7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_01.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_01.png new file mode 100644 index 0000000..0ac8edd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_02.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_02.png new file mode 100644 index 0000000..0bef7ad Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_03.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_03.png new file mode 100644 index 0000000..6313bae Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_04.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_04.png new file mode 100644 index 0000000..032708c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_05.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_05.png new file mode 100644 index 0000000..c5f8561 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_06.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_06.png new file mode 100644 index 0000000..6d89f9d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_07.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_07.png new file mode 100644 index 0000000..646d00b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_08.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_08.png new file mode 100644 index 0000000..ddea03b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_09.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_09.png new file mode 100644 index 0000000..fbe5320 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_10.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_10.png new file mode 100644 index 0000000..cfade95 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_11.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_11.png new file mode 100644 index 0000000..4631465 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_12.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_12.png new file mode 100644 index 0000000..2238503 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_13.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_13.png new file mode 100644 index 0000000..fe388b6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_14.png b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_14.png new file mode 100644 index 0000000..c6dd25c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_LED/Chapter02_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_Oscilloscope/Chapter01_00.png b/docs/source/fnk0060/codes/_static/imgs/1_Oscilloscope/Chapter01_00.png new file mode 100644 index 0000000..2ab881d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_Oscilloscope/Chapter01_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_Oscilloscope/Chapter01_01.png b/docs/source/fnk0060/codes/_static/imgs/1_Oscilloscope/Chapter01_01.png new file mode 100644 index 0000000..4542525 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_Oscilloscope/Chapter01_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_Oscilloscope/Chapter01_02.png b/docs/source/fnk0060/codes/_static/imgs/1_Oscilloscope/Chapter01_02.png new file mode 100644 index 0000000..cf170b3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_Oscilloscope/Chapter01_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_Oscilloscope/Chapter01_03.png b/docs/source/fnk0060/codes/_static/imgs/1_Oscilloscope/Chapter01_03.png new file mode 100644 index 0000000..d6f15e5 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_Oscilloscope/Chapter01_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/1_Oscilloscope/Chapter01_04.png b/docs/source/fnk0060/codes/_static/imgs/1_Oscilloscope/Chapter01_04.png new file mode 100644 index 0000000..797b908 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/1_Oscilloscope/Chapter01_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_00.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_00.png new file mode 100644 index 0000000..e732e76 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_01.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_01.png new file mode 100644 index 0000000..203695c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_02.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_02.png new file mode 100644 index 0000000..ff99178 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_03.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_03.png new file mode 100644 index 0000000..265e1cb Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_04.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_04.png new file mode 100644 index 0000000..240ffec Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_05.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_05.png new file mode 100644 index 0000000..1000fb4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_06.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_06.png new file mode 100644 index 0000000..f1ddb54 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_07.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_07.png new file mode 100644 index 0000000..301aebf Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_08.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_08.png new file mode 100644 index 0000000..70c8d46 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_09.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_09.png new file mode 100644 index 0000000..af07a4f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_10.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_10.png new file mode 100644 index 0000000..dfdb998 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_11.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_11.png new file mode 100644 index 0000000..bcc8582 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_12.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_12.png new file mode 100644 index 0000000..e772a30 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_13.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_13.png new file mode 100644 index 0000000..4ca408d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_14.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_14.png new file mode 100644 index 0000000..bd7defb Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_15.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_15.png new file mode 100644 index 0000000..5186237 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_16.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_16.png new file mode 100644 index 0000000..60cd503 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_16.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_17.png b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_17.png new file mode 100644 index 0000000..76101a5 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/20_LCD1602/Chapter20_17.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_00.png b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_00.png new file mode 100644 index 0000000..87c1e76 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_01.png b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_01.png new file mode 100644 index 0000000..e98c93c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_02.png b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_02.png new file mode 100644 index 0000000..afc2eb1 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_03.png b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_03.png new file mode 100644 index 0000000..ba7072a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_04.png b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_04.png new file mode 100644 index 0000000..4bda7c9 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_05.png b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_05.png new file mode 100644 index 0000000..63d59cf Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_06.png b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_06.png new file mode 100644 index 0000000..dec1a0a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_07.png b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_07.png new file mode 100644 index 0000000..012bb8d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_08.png b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_08.png new file mode 100644 index 0000000..19b3761 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_09.png b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_09.png new file mode 100644 index 0000000..7ae2f3b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_10.png b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_10.png new file mode 100644 index 0000000..9da62d8 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_11.png b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_11.png new file mode 100644 index 0000000..bcacbac Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_12.png b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_12.png new file mode 100644 index 0000000..5860107 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_13.png b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_13.png new file mode 100644 index 0000000..8fc6f31 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_14.png b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_14.png new file mode 100644 index 0000000..541e666 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_15.png b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_15.png new file mode 100644 index 0000000..34e9769 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/21_Ultrasonic_Ranging/Chapter21_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_00.png b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_00.png new file mode 100644 index 0000000..204fb22 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_01.png b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_01.png new file mode 100644 index 0000000..54263db Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_02.png b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_02.png new file mode 100644 index 0000000..3287d16 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_03.png b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_03.png new file mode 100644 index 0000000..f8d58c4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_04.png b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_04.png new file mode 100644 index 0000000..6bfaac2 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_05.png b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_05.png new file mode 100644 index 0000000..049944d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_06.png b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_06.png new file mode 100644 index 0000000..d279a6b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_07.png b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_07.png new file mode 100644 index 0000000..73f90f6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_08.png b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_08.png new file mode 100644 index 0000000..0bc28db Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_09.png b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_09.png new file mode 100644 index 0000000..d0a8f01 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_10.png b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_10.png new file mode 100644 index 0000000..3804b10 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_11.png b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_11.png new file mode 100644 index 0000000..008b98d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_12.png b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_12.png new file mode 100644 index 0000000..e187fbd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_13.png b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_13.png new file mode 100644 index 0000000..4df4f2d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_14.png b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_14.png new file mode 100644 index 0000000..1f3ac0d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/22_Matrix_Keypad/Chapter22_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_00.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_00.png new file mode 100644 index 0000000..2ced68b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_01.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_01.png new file mode 100644 index 0000000..b74f0c8 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_02.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_02.png new file mode 100644 index 0000000..2bb0595 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_03.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_03.png new file mode 100644 index 0000000..41aeab1 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_04.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_04.png new file mode 100644 index 0000000..032405a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_05.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_05.png new file mode 100644 index 0000000..be488e4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_06.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_06.png new file mode 100644 index 0000000..581db4d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_07.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_07.png new file mode 100644 index 0000000..89b25af Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_08.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_08.png new file mode 100644 index 0000000..0fb3e46 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_09.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_09.png new file mode 100644 index 0000000..4deb87a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_10.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_10.png new file mode 100644 index 0000000..940db13 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_11.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_11.png new file mode 100644 index 0000000..0915293 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_12.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_12.png new file mode 100644 index 0000000..11a0ee4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_13.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_13.png new file mode 100644 index 0000000..4e7ab6b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_14.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_14.png new file mode 100644 index 0000000..1ee4913 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_15.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_15.png new file mode 100644 index 0000000..b420481 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_16.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_16.png new file mode 100644 index 0000000..9c55c4b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_16.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_17.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_17.png new file mode 100644 index 0000000..0221436 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_17.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_18.png b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_18.png new file mode 100644 index 0000000..a0a1f32 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/23_Infrared_Remote/Chapter23_18.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_00.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_00.png new file mode 100644 index 0000000..d7da673 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_01.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_01.png new file mode 100644 index 0000000..a2bd7a6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_02.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_02.png new file mode 100644 index 0000000..64de67e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_03.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_03.png new file mode 100644 index 0000000..b8fac97 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_04.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_04.png new file mode 100644 index 0000000..8f60a27 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_05.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_05.png new file mode 100644 index 0000000..8e7b6fe Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_06.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_06.png new file mode 100644 index 0000000..01fb8cc Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_07.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_07.png new file mode 100644 index 0000000..2c9f3cb Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_08.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_08.png new file mode 100644 index 0000000..53ddba7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_09.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_09.png new file mode 100644 index 0000000..d9d6616 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_10.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_10.png new file mode 100644 index 0000000..7ed1e58 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_11.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_11.png new file mode 100644 index 0000000..20aff00 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_12.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_12.png new file mode 100644 index 0000000..9a37dec Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_13.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_13.png new file mode 100644 index 0000000..03a4a60 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_14.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_14.png new file mode 100644 index 0000000..79c8053 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_15.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_15.png new file mode 100644 index 0000000..fda7f87 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_16.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_16.png new file mode 100644 index 0000000..9192f62 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_16.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_17.png b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_17.png new file mode 100644 index 0000000..ac69d57 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/24_Hygrothermograph_DHT11/Chapter24_17.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_00.png b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_00.png new file mode 100644 index 0000000..a6f9ba4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_01.png b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_01.png new file mode 100644 index 0000000..364f518 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_02.png b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_02.png new file mode 100644 index 0000000..ae2ea2c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_03.png b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_03.png new file mode 100644 index 0000000..9f43ad6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_04.png b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_04.png new file mode 100644 index 0000000..9a83195 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_05.png b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_05.png new file mode 100644 index 0000000..4d6043e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_06.png b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_06.png new file mode 100644 index 0000000..db0ecc4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_07.png b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_07.png new file mode 100644 index 0000000..2210928 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_08.png b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_08.png new file mode 100644 index 0000000..5217f5e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/25_Infrared_Motion_Sensor/Chapter25_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_00.png b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_00.png new file mode 100644 index 0000000..0761214 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_01.png b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_01.png new file mode 100644 index 0000000..b8b16f6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_02.png b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_02.png new file mode 100644 index 0000000..21ac33b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_03.png b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_03.png new file mode 100644 index 0000000..26f8175 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_04.png b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_04.png new file mode 100644 index 0000000..33e0d88 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_05.png b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_05.png new file mode 100644 index 0000000..4cff055 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_06.png b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_06.png new file mode 100644 index 0000000..467acdd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_07.png b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_07.png new file mode 100644 index 0000000..98aa236 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_08.png b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_08.png new file mode 100644 index 0000000..fb84af5 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_09.png b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_09.png new file mode 100644 index 0000000..c85cdad Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/26_Attitude_Sensor_MPU6050/Chapter26_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_00.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_00.png new file mode 100644 index 0000000..f3e2629 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_01.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_01.png new file mode 100644 index 0000000..eb33696 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_02.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_02.png new file mode 100644 index 0000000..c125ad8 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_03.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_03.png new file mode 100644 index 0000000..04642c6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_04.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_04.png new file mode 100644 index 0000000..6e55bac Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_05.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_05.png new file mode 100644 index 0000000..91d01c4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_06.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_06.png new file mode 100644 index 0000000..94ca653 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_07.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_07.png new file mode 100644 index 0000000..8bd0424 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_08.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_08.png new file mode 100644 index 0000000..6ab2329 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_09.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_09.png new file mode 100644 index 0000000..0871e66 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_10.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_10.png new file mode 100644 index 0000000..b57b00b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_11.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_11.png new file mode 100644 index 0000000..0716fcb Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_12.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_12.png new file mode 100644 index 0000000..af71e4c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_13.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_13.png new file mode 100644 index 0000000..20c2a09 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_14.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_14.png new file mode 100644 index 0000000..879de7c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_15.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_15.png new file mode 100644 index 0000000..7e17b7a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_16.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_16.png new file mode 100644 index 0000000..3728c24 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_16.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_17.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_17.png new file mode 100644 index 0000000..64e28d4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_17.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_18.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_18.png new file mode 100644 index 0000000..fff2857 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_18.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_19.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_19.png new file mode 100644 index 0000000..767557c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_19.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_20.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_20.png new file mode 100644 index 0000000..c10c8c7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_20.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_21.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_21.png new file mode 100644 index 0000000..10ea389 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_21.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_22.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_22.png new file mode 100644 index 0000000..e377d3c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_22.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_23.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_23.png new file mode 100644 index 0000000..4307c10 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_23.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_24.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_24.png new file mode 100644 index 0000000..70258b0 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_24.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_25.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_25.png new file mode 100644 index 0000000..0fd3c1f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_25.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_26.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_26.png new file mode 100644 index 0000000..5656970 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_26.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_27.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_27.png new file mode 100644 index 0000000..de5e895 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_27.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_28.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_28.png new file mode 100644 index 0000000..b3bb2cd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_28.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_29.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_29.png new file mode 100644 index 0000000..131f3bc Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_29.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_30.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_30.png new file mode 100644 index 0000000..3c6f38d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_30.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_31.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_31.png new file mode 100644 index 0000000..688f45d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_31.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_32.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_32.png new file mode 100644 index 0000000..06104dd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_32.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_33.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_33.png new file mode 100644 index 0000000..b97b9d5 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_33.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_34.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_34.png new file mode 100644 index 0000000..281256b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_34.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_35.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_35.png new file mode 100644 index 0000000..b0376ef Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_35.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_36.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_36.png new file mode 100644 index 0000000..4e8f036 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_36.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_37.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_37.png new file mode 100644 index 0000000..d240c00 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_37.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_38.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_38.png new file mode 100644 index 0000000..213356b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_38.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_39.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_39.png new file mode 100644 index 0000000..5f0215c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_39.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_40.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_40.png new file mode 100644 index 0000000..23127f1 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_40.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_41.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_41.png new file mode 100644 index 0000000..4def20e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_41.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_42.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_42.png new file mode 100644 index 0000000..fc14ba3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_42.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_43.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_43.png new file mode 100644 index 0000000..a154934 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_43.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_44.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_44.png new file mode 100644 index 0000000..9279cf3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_44.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_45.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_45.png new file mode 100644 index 0000000..bac68a5 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_45.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_46.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_46.png new file mode 100644 index 0000000..a66cda7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_46.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_47.png b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_47.png new file mode 100644 index 0000000..429d40f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/27_Bluetooth/Chapter27_47.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_00.png b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_00.png new file mode 100644 index 0000000..dc30a30 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_01.png b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_01.png new file mode 100644 index 0000000..2132088 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_02.png b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_02.png new file mode 100644 index 0000000..68c8f1c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_03.png b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_03.png new file mode 100644 index 0000000..abb4016 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_04.png b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_04.png new file mode 100644 index 0000000..308e964 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_05.png b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_05.png new file mode 100644 index 0000000..feb69e9 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_06.png b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_06.png new file mode 100644 index 0000000..8909aef Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_07.png b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_07.png new file mode 100644 index 0000000..71c9e6c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_08.png b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_08.png new file mode 100644 index 0000000..4d462ed Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/28_Bluetooth_Media_by_DAC/Chapter28_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_00.png b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_00.png new file mode 100644 index 0000000..4c1e161 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_01.png b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_01.png new file mode 100644 index 0000000..f0a69f2 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_02.png b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_02.png new file mode 100644 index 0000000..ae10d0e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_03.png b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_03.png new file mode 100644 index 0000000..c7a2a5a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_04.png b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_04.png new file mode 100644 index 0000000..30c6a70 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_05.png b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_05.png new file mode 100644 index 0000000..65d9b8c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_06.png b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_06.png new file mode 100644 index 0000000..7d5324b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_07.png b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_07.png new file mode 100644 index 0000000..a964526 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_08.png b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_08.png new file mode 100644 index 0000000..5062f9c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_09.png b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_09.png new file mode 100644 index 0000000..19da584 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_10.png b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_10.png new file mode 100644 index 0000000..4d315a7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/29_Bluetooth_Media_by_Audio_Module/Chapter29_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_00.png b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_00.png new file mode 100644 index 0000000..10e20c6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_01.png b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_01.png new file mode 100644 index 0000000..905f1ae Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_02.png b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_02.png new file mode 100644 index 0000000..a6b50fb Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_03.png b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_03.png new file mode 100644 index 0000000..620655f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_04.png b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_04.png new file mode 100644 index 0000000..e85b8af Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_05.png b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_05.png new file mode 100644 index 0000000..3a46a3d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_06.png b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_06.png new file mode 100644 index 0000000..4a88991 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_07.png b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_07.png new file mode 100644 index 0000000..ba4ddd7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_08.png b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_08.png new file mode 100644 index 0000000..8879f09 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_09.png b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_09.png new file mode 100644 index 0000000..7b02d4c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_10.png b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_10.png new file mode 100644 index 0000000..4429f33 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_12.png b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_12.png new file mode 100644 index 0000000..2238503 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_13.png b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_13.png new file mode 100644 index 0000000..fe388b6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Button_&_LED/Chapter02_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Control_2D_and_3D_Figures/Chapter02_00.png b/docs/source/fnk0060/codes/_static/imgs/2_Control_2D_and_3D_Figures/Chapter02_00.png new file mode 100644 index 0000000..6bb343f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Control_2D_and_3D_Figures/Chapter02_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Control_2D_and_3D_Figures/Chapter02_01.png b/docs/source/fnk0060/codes/_static/imgs/2_Control_2D_and_3D_Figures/Chapter02_01.png new file mode 100644 index 0000000..7347b36 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Control_2D_and_3D_Figures/Chapter02_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Control_2D_and_3D_Figures/Chapter02_02.png b/docs/source/fnk0060/codes/_static/imgs/2_Control_2D_and_3D_Figures/Chapter02_02.png new file mode 100644 index 0000000..98d4f03 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Control_2D_and_3D_Figures/Chapter02_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Control_2D_and_3D_Figures/Chapter02_03.png b/docs/source/fnk0060/codes/_static/imgs/2_Control_2D_and_3D_Figures/Chapter02_03.png new file mode 100644 index 0000000..0abf4db Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Control_2D_and_3D_Figures/Chapter02_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/2_Control_2D_and_3D_Figures/Chapter02_04.png b/docs/source/fnk0060/codes/_static/imgs/2_Control_2D_and_3D_Figures/Chapter02_04.png new file mode 100644 index 0000000..68f8964 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/2_Control_2D_and_3D_Figures/Chapter02_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_00.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_00.png new file mode 100644 index 0000000..8d3c904 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_01.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_01.png new file mode 100644 index 0000000..10953c3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_02.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_02.png new file mode 100644 index 0000000..c328926 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_03.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_03.png new file mode 100644 index 0000000..41b73fc Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_04.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_04.png new file mode 100644 index 0000000..cdc4f1d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_05.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_05.png new file mode 100644 index 0000000..40f377a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_06.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_06.png new file mode 100644 index 0000000..9f1ef9f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_07.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_07.png new file mode 100644 index 0000000..0fe90ad Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_08.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_08.png new file mode 100644 index 0000000..c0387cb Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_09.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_09.png new file mode 100644 index 0000000..5e917c9 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_10.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_10.png new file mode 100644 index 0000000..d7752d7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_11.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_11.png new file mode 100644 index 0000000..c547b51 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_12.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_12.png new file mode 100644 index 0000000..fcec798 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_13.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_13.png new file mode 100644 index 0000000..5421c9e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_14.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_14.png new file mode 100644 index 0000000..5e829d4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_15.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_15.png new file mode 100644 index 0000000..e41b79a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_16.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_16.png new file mode 100644 index 0000000..7ff82e4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_16.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_17.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_17.png new file mode 100644 index 0000000..1a0296a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_17.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_18.png b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_18.png new file mode 100644 index 0000000..96426db Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/30_Read_and_Write_the_Sdcard/Chapter30_18.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_00.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_00.png new file mode 100644 index 0000000..7733c82 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_01.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_01.png new file mode 100644 index 0000000..d1056e0 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_02.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_02.png new file mode 100644 index 0000000..2faee12 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_03.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_03.png new file mode 100644 index 0000000..80bad8c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_04.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_04.png new file mode 100644 index 0000000..e9539fc Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_05.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_05.png new file mode 100644 index 0000000..848bc00 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_06.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_06.png new file mode 100644 index 0000000..d8606de Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_07.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_07.png new file mode 100644 index 0000000..03de925 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_08.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_08.png new file mode 100644 index 0000000..2367c74 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_09.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_09.png new file mode 100644 index 0000000..8d721a1 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_10.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_10.png new file mode 100644 index 0000000..08da8f4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_11.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_11.png new file mode 100644 index 0000000..3985089 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_12.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_12.png new file mode 100644 index 0000000..bdfe8ea Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_13.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_13.png new file mode 100644 index 0000000..40af7a5 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_14.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_14.png new file mode 100644 index 0000000..93fe0f5 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_15.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_15.png new file mode 100644 index 0000000..819d439 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_16.png b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_16.png new file mode 100644 index 0000000..0c8c79a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/31_Play_SD_card_music/Chapter31_16.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_00.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_00.png new file mode 100644 index 0000000..775b8de Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_01.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_01.png new file mode 100644 index 0000000..a6e88ae Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_02.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_02.png new file mode 100644 index 0000000..1779fc1 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_03.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_03.png new file mode 100644 index 0000000..c86308f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_04.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_04.png new file mode 100644 index 0000000..9f7dd16 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_05.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_05.png new file mode 100644 index 0000000..307515a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_06.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_06.png new file mode 100644 index 0000000..69d27c0 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_07.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_07.png new file mode 100644 index 0000000..d6cb7cd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_08.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_08.png new file mode 100644 index 0000000..660f168 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_09.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_09.png new file mode 100644 index 0000000..15cee00 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_10.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_10.png new file mode 100644 index 0000000..a52c626 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_11.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_11.png new file mode 100644 index 0000000..070ad94 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_12.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_12.png new file mode 100644 index 0000000..dcdd97a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_13.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_13.png new file mode 100644 index 0000000..6c08376 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_14.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_14.png new file mode 100644 index 0000000..f752365 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_15.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_15.png new file mode 100644 index 0000000..f1fa96d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_16.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_16.png new file mode 100644 index 0000000..cb30a98 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_16.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_17.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_17.png new file mode 100644 index 0000000..4adb100 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_17.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_18.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_18.png new file mode 100644 index 0000000..19be2b4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_18.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_19.png b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_19.png new file mode 100644 index 0000000..b6031de Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/32_WiFi_Working_Modes/Chapter32_19.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_00.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_00.png new file mode 100644 index 0000000..2f0ecee Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_01.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_01.png new file mode 100644 index 0000000..7a57c55 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_02.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_02.png new file mode 100644 index 0000000..356c203 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_03.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_03.png new file mode 100644 index 0000000..f12d60d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_04.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_04.png new file mode 100644 index 0000000..6e09ae7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_05.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_05.png new file mode 100644 index 0000000..65123f7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_06.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_06.png new file mode 100644 index 0000000..95eb37e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_07.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_07.png new file mode 100644 index 0000000..687124b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_08.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_08.png new file mode 100644 index 0000000..39cfdf3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_09.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_09.png new file mode 100644 index 0000000..f74d1bd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_10.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_10.png new file mode 100644 index 0000000..3b6599d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_11.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_11.png new file mode 100644 index 0000000..ec31062 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_12.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_12.png new file mode 100644 index 0000000..269c654 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_13.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_13.png new file mode 100644 index 0000000..b65d343 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_14.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_14.png new file mode 100644 index 0000000..9b80abd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_15.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_15.png new file mode 100644 index 0000000..dc250ca Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_16.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_16.png new file mode 100644 index 0000000..897e4d5 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_16.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_17.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_17.png new file mode 100644 index 0000000..935d734 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_17.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_18.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_18.png new file mode 100644 index 0000000..edcea4e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_18.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_19.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_19.png new file mode 100644 index 0000000..a251f64 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_19.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_20.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_20.png new file mode 100644 index 0000000..e3d44c0 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_20.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_21.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_21.png new file mode 100644 index 0000000..607c24d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_21.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_22.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_22.png new file mode 100644 index 0000000..7e0f18a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_22.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_23.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_23.png new file mode 100644 index 0000000..7c782fc Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_23.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_24.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_24.png new file mode 100644 index 0000000..5772811 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_24.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_25.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_25.png new file mode 100644 index 0000000..7840815 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_25.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_26.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_26.png new file mode 100644 index 0000000..43e0db6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_26.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_27.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_27.png new file mode 100644 index 0000000..d407068 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_27.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_28.png b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_28.png new file mode 100644 index 0000000..801a227 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/33_TCP_IP/Chapter33_28.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_00.png b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_00.png new file mode 100644 index 0000000..38d1a91 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_01.png b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_01.png new file mode 100644 index 0000000..1bc77d8 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_02.png b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_02.png new file mode 100644 index 0000000..b819ff8 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_03.png b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_03.png new file mode 100644 index 0000000..8609013 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_04.png b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_04.png new file mode 100644 index 0000000..911ee29 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_05.png b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_05.png new file mode 100644 index 0000000..941d925 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_06.png b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_06.png new file mode 100644 index 0000000..d833a0e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_07.png b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_07.png new file mode 100644 index 0000000..e0f1805 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_08.png b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_08.png new file mode 100644 index 0000000..38acf37 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_09.png b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_09.png new file mode 100644 index 0000000..4a103bc Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_10.png b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_10.png new file mode 100644 index 0000000..fe9511f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_11.png b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_11.png new file mode 100644 index 0000000..6fd51e2 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_12.png b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_12.png new file mode 100644 index 0000000..39056b6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_13.png b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_13.png new file mode 100644 index 0000000..5e3e029 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_14.png b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_14.png new file mode 100644 index 0000000..1f967e2 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_15.png b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_15.png new file mode 100644 index 0000000..aa0b816 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/34_Camera_Web_Server/Chapter34_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_00.png b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_00.png new file mode 100644 index 0000000..2295ca2 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_01.png b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_01.png new file mode 100644 index 0000000..7841679 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_02.png b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_02.png new file mode 100644 index 0000000..1dd95df Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_03.png b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_03.png new file mode 100644 index 0000000..7d8b9d2 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_04.png b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_04.png new file mode 100644 index 0000000..a8ef751 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_05.png b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_05.png new file mode 100644 index 0000000..0cf457f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_06.png b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_06.png new file mode 100644 index 0000000..263538e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_07.png b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_07.png new file mode 100644 index 0000000..0a6da65 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_08.png b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_08.png new file mode 100644 index 0000000..9a710e9 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_09.png b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_09.png new file mode 100644 index 0000000..7077984 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_10.png b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_10.png new file mode 100644 index 0000000..0717c2e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_11.png b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_11.png new file mode 100644 index 0000000..c87ab63 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_12.png b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_12.png new file mode 100644 index 0000000..cada5ff Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/35_Camera_Tcp_Server/Chapter35_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_00.png b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_00.png new file mode 100644 index 0000000..83fb465 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_01.png b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_01.png new file mode 100644 index 0000000..a0b6f01 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_02.png b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_02.png new file mode 100644 index 0000000..36edb74 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_03.png b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_03.png new file mode 100644 index 0000000..817b795 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_04.png b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_04.png new file mode 100644 index 0000000..82e3d96 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_05.png b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_05.png new file mode 100644 index 0000000..51d102e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_06.png b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_06.png new file mode 100644 index 0000000..d6a3a80 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_07.png b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_07.png new file mode 100644 index 0000000..b017bb5 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_08.png b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_08.png new file mode 100644 index 0000000..53a4077 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_09.png b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_09.png new file mode 100644 index 0000000..0f99244 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_10.png b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_10.png new file mode 100644 index 0000000..d1ecfad Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_11.png b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_11.png new file mode 100644 index 0000000..3e2b18e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_12.png b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_12.png new file mode 100644 index 0000000..58cd79a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_13.png b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_13.png new file mode 100644 index 0000000..411e2af Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_14.png b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_14.png new file mode 100644 index 0000000..9d02196 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/36_Soldering_Circuit_Board/Chapter36_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_00.png b/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_00.png new file mode 100644 index 0000000..3964596 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_01.png b/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_01.png new file mode 100644 index 0000000..b2d9355 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_02.png b/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_02.png new file mode 100644 index 0000000..c628d2f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_03.png b/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_03.png new file mode 100644 index 0000000..4fe51c2 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_04.png b/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_04.png new file mode 100644 index 0000000..a6c251e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_05.png b/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_05.png new file mode 100644 index 0000000..adfe592 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_06.png b/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_06.png new file mode 100644 index 0000000..ebed98a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_07.png b/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_07.png new file mode 100644 index 0000000..dc65a08 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_LED_Bar/Chapter03_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_00.png b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_00.png new file mode 100644 index 0000000..961209e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_01.png b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_01.png new file mode 100644 index 0000000..189e595 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_02.png b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_02.png new file mode 100644 index 0000000..84811f6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_03.png b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_03.png new file mode 100644 index 0000000..adb81c6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_04.png b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_04.png new file mode 100644 index 0000000..9452c0e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_05.png b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_05.png new file mode 100644 index 0000000..36a8400 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_06.png b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_06.png new file mode 100644 index 0000000..54064f6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_07.png b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_07.png new file mode 100644 index 0000000..6604f35 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_08.png b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_08.png new file mode 100644 index 0000000..a9f81cf Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/3_Snake_Game/Chapter03_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_00.png b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_00.png new file mode 100644 index 0000000..680c9e6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_01.png b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_01.png new file mode 100644 index 0000000..9c48040 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_02.png b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_02.png new file mode 100644 index 0000000..649f60e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_03.png b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_03.png new file mode 100644 index 0000000..2184fde Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_04.png b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_04.png new file mode 100644 index 0000000..9564aab Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_05.png b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_05.png new file mode 100644 index 0000000..93e4c96 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_06.png b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_06.png new file mode 100644 index 0000000..f425cac Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_07.png b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_07.png new file mode 100644 index 0000000..802e652 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_08.png b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_08.png new file mode 100644 index 0000000..6418c87 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_09.png b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_09.png new file mode 100644 index 0000000..9093092 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_10.png b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_10.png new file mode 100644 index 0000000..178b786 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_11.png b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_11.png new file mode 100644 index 0000000..f8a9c4e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_12.png b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_12.png new file mode 100644 index 0000000..f5496e6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_13.png b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_13.png new file mode 100644 index 0000000..7a44fcd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_14.png b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_14.png new file mode 100644 index 0000000..73fa6b0 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_15.png b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_15.png new file mode 100644 index 0000000..5f9621e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Analog_&_PWM/Chapter04_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_00.png b/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_00.png new file mode 100644 index 0000000..8047c0f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_01.png b/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_01.png new file mode 100644 index 0000000..065324e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_02.png b/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_02.png new file mode 100644 index 0000000..565ee64 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_03.png b/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_03.png new file mode 100644 index 0000000..8892055 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_04.png b/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_04.png new file mode 100644 index 0000000..9117445 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_05.png b/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_05.png new file mode 100644 index 0000000..3dce7b9 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/4_Pick_Apples/Chapter04_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_00.png b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_00.png new file mode 100644 index 0000000..a8150f8 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_01.png b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_01.png new file mode 100644 index 0000000..2a46ad9 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_02.png b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_02.png new file mode 100644 index 0000000..19f464e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_03.png b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_03.png new file mode 100644 index 0000000..0a4eb65 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_04.png b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_04.png new file mode 100644 index 0000000..4140470 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_05.png b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_05.png new file mode 100644 index 0000000..7ce34a7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_06.png b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_06.png new file mode 100644 index 0000000..7445edb Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_07.png b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_07.png new file mode 100644 index 0000000..5ccbfb9 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_08.png b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_08.png new file mode 100644 index 0000000..8612c9d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_Pong_Game/Chapter05_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_00.png b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_00.png new file mode 100644 index 0000000..7436b79 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_01.png b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_01.png new file mode 100644 index 0000000..2ab9253 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_02.png b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_02.png new file mode 100644 index 0000000..3df0614 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_03.png b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_03.png new file mode 100644 index 0000000..9371b4f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_04.png b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_04.png new file mode 100644 index 0000000..6817e48 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_05.png b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_05.png new file mode 100644 index 0000000..454b9b0 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_06.png b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_06.png new file mode 100644 index 0000000..80006d6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_07.png b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_07.png new file mode 100644 index 0000000..cce62e3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_08.png b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_08.png new file mode 100644 index 0000000..a249888 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_09.png b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_09.png new file mode 100644 index 0000000..884f2d2 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/5_RGB_LED/Chapter05_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_00.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_00.png new file mode 100644 index 0000000..f35330d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_01.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_01.png new file mode 100644 index 0000000..fa0656e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_02.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_02.png new file mode 100644 index 0000000..99ae2f6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_03.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_03.png new file mode 100644 index 0000000..c063f4b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_04.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_04.png new file mode 100644 index 0000000..e01cadb Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_05.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_05.png new file mode 100644 index 0000000..2bf0467 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_06.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_06.png new file mode 100644 index 0000000..f0a79f3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_07.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_07.png new file mode 100644 index 0000000..6659e2e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_08.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_08.png new file mode 100644 index 0000000..ef1124c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_09.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_09.png new file mode 100644 index 0000000..a6633f5 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_10.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_10.png new file mode 100644 index 0000000..a6fc614 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_11.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_11.png new file mode 100644 index 0000000..8485096 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_12.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_12.png new file mode 100644 index 0000000..7806879 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_13.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_13.png new file mode 100644 index 0000000..ffe8879 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_14.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_14.png new file mode 100644 index 0000000..06816b4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_15.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_15.png new file mode 100644 index 0000000..15bdbca Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_16.png b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_16.png new file mode 100644 index 0000000..8cadbce Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_LEDPixel/Chapter06_16.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_Tetris/Chapter06_00.png b/docs/source/fnk0060/codes/_static/imgs/6_Tetris/Chapter06_00.png new file mode 100644 index 0000000..6bc0067 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_Tetris/Chapter06_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_Tetris/Chapter06_01.png b/docs/source/fnk0060/codes/_static/imgs/6_Tetris/Chapter06_01.png new file mode 100644 index 0000000..7cf8385 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_Tetris/Chapter06_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_Tetris/Chapter06_02.png b/docs/source/fnk0060/codes/_static/imgs/6_Tetris/Chapter06_02.png new file mode 100644 index 0000000..c1d08d6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_Tetris/Chapter06_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_Tetris/Chapter06_03.png b/docs/source/fnk0060/codes/_static/imgs/6_Tetris/Chapter06_03.png new file mode 100644 index 0000000..7dce23b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_Tetris/Chapter06_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/6_Tetris/Chapter06_04.png b/docs/source/fnk0060/codes/_static/imgs/6_Tetris/Chapter06_04.png new file mode 100644 index 0000000..e4b36fa Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/6_Tetris/Chapter06_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_00.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_00.png new file mode 100644 index 0000000..9f43af1 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_01.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_01.png new file mode 100644 index 0000000..912a518 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_02.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_02.png new file mode 100644 index 0000000..cba8500 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_03.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_03.png new file mode 100644 index 0000000..59e1691 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_04.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_04.png new file mode 100644 index 0000000..d7dcadd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_05.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_05.png new file mode 100644 index 0000000..2390b33 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_06.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_06.png new file mode 100644 index 0000000..0c1a60a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_07.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_07.png new file mode 100644 index 0000000..cc03e6f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_08.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_08.png new file mode 100644 index 0000000..ff26d0a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_09.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_09.png new file mode 100644 index 0000000..4e49e46 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_10.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_10.png new file mode 100644 index 0000000..962213e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_11.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_11.png new file mode 100644 index 0000000..c9f4ed3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_12.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_12.png new file mode 100644 index 0000000..3f9395f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_13.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_13.png new file mode 100644 index 0000000..892ef33 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_14.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_14.png new file mode 100644 index 0000000..c4c163c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_15.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_15.png new file mode 100644 index 0000000..5ef6ca9 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_16.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_16.png new file mode 100644 index 0000000..01e39de Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_16.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_17.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_17.png new file mode 100644 index 0000000..6488201 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_17.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_18.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_18.png new file mode 100644 index 0000000..5c5d48b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_18.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_19.png b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_19.png new file mode 100644 index 0000000..f81b787 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/7_Buzzer/Chapter07_19.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_00.png b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_00.png new file mode 100644 index 0000000..6ec4e2b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_01.png b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_01.png new file mode 100644 index 0000000..e662d0a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_02.png b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_02.png new file mode 100644 index 0000000..44903c4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_03.png b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_03.png new file mode 100644 index 0000000..d8902ae Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_04.png b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_04.png new file mode 100644 index 0000000..d75d669 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_05.png b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_05.png new file mode 100644 index 0000000..1d74983 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_06.png b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_06.png new file mode 100644 index 0000000..77c8721 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_07.png b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_07.png new file mode 100644 index 0000000..f6da5f8 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_08.png b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_08.png new file mode 100644 index 0000000..f62dcdb Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_09.png b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_09.png new file mode 100644 index 0000000..cb240f6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_10.png b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_10.png new file mode 100644 index 0000000..821b752 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_11.png b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_11.png new file mode 100644 index 0000000..e24b965 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_12.png b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_12.png new file mode 100644 index 0000000..0e66b0a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_13.png b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_13.png new file mode 100644 index 0000000..e8e4523 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_14.png b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_14.png new file mode 100644 index 0000000..f717788 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_15.png b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_15.png new file mode 100644 index 0000000..f8d5383 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/8_Serial_Communication/Chapter08_15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_00.png b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_00.png new file mode 100644 index 0000000..fc6da30 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_01.png b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_01.png new file mode 100644 index 0000000..0668295 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_02.png b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_02.png new file mode 100644 index 0000000..0d4d0c2 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_03.png b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_03.png new file mode 100644 index 0000000..31ece6b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_04.png b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_04.png new file mode 100644 index 0000000..3a2f27e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_05.png b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_05.png new file mode 100644 index 0000000..d1f361c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_06.png b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_06.png new file mode 100644 index 0000000..5f7a7f6 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_07.png b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_07.png new file mode 100644 index 0000000..f236d1a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_08.png b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_08.png new file mode 100644 index 0000000..3fd89bc Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_09.png b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_09.png new file mode 100644 index 0000000..83005a0 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_10.png b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_10.png new file mode 100644 index 0000000..14f7b72 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_11.png.png b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_11.png.png new file mode 100644 index 0000000..a554787 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_11.png.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_12 .png b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_12 .png new file mode 100644 index 0000000..bf5bb67 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_12 .png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_13.png b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_13.png new file mode 100644 index 0000000..db7fa5d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/9_AD_DA_Converter/Chapter09_13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface00.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface00.png new file mode 100644 index 0000000..cad8340 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface01.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface01.png new file mode 100644 index 0000000..0065875 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface02.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface02.png new file mode 100644 index 0000000..fd6d956 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface02.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface03.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface03.png new file mode 100644 index 0000000..006e459 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface03.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface04.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface04.png new file mode 100644 index 0000000..36cdc74 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface04.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface05.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface05.png new file mode 100644 index 0000000..cceb6e1 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface05.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface06.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface06.png new file mode 100644 index 0000000..4b0e692 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface06.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface07.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface07.png new file mode 100644 index 0000000..0bdeb09 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface07.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface08.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface08.png new file mode 100644 index 0000000..03f76fc Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface08.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface09.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface09.png new file mode 100644 index 0000000..4329bbd Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface09.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface10.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface10.png new file mode 100644 index 0000000..fa9a7bb Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface10.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface11.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface11.png new file mode 100644 index 0000000..aabb853 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface11.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface12.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface12.png new file mode 100644 index 0000000..aa02d76 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface12.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface13.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface13.png new file mode 100644 index 0000000..8a8a43e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface13.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface14.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface14.png new file mode 100644 index 0000000..5598a26 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface14.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface15.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface15.png new file mode 100644 index 0000000..b2e80b7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface15.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface16.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface16.png new file mode 100644 index 0000000..a0371c7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface16.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface17.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface17.png new file mode 100644 index 0000000..dc6f647 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface17.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface18.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface18.png new file mode 100644 index 0000000..1ee6a98 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface18.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface19.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface19.png new file mode 100644 index 0000000..7dfc68f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface19.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface20.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface20.png new file mode 100644 index 0000000..5352e63 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface20.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface21.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface21.png new file mode 100644 index 0000000..245db3c Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface21.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface22.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface22.png new file mode 100644 index 0000000..76b1410 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface22.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface23.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface23.png new file mode 100644 index 0000000..8434fe5 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface23.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface24.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface24.png new file mode 100644 index 0000000..86394d3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface24.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface25.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface25.png new file mode 100644 index 0000000..9229e1e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface25.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface26.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface26.png new file mode 100644 index 0000000..3de8a60 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface26.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface27.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface27.png new file mode 100644 index 0000000..a284519 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface27.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface28.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface28.png new file mode 100644 index 0000000..1988756 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface28.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface29.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface29.png new file mode 100644 index 0000000..e44099a Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface29.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface30.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface30.png new file mode 100644 index 0000000..d171a77 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface30.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface31.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface31.png new file mode 100644 index 0000000..e75f76f Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface31.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface32.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface32.png new file mode 100644 index 0000000..e94c7f7 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface32.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface33.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface33.png new file mode 100644 index 0000000..4b68a71 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface33.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface34.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface34.png new file mode 100644 index 0000000..174c894 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface34.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface35.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface35.png new file mode 100644 index 0000000..e3d78fa Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface35.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface36.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface36.png new file mode 100644 index 0000000..e23e541 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface36.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface37.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface37.png new file mode 100644 index 0000000..df5ca9d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface37.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface38.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface38.png new file mode 100644 index 0000000..3f7c977 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface38.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface39.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface39.png new file mode 100644 index 0000000..d058a9e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface39.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface40.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface40.png new file mode 100644 index 0000000..2b64d84 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface40.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface41.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface41.png new file mode 100644 index 0000000..43c81ed Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface41.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface42.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface42.png new file mode 100644 index 0000000..3907348 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface42.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface43.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface43.png new file mode 100644 index 0000000..42f3e85 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface43.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface44.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface44.png new file mode 100644 index 0000000..50edbb3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface44.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface45.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface45.png new file mode 100644 index 0000000..8d67258 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface45.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface46.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface46.png new file mode 100644 index 0000000..2733d02 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface46.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface47.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface47.png new file mode 100644 index 0000000..711e33e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface47.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface48.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface48.png new file mode 100644 index 0000000..12fff48 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface48.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface49.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface49.png new file mode 100644 index 0000000..4bac45b Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface49.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface50.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface50.png new file mode 100644 index 0000000..9ba60da Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface50.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface51.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface51.png new file mode 100644 index 0000000..fe9579d Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface51.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface52.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface52.png new file mode 100644 index 0000000..46b1e76 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface52.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface53.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface53.png new file mode 100644 index 0000000..23b9605 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface53.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface54.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface54.png new file mode 100644 index 0000000..015c823 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface54.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface55.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface55.png new file mode 100644 index 0000000..c7223ad Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface55.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface56.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface56.png new file mode 100644 index 0000000..f8d0fd4 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface56.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface57.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface57.png new file mode 100644 index 0000000..4b3b0b3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface57.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface58.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface58.png new file mode 100644 index 0000000..b5d19eb Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface58.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface59.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface59.png new file mode 100644 index 0000000..35433e3 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface59.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface60.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface60.png new file mode 100644 index 0000000..85676a1 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface60.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface61.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface61.png new file mode 100644 index 0000000..d2eb3ae Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface61.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface62.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface62.png new file mode 100644 index 0000000..f2bbc2e Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface62.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Preface/Preface63.png b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface63.png new file mode 100644 index 0000000..b0e8681 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Preface/Preface63.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Welcome/welcome00.png b/docs/source/fnk0060/codes/_static/imgs/Welcome/welcome00.png new file mode 100644 index 0000000..1cbe8ac Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Welcome/welcome00.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/Welcome/welcome01.png b/docs/source/fnk0060/codes/_static/imgs/Welcome/welcome01.png new file mode 100644 index 0000000..4f5da90 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/Welcome/welcome01.png differ diff --git a/docs/source/fnk0060/codes/_static/imgs/freenove-logo.png b/docs/source/fnk0060/codes/_static/imgs/freenove-logo.png new file mode 100644 index 0000000..9b93829 Binary files /dev/null and b/docs/source/fnk0060/codes/_static/imgs/freenove-logo.png differ diff --git a/docs/source/fnk0060/fnk00xx.rst b/docs/source/fnk0060/fnk00xx.rst new file mode 100644 index 0000000..8ebfa09 --- /dev/null +++ b/docs/source/fnk0060/fnk00xx.rst @@ -0,0 +1,26 @@ +############################################################################## +Freenove +############################################################################## + +.. toctree:: + :titlesonly: + :caption: Welcome + + codes/tutorial/Welcome.rst + +.. toctree:: + :titlesonly: + :caption: Preparation + + +.. toctree:: + :numbered: + :titlesonly: + :caption: Projects + + +.. toctree:: + :titlesonly: + :caption: what_s_next + + codes/tutorial/WhatsNext.rst \ No newline at end of file diff --git a/docs/source/freenove-logo.png b/docs/source/freenove-logo.png new file mode 100644 index 0000000..9b93829 Binary files /dev/null and b/docs/source/freenove-logo.png differ diff --git a/docs/source/index.rst b/docs/source/index.rst new file mode 100644 index 0000000..9d6f171 --- /dev/null +++ b/docs/source/index.rst @@ -0,0 +1,14 @@ +###################################################### +Freenove ESP32 WROVER Board +###################################################### + +FNK0060 +********************************* + +.. toctree:: + :maxdepth: 1 + :caption: Language + :glob: + + fnk0060/codes/C.rst + fnk0060/codes/Python.rst \ No newline at end of file diff --git a/docs/te.py b/docs/te.py new file mode 100644 index 0000000..7ede309 --- /dev/null +++ b/docs/te.py @@ -0,0 +1,21 @@ +import re + +# 示例路径 +paths = [ + "/some/directory/fnk0020/codes/myfile.txt", + "/another/path/fnk00ab/codes/somefile.doc", + "/no_match_here/fnk00/not_codes/something.else", + "/matching/fnk00123xyz/codes/anotherfile.pdf", + "source/fnk0020/codes", + "source/fnk0066/codes", +] + +# 正则表达式模式 +pattern = r".*/fnk00[0-9a-zA-Z]*/codes.*" + +# 遍历路径列表并检查匹配 +for path in paths: + if re.match(pattern, path): + print(f"路径 {path} 匹配!") + else: + print(f"路径 {path} 不匹配。") \ No newline at end of file diff --git a/index.rst b/index.rst new file mode 100644 index 0000000..198e568 --- /dev/null +++ b/index.rst @@ -0,0 +1,18 @@ +.. freenove-docs documentation master file, created by + sphinx-quickstart on Thu Oct 10 14:40:51 2024. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + + +submodule2 +======= + +submodule2 +2024-10-12 17:21:57 更新一次 + +.. toctree:: + :maxdepth: 2 + :caption: Contents: + + + diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1 @@ + diff --git a/readme/freenove-logo.png b/readme/freenove-logo.png new file mode 100644 index 0000000..9b93829 Binary files /dev/null and b/readme/freenove-logo.png differ diff --git a/readme/freenove.png b/readme/freenove.png new file mode 100644 index 0000000..3e42418 Binary files /dev/null and b/readme/freenove.png differ diff --git a/readme/start.png b/readme/start.png new file mode 100644 index 0000000..e8cce3e Binary files /dev/null and b/readme/start.png differ diff --git a/readme/support.png b/readme/support.png new file mode 100644 index 0000000..d67fb67 Binary files /dev/null and b/readme/support.png differ diff --git a/readme/text.png b/readme/text.png new file mode 100644 index 0000000..34dfd7c Binary files /dev/null and b/readme/text.png differ