Profruit banner

Умен звънец в openHAB

16 декември 2023

Телефонът е винаги с мен и сега, където и да се намирам получавам известие от openHAB, че някой е позвънил и чака пред вратата. А ако ме няма вкъщи става ясно часа и датата на последното позвъняване.

Tasmota Multipress

30 септември 2023

Идеята е Sonoff Touch T1 US 2 в салона, да управлява освен своето осветление и това в кухнята, а още вентилатора.

DIY 12V 1A WiFi Router UPS

22 април 2023

При поредно прекъсване на захранването вкъщи, батерията на нoтбука и двата UPS автоматично превключват на аварийно захранване и едновременно полита съобщение за конфуза

Zigbee2MQTT клониране

21 януари 2023

... как да клонираме съществуваща настройка на Zigbee2MQTT без да се налага последвало интервю на zigbee-устройствата.

LD2410 - бюджетен датчик присъствие в openHAB

11 февруари 2023

Цената на HLK-LD2410 зададе име на поредната тема в моя блог. С негова помощ се постига "народен" датчик присъствие в домашната автоматизация. . ...


В блога има няколко публикации на тема контактна форма, но ни една не разглежда случай на писмо с прикачен файл. Затова с учебна цел реших да разплета този въпрос.

Главна цел на публикацията е изпращане на писмо с прикачен файл в PHP. Как става технически, за което нещата са сведени до възможния минимум, без капча, без проверки на страна на сървъра за коректност на подадените данни, без валидация на e-mail адрес, без лимит на броя символи и т.н.
Не ползвайте показаното на производствен сървър!

Кое как беше - на помощ следните теми:

Форма за изпращане на електронно писмо с прикачен файл


Формата за изпращане на електронно писмо с прикачен файл в PHP изглежда така.

Форма за изпращане на електронно писмо с прикачен файл в PHP

Нейната стилизация не е обект на публикацията. В HTML-частта нещата стоят така:

<form action="mail.php" method="post" enctype="multipart/form-data">
 До <input type="text" name="email">
 Относно <input type="text" name="subject"> 
 Коментар <textarea name="description" cols="24" rows="10"></textarea>
 Прикачи <input type="file" name="attachment">
 <input type="submit" name="submit" value="Go">
 <input type="reset" value="Reset">
</form>

Две съставки са принципни за подобна дейност:
  1. enctype="multipart/form-data"
  2. input type="file"
Атрибут enctype диктува, как да се кодират данните при отправяне към сървъра. Може да се използва съвместно само с атрибут method="post".

multipart/form-data указва, че данните не се кодират. Това значение се използва при изпращане на файл, постъпил от поле file.

PHP процесор за обработка на формата


Първоначално следва да узнаем конкретни значения на директивите в php.ini. Извадката долу показва, че ползвам по подразбиране.
;;;;;;;;;;;;;;;;;
; Data Handling ;
;;;;;;;;;;;;;;;;;

; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 8M

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
;upload_tmp_dir =

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M

; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20

Качването разрешено. До 20 файла едновременно с обем не повече от 2MB за брой, а общия обем на POST-данните не може да надхвърля 8MB.

Постъпилите данни от формата ще обработва mail.php. Съответно неговото съдържание:

<?php

/**
* PHP mailer with attachment
* @author Profruit
* @link http://profruit.blogspot.com
* @copyright 2014 profruit.blogspot
* @license GNU General Public License
*/

 // проверка на формата
if($_POST['submit'] !='Go'){
  header("Location: index.html");
  exit;
}
 
 // получаване на масив $_POST 
$to  = trim($_POST['email']);   //до кого
$sub = trim($_POST['subject']); //заглавие

// тема на писмото
$msg = trim($_POST['description']);
$msg = wordwrap($msg,70);

// от кого
$from = "Profruit.blog <nobody@domain.com>";
  
// сепаратор на писмото
$separator = md5(time());

// заглавки на писмото
$headers  = "From: {$from}\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed;\n";
$headers .= " boundary=\"{$separator}\"";
 
// тяло на писмото
$message  = "--{$separator}\n";
$message .= "Content-Type: text/plain; charset=\"utf-8\"\n";
$message .= "Content-Transfer-Encoding: 7bit\n\n";
$message .= $msg . "\n\n";

// прикачен файл на писмото
if ($_FILES['attachment']['error'] == 0) {

  // получаване на масив $_FILES
  $tmpName  = $_FILES['attachment']['tmp_name'];
  $fileType = $_FILES['attachment']['type'];
  $fileName = $_FILES['attachment']['name'];

  // прочит на прикачения файл
  $file = fopen($tmpName,'rb');
  $data = fread($file,filesize($tmpName));
  fclose($file);

  // кодиране на прикачения файл
  $data = chunk_split(base64_encode($data));

    // добавяне на файла към писмото
  $message .= "--{$separator}\n";
  $message .= "Content-Type: {$fileType};\n";
  $message .= " name=\"{$fileName}\"\n";
  $message .= "Content-Transfer-Encoding: base64\n\n";
  $message .= $data . "\n\n";
  $message .= "--{$separator}--\n";
}

// изпращане на писмото
if(mail($to, $sub, $message, $headers)){
  echo "Писмото бе изпратено успешно до: $to";
}
else{
  echo "Възникна техническа грешка!";
}
?>

Пробег по редовете в помощ на коментарите на сценария.

В началото проверяваме натиснат ли е бутон Go, в противен случай обратно към индекса. Глобален масив POST "разпределяме по рафтовете".

В 29-ти ред генерираме сепаратор (boundary). Това е и същността за изпращане на писмо с прикачен файл. По сепаратора пощенския клиент ще се ориентира кое е заглавието, откъде започва тялото и съответно коя част, да счита за прикачен файл.

Следва минимум от заглавки на писмото, като последна носи значението на сепаратора. И пак с него маркираме старта на тялото (коментара на писмото). Ако има успешно прикачен файл, то след ред 44-ти скриптът се заема с неговата обработка и прилепване.

Файлът се качва в временен каталог. Според php.ini в Ubuntu се ползва каталог /tmp по подразбиране.

<?php
echo sys_get_temp_dir(); 
// $temp_file = tempnam(sys_get_temp_dir(), $_FILES['uploadfile']['tmp_name']);
// echo $temp_file;

Съответно глобален масив FILES също нареждаме акуратно по рафтовете. Узнаваме име и тип на файла, които ще посочим нататък. Временно качения файл в каталог /tmp четем в бинарен режим и полученото подаваме на функции base64_encode и chunk_split, а техния резултат в края на съобщението. Финален сепаратор и сбогом Гринго с функция mail. След нея каквото сабя покаже. Или радваме зомби-юзера, или му плюем малоумие - "опитай по-късно, че нещо се сецна по жицата".

Резултат в пощата на ABV.BG


Резултат в пощата на ABV.BG

От снимката горе става ясно, че формата и скрипта работят на ура. Става ясно кой е подател, неговия адрес за обратна връзка. Чете се адресанта, заглавието на писмото и коментара. Пощата на ABV.BG предлага преглед на прикачения файл или изтегляне на твърдия диск на абоната. И двете неща коректно работят.

По-голям интерес представлява детайлите на писмото, приложени в спойлера долу.
Нещата се повтарят в технически детайли. Става ясно, че писмото е изпратено/получено от www-data. Това е потребителското име на Apache 2.2 в Ubuntu. В качеството на трансферен пощенски агент се издава Exim 4.76. Сценарий mail.php е притежание на 1000, а това е ID на създателя на mail.php в Ubuntu. Става ясно как се нарича машината на собственика - prodesktop. Чете се неговото IP и име на доставчик. С думи прости - вие сте легален!

spoiler :
Return-Path: <profruit@gmail.com>
Delivered-To: profruit@abv.bg
Received: from mail-wg0-f44.google.com (mail-wg0-f44.google.com [74.125.82.44]) by pmx.abv.bg (Postfix) with ESMTP id 4920C140067 for <profruit@abv.bg>; Sat, 30 Aug 2014 12:27:26 +0300 (EEST)
Received: by mail-wg0-f44.google.com with SMTP id m15so3105121wgh.3 for <profruit@abv.bg>; Sat, 30 Aug 2014 02:27:26 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:mime-version:content-type:message-id:date; bh=7AzpmXKUTGCxKF+bgOut0KhnPFzCgfkcJEvg57kv4yA=; b=DuG/4p9VP6XUbWFYMyvztJGv7+BEeiBJU947a71E9Hele4sJSAiYKqOJf4rAcgVeqn 0JNp7OGqNVvRcEbRFMdY2Kb+XXWokcrGpkTsKPJwuBRlAVBKr8m+ZslafLj3CmYHN4+l 44JZxvSKKpxw58tuABQXfzgmDT4uAONGURPUQTjpL6nFyT6JqJBXb7N/mqvK5nBrUbOU qVWxpjSI7m0jvmekvmRqSVZ2GlQjZ0kBx4G6IyaDruDn+LXpcT3AkKhItuLbL+O/wsmV q7/Nox/1Vv/Ocd71GEZkfuBN7gAiIKdOjs0fEfBZbbCM74AY4Y3xtkd2VLnw47kUCLYA Gj4g==
X-Received: by 10.180.37.77 with SMTP id w13mr9251802wij.78.1409390845947; Sat, 30 Aug 2014 02:27:25 -0700 (PDT)
Received: from prodesktop (xxl-xx-xxx-xxx-xxx.red.xxlint.net. [xx.xxx.xxx.xxx]) by mx.google.com with ESMTPSA id lz1sm3959812wic.24.2014.08.30.02.27.23 for <profruit@abv.bg> (version=TLSv1 cipher=RC4-SHA bits=128/128); Sat, 30 Aug 2014 02:27:24 -0700 (PDT)
From: "Profruit.blog" <profruit@gmail.com>
X-Google-Original-From: Profruit.blog <nobody@domain.com>
Received: from www-data by prodesktop with local (Exim 4.76) (envelope-from <www-data@prodesktop>) id 1XNewM-0001lL-5Z for profruit@abv.bg; Sat, 30 Aug 2014 12:27:22 +0300
To: profruit@abv.bg
Subject: Писмо с прикачен файл
X-PHP-Originating-Script: 1000:mail.php
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="e29e3b585d97473466d2dbeffca50feb"
Message-Id: <E1XNewM-0001lL-5Z@prodesktop>
Date: Sat, 30 Aug 2014 12:53:08 +0300

Резултат в пощата на GMail


Резултат в пощата на GMail

Просто профит!
Всичко поднесено на длан. Прикачения файл е представен под формата на пиктограма. Детайлите на писмото, приложени в спойлера долу, показват на порции как е пристигнало писмото и се вижда отчетливо ролята на сепаратора.

spoiler :
Return-Path: <profruit@gmail.com>
Received: from prodesktop (xxl-xx-xxx-xxx-xxx.red.xxlint.net. [xx.xxx.xxx.xxx])
        by mx.google.com with ESMTPSA id cy10sm6105236wjb.21.2014.08.30.02.41.25
        for <profruit@gmail.com>
        (version=TLSv1 cipher=RC4-SHA bits=128/128);
        Sat, 30 Aug 2014 02:41:26 -0700 (PDT)
From: "Profruit.blog" <profruit@gmail.com>
X-Google-Original-From: Profruit.blog <nobody@domain.com>
Received: from www-data by prodesktop with local (Exim 4.76)
 (envelope-from <www-data@prodesktop>)
 id 1XNf9w-0001qm-Eb
 for profruit@gmail.com; Sat, 30 Aug 2014 12:41:24 +0300
To: profruit@gmail.com
Subject: Писмо с прикачен файл
X-PHP-Originating-Script: 1000:mail.php
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="301d393dadbd73c0c8eea95ef73f617c"
Message-Id: <E1XNf9w-0001qm-Eb@prodesktop>
Date: Sat, 30 Aug 2014 12:41:24 +0300

--301d393dadbd73c0c8eea95ef73f617c
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit

Изпращане на псимо с прикачен файл от
profruit@localhost

--301d393dadbd73c0c8eea95ef73f617c
Content-Type: image/jpeg;
 name="girl.jpg"
Content-Transfer-Encoding: base64

/9j/4AAQSkZJRgABAQEAZABkAAD/2wBDAAYEBAUEBAYFBQUGBgYHCQ4JCQgICRINDQoOFRIWFhUS
FBQXGiEcFxgfGRQUHScdHyIjJSUlFhwpLCgkKyEkJST/2wBDAQYGBgkICREJCREkGBQYJCQkJCQk
JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCT/wAARCAElASIDAREA
AhEBAxEB/8QAHAAAAgMBAQEBAAAAAAAAAAAABAUDBgcCAQAI/8QARBAAAQMDAgQEBAQEBAMGBwAA
AQIDBAAFERIhBhMxQSJRYXEHFDKBFSNCkVJiobEWM8HRCENyFyQlU2PwNFRzgpLh8f/EABsBAAID
AQEBAAAAAAAAAAAAAAMEAAECBQYH/8QAMhEAAgICAQMCBQQBBAMBAQAAAAIDEgEEIhETMgVCFCEj
MUFRUmFxMwZigbEVQ5HR8f/aAAwDAQACEQMRAD8AxRLyFbalU4znOwpIhxIBOrOamGIygx1KOdO1
YY0fIeUjYJqiVPiXl9KlTXE8POR+rerJxOm1rX11ZqcjDBTbSldelbwphmCm04FHWqi7scvJOM9q
G7EiFq21KWcUOo3hj4MrrWFJdSZsaOu9awpTMENvaEE9cUXEqqpleLBBlOIIZd1NFQ1JChjI896G
ssUreR0vjJEWqqCz3GrW2HpClBTn0qx0FLSPGzV+4p9R+QO6hthrnOKwlSdQz1IPpUy8XtKozH0W
VHkHCVeL+E7GjK1jDoyhhQpXTYVGUAzHPyxzv1raIUzkiY21FzEoPunBiq1fVgUu0YRZDhbYZ3Uv
NZXibVrEJkjtRLBKEanFJ3FZYvCg6pKsms2CKh0l0KG9XhiVOitGdqtmKPWyQvZOaExhhjGe80f0
qujAnCA4pR8KMH1oyKAYIQ28pHi5YrTIVYGkNt58ScnuaHlKhEYXPAIJ0pUKHYMvI5RIOcalURZC
Minjp7mtWN4Ui1J/hqWNkq2mgPqTmqB2IwrfasGj5xR9hUJU9Q4n+HeqYgQ0gddFbQyxIUpV+mi9
LA7HaENp6pqUMMzEnMR2qVMVZj75pCKEzm+0RuS9ecaayvItUIgRn6aNhTZ6XW0nBUkZ/mrV1/cS
jftDbbCRJd/NSoNA+P19qW2dhVjsrdTccbM1Q61Wpl3iNxLjWENxlpS3+laxnSo/auO2w3b/ALOg
0SsA2xn8dmuypqFfLxAOZ2K1hWEgelSzRrxNdKg3EbxuXEBUGeamKNEaOjcahsCcdhREZlXkTy8Q
d2yhDK5l/nckKP8AlNbuLV1wP9qiye1SVJ3rRa7LBbuT7TyHXRqZZWfGQehV/tUw8jNxJVfcK1yb
nHHzDv8A3NpW7aX+qx6A70zidv7BPDG3tOmr8hWA9pQo90dKcTZ/cKPpjiMtbiAoaSkjIPaj92wm
6VCC05j6aw7lYUBmIWB9H3pe4yigDcVx53ZO1EUIzVGMe0vPbJTvTccVlAtMGJ4GmvjVqSnPnVSQ
sExKxGeC5iB4lpApTFrVL7oZE4FdI1OOpApnsMYeQcRuDmkYGpJNbTXAswU7w6xHRgpTmqlhqBzY
Rz4qIysDelGspSkCQNO+qqRmLIg2ytZyrNEZzWGPn4LLg8O3rQbGlcWmEllz604rVQ1wxmxrupCW
VpBFFUysgR/gp0bF1OaupO8JuQlKM9TUYJYgUN8BO9CN4Y6welbLOktKz+mrVbFMxMhlxfVW1MJr
sCaZSURlY2VtROyBaZTwx1DcqqZiqaxLYjWgpH1UozchhKkKG9at1VPII7qHR4SMURFUTeRgW9OC
AwgN6UqdONZ7ULZkooXTS7cgKAj5b/P5ykOdXMEp37g1y3e51MKXWzcq7wdKXUsvxRhR7LSeh/3p
J8soRFUkivBie5q2ccbxkdgB2rBbpUDcWWeHZCmEpDrrqSSjukKreP8AIR/E5t8ZqKwi5PeFT5Wt
T2N0IBOw9TWXazVCKlY1A7bAN3lC6TkYjNqKm23DuQOmR/73ozNXiov5MJLjdmbldF3F3dmOctpP
/MUNgB6UZEZVqV5C4RrlfZheUpT0h05xuTjoNuwFGy6pxLPZ9lNuAD8ltLn8I3361MS2IEWG8fJK
Md1f5ajlBP6D5UxhhPZhsWhDy3EZG465plFsJLVAOUy49udQomYGULjZWtSOO3yDkqoVasReQziX
lqNsEZIp2GWpv4cfRuJnFt7R1fsaL3bEZaka7q9LXp0YH/TVZqHhhVvI7RKmA6QjIobuxjaijXxY
aQH5C8ZaV96iuxzmYNkpdW34kpHpRVaxgSzoOvfQpR9qFMqmBO7bH1Of5TiR22NJLirBFPW7DOUC
W4rhA74NR0sawwqlRZKHCk6mz5VjshcSqCmJIaGr6ifOrVDd1G1ilSYcsO6EqIH09qYWMXdhou6z
lLUflU7nNTtAbCnhrhxN3Z+YmLUG+gSO/aufsysg+zciG72Vu2zeW0pSgeg70bXwzKYaQkZ4WmSG
w6Py0q8xRXRirsMrbwLJfUApWBR9aFvJimZmLfbfhmlSPzOldXjUz8MRXXgqDCZOVJyKrpYrMCqZ
/dYrcd7Da847ZpeRCk4il1C1bCkWhGVZSNuM/nPixUWM2zqGBaocdbz6tKE7nz9hUZlQB07jVURr
uyZ05t6U1hls+EjBI9Sk9a5s7M51NeNYlL246y5Gjty3kvR3xlmU1/l5PY4+lVcvOGsM2B7UWYt4
W2U8lxKSAodHUdwr1HY1H8bGvI7TNceU/E0a+U2tcdxH60npn1GcVlse41jktSB/WzBjRW1JytlS
T/1nfetf7gfTkdzpQC22XEKCIzKW2GR/zFDYk+5zWVxbkHfx/oX3me7FtzkQqTzl+BxSOysZKRjs
Bt70xElmFBPbLfD+T58xTpaQc6RsCewHmT5UR8kLRcbmzwpw+TGiNsT5Y0gbFTYO+PfFLojSycvw
aM4WoOuFyQ64pR6kbnNP8SHGAnpq389q3hidLFr4VuodjrhvK8bR1IPcg9qYhmqxzduGvIcuyGz/
AA0622JLGDnlvbDf2pbL2YOrVHVisLctYJQn3NMRsrBPiC+ROFoyGQVJT0p3Cl9bcjh2yxGTjQn7
VWfIEzhcS0RcfTV4Ui8gpMKGx1Vj/wC2qoaoqkbjkNatIUk1dTPWM7CLagfmqSP2quik4AU+XZmS
Dzm9u21ZZVM5zGQr4xssdktpUnUO4ofdjUz3kK9cuIrXKK1NxUlR6KxVZlUDllYTLlsyttCUiq8u
RljlstIOUrSAKupkm58f/wA+qqSohtN6l21BbZV4T2Palaxt5DjqNLTc21XMSJykqz503DlVF/cX
J/iy0pbGkpwB0AFHaaMYuK/8cx47hLVC+IUzyJHPii8GylrVk1rGyEuI53E8+65BUoA+tbxMzAJH
FJircOSrOe9ZqzAsSKp8uMhnc0N3qaw9jlL7aVYGk0FpjdCt8RvSJdw5KUqLaEjSkeZpDYezHT1E
VVsQQLe2uQW3nWWHcdHcp2/alncaZi6cMRExo7ltdeYkR3TltSCFJ1dxjtSM1vI0hO6hNvcaekJ5
jSCUIkd2wdglfkPWh2soReIRwywm3XeeXE81hcVYQepbWrofY1nYfithmFeTCyQsqnRmWvqDzYI6
/p8X9aJ7QHvC7gExJ0icrStTZDbSRvzFnZI/1rEfjU3N5FduXLfuiLadT3IwlzSPrWd1ffJptOK2
FhgiMYf/AIjMQ2URMCMwjdIWdgT/ABKodreJbKK+Llr+ehMOry421rc7krUcn+9Ggx7jAlduKmiW
4/LSOmoAEn70fCkqBuaz4lb571s0EWyWmDMbfP0jZWPKtJmrGXxZS3OaHmg414m1bpI9afZVbxEW
mbxZSNlCUHdLn2rHaFHZS0Wa4IiaNKVD1NH14+RSIzFsHFCeQB4lH2rqUCMvEFXftRyGXSaEyNYX
ZWJY3EbudIiuZ8zmoqF4dlGsV0zAC4nBPapUIrWO5MRCOjWTUKZBBdIkh1GEoVv2Bq1QXewnRYlF
z85p77k1h0AqrBzVkiYALKt/TNZRIzdQn/C0RxGU6hmraKNjeFAnuE9A/LV4amIlIygEnhtuM0XH
Hs47A1hkMWAPlGP/AFP/AMazUlhE6wEZKVb0o6Ko4ji952WXA22hR/mHSgdWGUWMNZtNykgEIVg+
prVGM9VGkLhK4vDHJV770zHAzcgDv+0cRuAZqz+YlQ+xrckJMWDnOBpcZvVqqQxyWBSIwnlRVwDp
crqKqqoiy8hDcJZwcajXJ2fI6GonEWty1hedKv8A+Umw92hDKkrkyXHCvcnYZxtS2f3DiJVS7cIX
Zp5lFtuKWpGrZp9xvIBP6Cf7GkNlPcrdAnEmvMGNAcLsdpUV/wCnCT4dQ3GDQ4s28i6nMu9JmRQ+
pO7g0PtnbxdCceRqYiqXhg3gm/8AyF9juFKnGykx3EYyFtnv7iszx2UagerETWpriWRI6tNKcWk9
s9Bis/8AqJX6lgd2aET4gKtQj6pLme6zkjPtRETiKu3IU2MrkS3ZatWHXCVKPXc5/tRpfGpSh1wu
SJlyjss6TFjua1Y6bbD9zWUSqkZgC5xhd7pLmuLaaZRoTrcXg7DJAA71tGZVMVF4iR1HDLLnvjAx
570S5DxxmFjkpUqRIV/ymRqx7mp1YgvejGO7ynNIUPqSDnHpmjqaUv3wxtqb+47a1L/ObHMbR3Ke
9dL0+RbVYV2Mt7TSovw0CcZTn3FPuiiPZ/cNovw+jNEFxCdqiLULiy+IyHC0JofSnb0o/dMVI12G
EP0p96u5VSE2eIn6UpJqM5hkI1xeX/lox9qwaUGWp7Pi6etZYliRpsLPi00RGM1CDBStOdCTisu1
jSooG7H5R+ilmRjDIdshPcY+1ToxFQ5kNoIreHqR0F0u0/Mp0jYGtK1gDQi48OYJHNTW+imOyxms
hzK8fpHSuUvIawo/4YiQpjgEhaQAdulNQxK3kDZWZi9rNntzIA5OQP4hTVFGaMq8lAxxbCaPLZS3
t1O1S6qCzKoY3xu1GTqCG1Adc4oeZVCYl4iS9fEVEkFLCcE9cUVJlVQcr2KfJubkxepSsk1eZbib
ILpTevelZEG4s1FsnlxmllSsHGB51z34jqcmFcONEkPBt6b8vk7qcRlP3rnvllHS2O8OPxmUNi5P
ltSctqa0lBHmCKVzMreRrCnMqY5IjIS6vmuNjlLUepA6H3qseRoUYWtR07hXbtRSsKO+G7W/IeW4
1s40klQHbFK7EqqNwxjS6BqNBYcVsSCCOhWs/wC1BjazBJFqpTXJK1Ldc8WV+Ee1dBRBiRqUYcNx
IVhShpT6Z71TKQDZcLagdSvEdx6Af60SpgmgLS+pbry1aQScHoATnpVNxNBK4rtxJccV8tEScac4
J8vuaz1qQHlyxbUGHC5bDivrc/Vj1Pr6VtMW5MZFBQhHR3Od6LY0WLgjiF3hviKFcmti05hf86Ds
RRIpKNYw6WU/ULU5UlpDrbzfLcAUnBHQjNd9RJiQlaxu6k+xqzJA4yVfrz96ogM4wrG1ToxOqkTa
Cg+JVbwplmOnnEJGyk596KBEst05JG/tQnUpgES3c4GqsdGKuHNTHkJz4jUUIrMc/ipUdJaV9xRT
PdJg4pwbJx9qGwRWsCTDo3K1ZoTAnbkeRnzIbIKsEdKikVuJ7lVXyKsY41Gcc8PWgpHxI71G8azv
NY0qUlR+1R1YiNbkMU2pwgF95Sj5A0XEbfuGZJGZaj6z8GJmb8lWk9zUZBZdcssf4dRtH5iEgd6p
IxhIRXdeEbVAScIbyKNRSOilIn29BeIix1H2oiqqnPlAZFqmYyY6gKzLixEepTb+HGpxaVsABtXD
2/8AJU7mpVo7ElnbakK5cppwIx4Xmxug+o/UmkZs1DLyLG385Zzyua27DODoHT/qTStlYPUCnOB5
ZKevQY6kHvWsKSoPFbc5nhTgk77ZrTtxCRqatwJZhOCzow4pJSvbGQRtXA2WZmqp19dOJ3xRwE6S
02lKjpATny8zVx7LIW8CyKVK4cBSWULUEYSnYbHoB1pxPUV9wpLo/tFB4ImuxC9oVgdMg9KN/wCQ
jsC+AkqJJ1jlxMhTShttsaai2Y38WF31JFB4rYZIDvgbH1dyfajMC6VC5MvQOfqTlOzSM9PWs4Uw
xX3ApRKlKySck996YUo8xWiwiK5oXk7isspTH6e4WtZuPDtumNvKCHWUkDPlsa78H+NTnj9u2FpO
NSjRTJIY6WkfSqtKZYEcVp6JVitAwdSiv6EJJqsMQhdZc6qZwfOt3M1A3RozqQmrUyzAbjjaj+kV
HMWOfmW2hsqlwqMQi5pLmB19qhVw5lxaxnT/AEo+FLVwK5k6TjY+tYdFMuwngiSuSfHhNAxG1geG
GnzAG2qj1NWB2/hzGgpLji1FQ6VfRSY1hVJgsIeDbjyU4ONjQ3SzG+lRkw3a4pQor5ih5mt9Klqy
lijcQr5PLhx9/PFUyh8S/tCW5N0fBDmoZ8gahdhdcIgSNUrUrHmcVamXKvPvkaFkNRU7dCKxJsLG
KspVbrxTIeyEtac9zS3xdiLGUa/PKfmcxzdRAzXM2WtIdbVWqnFt16wQ6pO/UUrMMIXKHbpC2AQ7
kd0dRXNlkVWHY47B0Dhf5l7BRj2G1Jy7tR2LUsaBw78OWHgFLTv6jakviZJBvGvHGaRZeFo9ua/L
2WOhG2KIiEYOds6HSVOalEjBB6e9beMmGFcqxtK1+BJSRjBHlS7RhcML3LCyhrARj0xt7UFkN4Yr
934ZYkJWHGk5VsDgbChq8iNxCZRWM8vnBCBrLPhV5n/auhrepMvkJT6St4lMmcOqZzzEqJHvXYi2
lc5EuoyiWRDDO6kYA86cVxTKVBFtFW46dsb1vDFEjSAkYUnJO371dij9E/Ba4G5cGNMqWoOw3FNl
Or9JJIrsaMytHUQlxVjQ0EYpswxE/ISgEVtTLCx+Skg405qMZFbslaDsrFYqaIC9rPiddPtUUywO
+gKH1u4otwLqDstNZwvVj1qXUGowbtcN5OSlWfU1viFwoM5bmo5JaRmhOShGlbqCRpUBWLsXUilY
Wn8xW1TD2BsQQ22AohKvFRDKhn4cTv4arkaqJOIeM5MkFpjVn+Ssu/7RphHarOue98xOkOIzvuaH
FhrWYC6hbyIEOUAJXNOemc0aRgVS4WGfHSkfSB2FQYiLGLzCbR4lpH7VAvVRTc71bZAIKEuVfiUz
qUK9PW/x6Y6jnypLZawuZ9LWsPnShQRnbNJ1ZQ6KojuYK5h7jb+1KO/I6Ea8Qm1shRQHFJGOgJxS
8oxGppPC8BEhG3bsDmvP78tWO1pRKxpXD3DzSCHHE4PlXLVrHSZal4gMpZQMJSBTCKBYatqSpGCp
P2pvDAjgugA75rLOXhQV1aVUNmNgkrTihMxtRJN0q/VnFLuGUrsuOh1ZJ6DtQrGys3W0oWCQjf2p
iGZlASRqxQb/AG8shZ5WftXd09ixx9rXqUyQ6MkJTpNdjCnJZTyO7pWNW4NRlIbB8Cb60m4SLG4l
KVOBTza+7m26ftTmg9Wr+orMptWPOuuoFgKXjeiGGAtCd6itUwxA6whRzoz61d1KBnWkpG2xqi6i
19xTZ3VtUZQbnUd5hf1qwamFKxUJ/LUMh5IHrVl8SIoCzs6lXsatSrELyyyN11HUlhLc5SlAgLoS
xgnYWWxyQqcCFZGe1EowFX5FzS65pHgV0rdQ9jJ/xCRzCoqTuelc9XYKzHrypuUKdU9pV0A2rXVi
WI2kPpc1NR1FfYrOarqxVR/amLs+QX3UsND7USJmYwxdLWLbFSFPr5px+o02zG0ZSWVdrZ0bQ3ny
GKwvI2zqJJMFNyJ5aUtA98b0ekYFmsIZ/Bw1F0uqwAT+1AeBeTFKzKZTOdK5Tg7hRH7HFeYO6nid
sJJcHnQ2DIbf8M7el23c0p3PevK+ot9Vj0WktYzUYLIZTsnal0GGGbbmwxRbGQgOHbFXYzU4K1KO
9SxCJ1WrYdayzGwGSpZ28qGxaiqQ2pXTvQWCATjHXw1mpqwvlRAtB8NQhReJIaMFOneujpvVhTZS
ymVXyKYksjolXSvUwZsp5vYSrC9telYxRgZefhZcm4fHFqcOkFai0fuKNrf5VFplY/TGUjrXbUVI
XnGcEHrV2KYVvRw8ctrxUqQBeacZB8asVVSALjilE+JVTClMwK42Xf1ZqmYCxHpUj/lZrCg6nXNB
G6cUwpplOULaB3VRMKYPn3mFNkav3qnLYSyG2nnOWF41dCTQFcEyhtntJhOFwrS5npvmj34lIlWG
vOX/AC1iwaxXjw5DirJ0pGO5VQ1VVUqjEU829jCn1pUR0ArDupvCil+/xGc/LR0g+Zod1LYDRdZs
97S0rSO+OlGRgDDZpLxGXXvsDRGIpwZoZcACVE0PrUg9tk4vIHatd03hRhKjxVw3QpaitSSNvUVm
aRljZv4GI05KfnubFXDlvsOKUFIcPVPbNecTNlOv0qSM+DcdfP7VgInifoD4Z4HDcN0b60nPvmvJ
by/XY9Lrf4lNLgta0ChooRmGDcYY+qmKA2cITG0j9OPOt0MXI3Y2AVdayyGsMBOjuOpoTKEI1RQv
3qqksCvRkIrDKawwulKjRkEuKTgbk6qGasUu68d2xh8x4rSpT3TDXix74phNOTyb5f2C+IUrdwnt
XJwgNPsr/hcQU0RI+37gTvYoXG8MsqYdCe5BruemyWVjk76VZSog710xDDB9umKgy2JTasOMuBaS
PTep1qyspT4sp+qLBxDGvNmjTm5CSHmwTkj6uhH2Nd2J7R2ObUMXKYV1Wk/eiE4kXOjpBIUn962Z
YXzJKV5CaswzCtYB/VvRKrUFYhdebjp3S4T6CgOpLEbVzju7FLgPqDUSMu6kjjzf6E5HrRaMYZgZ
yQd/yq3jDVBWFFxlIOdSVJ9qDM1VJYqV4uC0H8l5XpXLzLyCItgyxcYmGzypGoknZXWirMwRoxx/
i+Kd+aqr77AqiufxQpzKUairuajSNYJ0sIJ0917BcWojyFVKaRQFUso6JV7mhWDUGFqlvJd1edaR
wEiFoiPa/wDM710IcWAMxK5HRnUU0aRFVSEsSUhpYxqAFcvOxyqEUfxFiQB4fD3zRFfuKGRuRjXF
kQLu1xltqSGESfl0J7kgAk1wExVTq4YUNAJWO4xVsHQ334VFS+Dox/8AKcUnH3zXmfUV+ux6DTb6
SlwlOcUym8WliNHbT0Mhe6z7UNFX3DDMKl/EO78OL5XEFpeTp6PsgqSv70ZY1bxYCz/7RxavixYr
kgAy+QT0S9tWXjlQ0tWH7XEcWcMMvJUP4gQaVaYIqHKprZ31VnumqkL1zSyCe2Kw0hFQqHEfGL8U
FMSE9LdOwSjoPc1uLKyeTdMEdmj8VKc7a+Ib86XrtcEwIq9i0ycrx5ZFNLtwQf4F65/UD8PLJ5MM
Yq7TYGeRDZ04GCsjKln1NKvNPO1mGFjjRQB903OSOWnYeQArS5qoN0sV7juz6rU4opyWyCKf9Nmr
JUT3YrKZdIjORnMOJUnO4yMbGvSq1jz+VqxwDtntULNJ4A4hfRZjDDygWFHA9Dvn+tdbSzaOpyty
ytYtirvMSP8ANUadVBS7HjN6kqOCtWKjk6sM2rqjRlx7B8qHhizhy9xUbc5J+4redipRA5fG1jKV
p9tqCs1mKOWrvpOShtQ7kUwrmGPXb9Dx4vCf2rPxPIqwOLrDWMh3c9s0bvrUigkp5t4HCkn70GSX
ucS2Ypt2gPuOEp7GlG1GCw7CrxAAhTY5bisK7UNlr5DHVW5H3ycg7h9OKwTqpeZPBbalHlL8RrqP
CrC6ga7E3DUWnkpJpbMVTWbCK4WtbbuAjAPTahMhpXC7VayV5Vq9hRteFWAyy8izNwGktZK9JHma
6VKKDU8DqVgpClK8iOlAls5pQJ2ItToIKuvQKpN9WpqxZYLzUZka1pGN+vlWEdV4mlavIyjjKMEc
QzBFXrjuKD4GdgogA1yZuMjKp2IFsqsJmkKUQrsM5oLDeFN/+DbfN4WW1/6hI+9eb3cWlY7ur/iU
tMm4TbaeUr6exNc3Lso+iKwP81Inpw9pUnslYzQ+rG2VRXcrXBAy7HYPrgVLyL4tkiIv7Ty3y0MD
lxUpShO2E7Chsze4LQeNSnnm9kq+1TkDZRLeLg8y2cagfM1F5G8KV6XfIVtLapshKVu/Qk5JI9hT
EWtJJ4mGdV8hu1dbbJic1uXG0/8A1AB996nw0tvHJXfj/cUO+35NwubdsteqQ6tQC3UAlCB6HvXV
19Htx9+f5fwIzbPcbtxl+tVgRAjIJTlWkZJ865buzMNlf41a/wDDXEpTnJAxTej5i2z4mR8UOsqk
ttNLS44kePG4HkK9NrK1WODtZWyiqK2FKGroTjAG6z2ApoTZuJovCPDK7awubcHeU49sGf4E9d66
Ovrsv1Dl7cqsOJNwjNnTzcUfusK9LH0aaw6sfmpGaIj2INBEjyG91pOfWmMRWLsCv2WFrypGr1ya
BsRVUlhJcGYTWUt8xpXmCa5itUgkXJlMOHkynCnyNG7rBFVTs3B14Yd1bd6IkhhowZyQ4peQtQ9Q
atnNqihsNchzGl7Oe2d6PrC82KhZD6P83f7V0hMglRUyBn+tc7bSzDeu9QP8Mc7czH/SaUoNd1TU
3dKnMhWNNdCxOiiu5xNZ5+rbzrLqUyiOStTp+nVp8qUYwL3JXymRrbQTVrN2yuzYKgzmnjhx5Tyu
yR0rTbTMYylR3ChrnuAJTsOw7U0jMTqpYItgbaGXFJz/ACbke9ZmkI3ErnE6GYZJ15bTuog1zXdV
5Ei5NUzea4ia44RzEb5A8+29cnrZrHqFXtrUigAB3l/Xq/SBvUY1hTZPgleo35toK1JkAFSEn9aQ
d/2rh78LdzuHW1X+mqmuP2ti4xS26hKsjYH+2aQ7Vhzu1M4vIv8AwrNdbag/PQcAp2OQT2BHYVtI
Y24s3QmZGXxK7M4qvd6aEWLam4LittSgpR22rWdeCPyaxWZp29vQbcD8GzoDrkubLfkOvfWlX0Dy
xQ9mXurVV6YCRp2/JuuTULBbmtRbcQknSarWhVuJJmYp/FEFKpS2gnAzSkuKsMJ4ikcOIeGSlJOM
bjJx960jt7WI9W8hRK+HDLzzRSlIQ2TtjseoNNLvSKos+tGw/wCH+CYVkQgttNqWOiiBnrQ5p5JW
+oxpIo4/EZXOTyU4Ck4FBN4Uy/4oTlI4fXy1qSpx1A1A11fSEVpf+DmeqPWPiZHgKVtvmvSnBHnD
dkfvd6t9vh6i8slSwgbtoHf3oOxN2I2lCJD3WqaObU9ZpyIr0t6QhZCUpe+odvvQdP1qRm+p9jO5
6Ssfj+R/O4DkJyRFVuM5Az13ruJ6lpy+7oJSejzr7eonVww/H6pUkjsRg05DiORvpt1OfJBJH5Lk
jNvkoONfL9K6eEqomwtntXFoHlvZ96Q23CIVmV+JLWQpXM9q5+Im/aOYeM+aizNGVMuAexqUKZlO
lEISQv6vI7VuKpkiwFDyolVqaIFOuxzltKtu4oVmVuJqqt5B8O+yPpdSlSfX/ejJtsvkCk1lGDd0
j55iWk57pz1reZ1YBiKp4bhEJJMVWfehd1QlC8svaySVZ3phGNqfSggoJPTyojsRmKxODq8gK5af
IUv0YpXEv+HZc+R9LhST1VsKG8f7gmZlVSzWjhyJbwFSnmx6ZxmmtdUEZXZh4riO325rlR+XkfwU
0+Y1IojlcXXCe9yIKH33CcaGgT/auJsyL7m6DkOtI/t6hcr4c8Y3iwTZrsRTIZZU+EOZ1rCdyAPa
uU+/H4qdXW9KZWsxU5VvhQYLUspceLyWX09hg9R+4rn4mZ2O32FVbFacLkOe4Rqaydh5A708vJRP
K1YecLX78C4kt9x1aUNupS52yg7HP70vPF3ImDxPVlP1JEnt8sYVqBwQRuCDuDXnVc7PSxJKdbkI
wU5z0zVs5FQV/hTDjvMS0kHsQKGEsGGMlloJGkCrsQY2VspdJHlTWt5ApincVt6LgXDSOx5MNxeI
JbXkunbftQVLZRw2EYyU5AohggkuaEYrDMQrt1dxtqqlNMZX8UJQ/DYjP8b+cegFeh9GxyZjh+rZ
4qZ21gLz+1d1jkFq4C4uTwZxILi60p2O42W3dABUEnypbYgaWOoeCajFvunHEfjPiW3s25lTLSXE
4U4MHGdya53wzQRszDrP35Fqb/GZ5zLWlSThI699qUTNlH/Elcs7UhGHY7avbrTETyRtZW6AXVX4
sogunw9jy8lnUyvt3FdmD17ZT/J8zm7HpMEvivTJTbrwHdYeSI/PQO7e+3tXcg9Y1J25cc/ycTZ9
Hni8eWCryYDYdwplQUn6gRg11qRutlbrg5GUkjarL0yCu/LI8Klqa98iubsxqbUFctsN86g6lwdy
N6SVOPEJyAJNogqOGXnUq8tBxV2ZTauKno78MkfUjyNQKrKxwx8q8vClKaUexqdVI1lC3oEdhHM5
uMVrjUFdmBPmGf46xUJ0Y1tAiNgNhLbau5yK6HFQYvuAa5ufmEhI7itoysBZxG7dYUZS8K1HzNEZ
o1KWzCGfxI8VkNKwD0xXPnkswzHCLTdJTueY6o4670HFhrGuponw9+HM3i5xEiWlxi3d1nOpzfoP
SuTueosvGM6Wr6Yr8pPsb9w/wbZuG2AmDBabUkYK8ZUfvXLsz+THXwqotVUaOSUNA5SnHRQI2IPU
ftWMsEqfmr4gWlvhziMWopzD/NeinsUKOrGf5VE0NPcymyhX6MNnOq1Ng7eYroaz8RXZQULSXW0Y
T4dJzTYlY334VcT/AI5wuwl5aTLgER3cncpH0k+4xXnPUoe0/H7Hb0Ze5GX5pxGAT1pAcCA4lAzq
ya1YzUHcdXJfQynqrr7Vm1mN1qpZbMyhpteVJyNq6mtVRKdiqcZQGl61avEaS2a2GYW4lS+X/DnG
nmVZQshKx5HzpRlGB+XQlAI6d6zYoXzJXhrFiyq3SUSTRY1BuxkfxGn/ADN4aip3EZvKv+pW/wDa
vV+lRViZv1yec9Re0lSq5IxXTYSCWTryDuRvWGIpo/w6s7aJaJikal4GnPrXC9T2LfTO3oQ1Wxul
tnLSkJCum1c9JB51HUactX6qZVxdlGDUkq60XDGanZwv/St2IIr9w3CujZLsdIc7LAwRTGtvT6zW
VgM2tFOtZFMp4mtLNnkBqa1lo/S6BkfevQa/qy7fFl+Z5nc9PbWb9VK+OHYs/Ltrl4V1ISf9Kf7S
t4iBI1b5cQEPqUoDqHUf2NBdWUGyi65RWV508sk/oO37VV1qTDFbeaDLhwlxPoul2YZx4nhlIxyl
9O47URGJU958EbfL/wBa31UqsgwRcpsleXHlDzouGMSkVxuTjYAS64o98mpO1fErXit5Clt5by91
daWwzMM1VQ9m2mR0pyLVZlsC71S08DcDovt9Yiubso/Md8gkdvvSHq7/AA0fH7nT9NRp5K/g/Tdn
gxoEVtlhpLTaAAhIGNhXk8MekbjxUYuugI2otgOFE0+aNwKXkcaRDM/ivaheeHFzmkp+ctqg+2od
SjPiHtQ9eWrf2SZOPH8GQcYaUpRJjpSA62kkDoMgdPenvTm5VYBvLVeJXo6AIBV64rpe45Y/+GvE
X+HuJAlxemNLHJdB2GT9J/elfUIe5F/QxqS9uQ/QLMkpwPvXl2Wp6BQtD2r3rJAqM2ptBkD6+goy
Y9xhs+0iicUKQ64y804yR0J6Gs99lNPCJOJL4l1o8pfNV/COn70HMtgiIV+DJmTnAXkNttoOSAKg
Rhw7JKRsrbyrLGBPOl5yAqqwpTMVq6zERY7sh44Q0kqV7Dp/WndeNnaqikz1Wxik+W5PmOynVeN1
RV7A9B+1ezjTtxqp5d37jWOS3pTq7GrISQkEuhITudqp+JIuUhtnA8IsxmyU42HWvJbj2dj0+uvE
0W377mgoEccNOJSRhWxprDAahrUnTtRMMVUKafHdVawxVT2S6nHvWmYmFKnxNBYuUdbLyUlKuhx0
NYi2WglWRSSwLLGysZfK4c+WlrU26plSTspKsZr6HA0csayL9snh9mBoJO2wSidcIKQHlpksjYhY
3FaZBUr99eiT0Ex1JSvuj1paZVNYYrYbcQrDi1Kx2O9LxxWYIzVO24zHM/M2J86cfXWNQayE/wCG
Rjvrb/cUkXdgNxt3qnUM0TkwXFTkwy+2VuKwfWtKlvI3dVIWGEMbuK9hQ0xViM1g5iSvPhVgU3nZ
opjsm2fCGGGbOuU4lJcfcPi7lI2FeM9V22nn/g9Z6TrrFBb85NUZkYaHtSdh5lB5c8hJAVWXkLVC
vypSlKwV4zSjuMYUS3hzmWma11C2Vo885GKHh+ViMllqY5NityOF0RXP/iYfgUr+NB+k/aunG9Z7
L9sikq/SqxSlrMcFpX+WRj7jvXaXkcV+JxHSsvoA3V/73qPWpaeRvHAXEKrpbkQ5Cv8AvcZICier
iR0NeX3IlVmPQQtxUtiXijekhiwQzfI7TnKdkNNnH0rIB/rW1clSCXebWrwh1ThPVSBsK1l1YJiJ
hNPlQI7BHNS6tRynQMfvQqr7TdGXyEEjiu0stra1N56KSlYJoi60je0xll/cDw729citaWnG46dk
lXU/aqkj7f8AYOxJIkpba+rJqYUpmM349vinj+GMq2T43iFd+wr0PpmtX67HE9R2LfTUof8AWu2x
ywxjHLIV0PnQ2LUaWiKgXyM11DgFB2H+kzB4U+qptloaEZhA6YryLtyPSopZojxwMKxV4YjKMmnc
DJVvRLGSQSSn9VXczUKZlL2z0PStq5KkzsjSnZWSPOrZyqiG4Sc5GrNLs4XClHvjryXSWXUg+S69
v/puXuazL+08n/qGOsqt/BU59+uMZwtq5ZSe/UV2OZ53DCiVJXM+rY+Y2oeVZjSgCCWV/mKUR61h
OLBGWx24625sVJo0uxbiZSKpFoPbTj70n1UKNH5LbIP0lXlXQSqqDVGsKVSnXXPq28hS/WwyqqRE
LWres+40MICEoI5vTyoWz4sQ33gYoZskPl7J09PevEbGfqMey1P8ClzQ/tjtQ7B6gEuQd6G7G8KJ
ZTpJzS7BcKQlsyGVp8tx71RPEy7jGzOWd4y2tRjqzqwPoSo9D99xXQ05VbiwtsoUefCC9bRSkKT4
hjyNduKU5M0VhUh5TDgUd9B7eVMVsommasWhPGP4dFadt69M1JBQrsgdwfMGub8BeSzeJ0Piqrx+
5qHCXGrXE1vDhRyXx4XGz5juPSuHuajQSVOnrbHfWw4kWmHcWiXWklwfSrvQYuI3hhO5w3aniUyf
m2Fp6FtwgftTCSxji8gF3ha3POaedPeUSEoSV/WonAH3rSye1TDRR15LgtPEXwaHDHDDd4C2m3gp
AcYSj6Un+bqSKc2deWKLuMxyU9SSSXtRr8isFpEdkNp2CR+9cnrYZZhb+FXq+IktWOOl91gZWpSw
lLZIyBk9VY7UzCqryk8RHYnrxMlfjrUta3NSlknUpXUnO9erV+KnFbHLkKHWyhwpKehphQFSVDhC
B3BrBQ84bacmcRwsddQ+wFLbTViYa1uUqm2IxrCR3FeQPVIO4p0pFXhgbhfNVW7GanwdVnaqsaqH
R3To36f2rWGMMp9KlaUHxVpmJhSvT5XU6qAEKReLg2HyHEcxJ8q9b/pubtq55P8A1J7Ctywgk8rY
HsuvRxbinlqMBFJPpiiZlVlNLxApepBwaXG4gSN45AClbeVVhbMHfio6EaLgeOi9kTuDIivP+LxG
hq4xYkTAx12I60O7KSwMstJd0hVYZyyQyG0J+rJOwFKu0jtxDwxWN04Akc7h2ER/D/qa8ps8ZWPY
6v8AiUuDbp079aEHB5B1UNjSiySnfPlQGCHcdsqRgdDUUpge5wGZLJafZS82rIUkjIIPXNXyXx+5
S8uJknF3CxtX58fmKig4Sf1NAnof5fKutp7lmqc/Y1/2lL/w5Nn65ENOpAVpUnsK6udqOPixy/hp
JOSgb1pkQ3eW8hSSP2xREnWRbKBeJkbkaJ8PoyWoXM5uFAkBI69TXA9VzaQ7Xpv+M0u3iZyg+7Gf
MbISJGg8vJ6DPSubRq2r8h3Msa+4tP8A2e3e4xHHUNJbeTghl4EFafMHp9qaT02V1sovn1GNGqzf
/Bva/hrAsdxYuT85+U4xhaGChIbCyO5747UVYY9ZrN9xGb1GaVa/gYfFKWF8HJYShTrsh5CEICSp
RI3Owp/1Ca2oq/nItoYrNYoDHwsu1ylPJfkIhxmY/N55wMuFOyd+mP1f71zYdNmbl8uh0Jt9VXiW
bgHgRXC/DsOJIW3PlLLsuS+yDpdWQcBJ64AwBT0sSsi1X5HNzJZrMYx8S/grcuEIib8p5l+JLeJW
2lGkxVKJKU57jem8ZaKNbFoyyNUyq58PHBdSrxjrmmYtkqTWYXtWaY4fCzmjNMoDEDMXz4f8MPQ5
blxlp3CdLafI+dcf1LcVl7anX0NSjdxjQI4y5nT7Vw2OyNo+cCooNgjJSM1ZFOmzvUUgSHdIxRCg
SVIKgfSsMxalbusvQgjVWo1Kdii3OTrdJKq9V6QlY2PH+uvaVVEMmapK8BWa6yIchUOWpK1K1Hfy
FMYUplOnEJWMq6mmIouIO1WI22UJcyntWaV5GmfiF7fxVXeYF0YZuzo0NvljSFKoTMoxUWvSEuAp
bd8Su1AtdjdQZuChoalK1OGoxLnDsFbu/wBIGf7VcaBopqm3fDkcrhuGPFkJI3968f6gtdlj1+gy
tApckHakxw+cyr2qmLApLVAc2p5GdS2A3p3zuamGKZQp1sOt7ad62DK9d4Da9bTqEuIXspJ7g0Jr
K1lCrVihcGQGkC6xU7pRLKUJ6n0ArobzszI38CGrVWZf5L7b/g9P4jhrkvIbhRdwkyWzqUemw6gV
Idefy+2DM+zErV+5buD/AIC8NWNlD8lUm4SXAMgPkNpIO+MdfvTciNIv1W6/0cvGwyeJqH4bGRAR
b0x2kR9GkN4GE46bV0uz0iWNvkK9xrWJmdaGQhxadZGBVQ2WOrN8yN5Ac63tOpyppert5Zrn7OhH
J5LkIjhUZltEZCXWkakbA7Hf0rpQKscSq33B5y1gZqxoU9IcecWtDx/yz2HlQcenq8ncYtpQl1JC
2orLSUtpAyewSOgFbmszrCq/L8mcGY/FN6/3Li6x2Bi2c6zvEc0rRluQVHCgT+nSncE96W37ySrH
Uc1qrGzfkWXr/h4szNjkC3yZb9zzrZW4cpIB+jSPShzazIvH7kTb5cim3r4OXrhqIudymJUFAypx
ndTY75SfLpSPalePu/g6EOxGzUF8VkMthKU7Ug508KMIzYyDQ7BKjJoaRVmDpa9sfetEPm1VCEhX
tWiAEt7Sk1RZUr1K2XjypiFQMzFUusbQy2rVuvrXs9OKsC/yeH9Qe2yxXno/i+rJpnDC+GJWEDIF
FR+Rhwktk7adqfVeIpZbELmWc4oUodGsQc5X8VK2C1DflEl0uLUpSuw7ChsrEwx4mNrdwFNgjtne
tRxMbuWuw8MmbhWnw/xGurDprWzCl2ZhpcuF2mA14chSsKOO1Fl1o/ab5KXLhLCYASE6UpUQkegJ
FfOvW6/Fv/x/1g9v6YrLqL/z/wBlnb6CuWdA7PlUYsgdRmhMXhhe8eW4QOoobGwmBLDyS0fqHStK
YZQtmxv32Y3CjJSHHM6lnogDqaPDrtK1VBSTLEjMxbrD8ObVwxdl3L8p2S6whogNhKdaTusDzNN5
hXVasj9f0OI07SePyLo2/rTpUlJPbyrsa+5fj98ibIdNISlR8Gnyx0oyJy5KZzklcAUn1ph1sZUC
W6EuFR6I6Vwn21Wdm/QPheIS08HspOnI610oNlJ+INlqfBSOdp6EdAamJUzL2ye0kUCR1ximmMA7
rixunSTjrSezK0a2UJhTxlSZASHQlSgcg+RrGpN3V5fcj8fEldQN1Fenpq9hTE8asrcuhnAtmW5y
4W6TE1cll9tTeBuQCOvvXOxA7RNX5Ln/AKDJKqMrGUWH4Xy3by/HuWpm3wzhTyesgdQE/wCtc7W0
bs36YOvN6iqx8fuWy58DcPPReXHi/JPJGEPNkkg+oPUU1NrxMvFRGHfmVrMZhLcTDecZU6lRbUUF
Q2BI2rhstT0KtZbAqZfOd5be56nFUaDWvCBnrW1KY9cVUYsUzntKSKilMU28vpGsqVgY610dRLNU
S2XqopbnLudq5TaNHLUdTpHavcon01U8JO1pGYVybWUICmlcwHvVMhhXPoNqkuueFCsmtwx8ipX4
j1HD1wQ3qLG3tXcVOJz6MK59skoB1R1DHfBpXYj4h4bKKDCXk+FX7Vy6N+0e7o8VapLqgl5KmgRt
timKVA2BUw1Wqah9z81CT4gTviqXFWsatZTXuGZUGZa2n46OUFDoRg5G1dPEtjaIMLjCRLi4H1Jy
Umozl5T2kNge5Q5TqdJ3H9a+c+tQNHstY9n6bLaBSzNKGB/SuUOkhO9Q0eHeqLF11jqU3qa2WNxQ
HCKK7fO0Tm87avCpJ2waGpefE0HhA3BF1+Yhx0vNpGl1SzpSEnyPnXU0HdHspy9/ttHVi2SFLSTz
FeJRzv8A71w9yWRpORzlrUMtyip453SO46V2PQ2kaf8AgHKGrnsIlIY1p1nqK9A+/Gs6wfkXxG1R
Y9dnYhcS6lSt9sf6VxP/ACU8DMrBqKxPbJ7N2S4EIUhONKgrZWelPaGzHuWWvQG60Jo0Rq0xihpS
lFRJ1LNaj1o/ToGWNvnn9SW7rHHzKXJDQCtSgcah3pH4+OWdFVvngJSqkV6Mp9xmLGbWUqOXFjYB
PvTvqnfd1ihx8vyVBXHWwwQyhjQkfQBgCugkKxqB62PXVBkeFGCaqZ1i8VLXkDuEFBK1pAPUnpSD
vx5N9wuMC+JxHawtxpM5Ky0caBv+3nWNPciVWs/2/BTowBJvLbUtZQFIYUN9aTgetCxNH3GaP7ZN
qhVeK/iDbbfCdTDltyZZGlCGlZCCR1JoE+zVeI5raLSN/Bir14dmS+U0rU6s5J6+Incmku1xsx2M
OtqlmtkURGcdVHdZPc0BgwYtzSMnapYlQd2R1qEK3ebxFhoJeeSk9hkZ/amoddn9ovJMsfuM8ud1
N3kaW9SWAd/Ndeq9K01VuR5f1PeZuKjGxJK4j8VrTozknvXqkiseeZ+QU+0pKA0hOyaDJHUxYbWJ
pG2U4PnQ4Waxssbfg2K9Q9q6fdN1OH2W5CMFCVVbOZqD/hUP/wCVbrPWMlQa8x3HChXK04G+BQJc
WNsojlssYQVpSpQO4NLvxKLJw1dXJzpitx0obaTnKemaKjWCxuWVZdZSCrUpJ7CjKgdmI35DUeG4
+20oqTvjFcD/AFDrfS7h1vSNizVO7fxRH0BLyFJx0PWvFZqegVmG7d9grbCvmEj+U7VjooSxKi4w
14IlMn71OikseyJsTlnMhs+gIqmVTWGKfdZaGJQlR05KSNXtmgKhpm4mt/DriiLLtS9KMtBWy+hz
6/eunrOsa8jj7kLM1lNAXBakpSXPLOK6UvpkWwq2OX3TthhDAU21sPPyNM6upHAuY4l6YMs1hLeL
PJWW3kLU+pBznooD/UVxPUPSpfJfmGilXxCGWStbLbrnMJGSrG1ZhgvIqyN8i2cPPKirwlKUjG56
V2ctFrvVVBeYDxAyZ9u+UDvKceUkJKTv13/pS3qiLPAsdvvk3DxawTbbLDtbeGEK1d1KJUaZ0/TY
NZeKg3lZgx3ShHMVto3pqbKr9RvwYQWPXR5AHNjqSk5IPoO5riTeqSKtmX5DCxKSTZrLbTchS8Nq
GU52zR97ZjWrFIgo50C5OluQ6ok/pKyBiuZE0UjNb55DKrqVG/BqzSyq2rzHdcKFpI3C8dAaV6R2
bsfb8jKYuvIbcLXFxDiEStJWrZPNxv7U7oP2uLCsqftE3xtsdhj8Fzr2tlES4MhIZWz4S6snASR3
robKRSKrV+YTWnlVq/g/P9lakw3PmnV/mncg9K5+w6txU6UNl5MWRvihxtO7SVUp8ONd4ElcVyse
FptP9aImsZfYENy4hnvZ1PaQeydqeh1lE5J2KpOeW85lSlKPqa6kSV4nN2JGPozelBJ6mu9ooqry
PP7L2YsHCwzKfQNxy67ULKJsFtNOfPLbV4smsuymceQ4RHUwsctCgDSWP8gwowDiwACrem7BCQOr
SKzYyefMKqELU82y8dJZTg9a2waoue4Rtz5WpxCsnpisUVjPaB7NYm7NJfUlaiF9BVUqRUGwdPQq
zRcMEIpykLiOoKfqHalfUUWXWdf4D6b9uVSrR9/cbV80Y9gjBzQNCYIoU3F1b0Nghy40UjdVZILp
fh+/WtqUPfh7xHCtlyFvuK20Rn3BhTmyNR6Z8qJyqL7HjxP0DGvKExkl06QAN+2PP2rqa/qDKqqc
JoerArfFMRUtalvJQ0jY56H1plNxbWZhh9FlQdpmMvxw604haFdDnans7MdbWEKNhiq3C8NQ5iyl
eEjoM9M15CbdVZWr9hlUOHL2/NaQ1HQkgqBcWs/p9Kb+JaVasGjRVAbHc2uHXn/xeQ4ppL61MuuO
ajpVv08h0FA1Nldee03zNSx3XiWJ/jmzs6cPKUFDIVpIA967k3rCJjjjqBTQlY+bvDV2gS3GTzQ0
AfD0Od9qU+Kba1nZfuZaPtMp5Nl/OWx3RqwloEnHQ+VLvL34Kt+MFqlW/srF14ktj8Zbsh1OWUht
DYOcEDrgd6MmxBJFaX556HRh1GUi4R4kHELirYu185xpKguQlW2nO2fWgQMz/TVDO3D2uVhFx1YL
taVOS2HVPRiQtyKCOY2BsCB1UPPFL/ANrcQunsRtxE9ueHFFvLcxKX2m9uWFlK2z/ECNxSmzLIni
C2Uo3EWfEDh2DA4YRIVzlPMOo5fNkqX165CjuamtNK0nkAh8iioWkjZOPSnmU6RG6k9tq0plgR9e
B5nzo6KBdhPKySafiFJGFnKy7XS1Yu639HL2pqqePOqaUMJ2rqKcupZeE23W40mWUbHAT60/rrxB
Oo7s7j0mSSYqQM/URW1sxjClk+RCxk6c+VMrrl2IlwO4VVNCasRrY/T3oFasQ4+UerdTRZ2FhCCp
XWpjxGD5yUvfCa0QDfW59VUaOG3ir1qyHancb/0ob4VuJePJRZcI4blIeSnCHRnbpkbV8/8AVdft
Ssp6vVl7kasTsNhQrjsOqGNpwKzUIQyFBPRNZLE01wEnw0RSmEU7C2156Yo6KCdTRuDOKJ8jhJlp
6W4sMDlp1b5SMnrUfgY14V8jRvhrahPjP3We3qbWrEdLnQgdVfvXQ9N17WaUS9U2eSpGXiWGkxl/
SEgE+WKZ3lj7ZzIsszFEkR0TnSpKtST0V2wK8l2rMOdKkSLm3Hj4b0lW42PlTCSVUuhTb7LM+8tJ
UtRDA1FHYq7ZpZeUlmOnqQ8bH1z4nYjWshSEuuHqlXYnYfannkXtjNGsXT4dNy7Xwyt64yE/nO68
HYIQBnGae9PrHEzfqcbd5y8Soz/il/hu8S46lKlW57Ix1wSe3tSj9yzdv7DcusrRq35Ka5xMxdZc
xuKpTbWctp7kd9vegZjaNR6F18Rx8P8A4iNcE3aU9PjvOw30hH5YyoKB2OPKulozdhrfqJb8XfUH
44+KEbjxx1u2ofabiyBy3D4FEacHpvuavddmazfYHqa6qVWPxTN4XbL0dban3RoShZ/cnzxQEgWf
+je141E8rii4X6ciRcpCZKm8pDZyEDPfHpTfwyxL4/MUjUMjIJA8WaWYcUmUNvOskYXywdwU0xEA
cUyEjG3Wn0UTlzUhRFOnPnXp9WFoo/E81tyLJIdxLDIuU1DTaFEEjUcdBTEWtJ5MYuX9qEzBioit
tJ0pH9adwtVMhEfSgZ5WCOwFWjrYwzEkeQ466SpKgB503YFhgo/qqmdQoG9qS5ntXNeTkbU7DxwP
FWerFjtLqScdqNjxGwpsI0fTWzLHy2EuggpTjtRMKZsArjJQrSmqZC8MeqgKUM6qx2i7nzMBMlC4
r3/UhXka4XrunaNWOv6bse0GEdcZ0tKTuK8LKjK1T0aNYlP00JgoJIBxVKQXPxXHQVJQoj2NEVWK
sVu5LCQsDoAaNF5AXYc8F3PTaDFKVKGSQO461W2v1Des9VP0hb7i1auF7OWka0KaSMI7ZG5/eum7
tHEnbODJj6rWEvGfFKl2Gay2rkcxtSS50wPT1pGednXkH1tf6ikfAlyhTuCPxGQ62HIyS24SRsoD
Az77UvrxRrEzN9ybKMstSs8LFpESe6pWpSXnApJ6oXknG9KxL5MwSRuSimwRYt7vCxcLgzBbcc8S
nCAoqJ8KRmia0Ku3JjpSzNFHxXqMfid8Om4FlcmsTZKC2pJS2cFDhJA3IrobOpHAthPX3mlaoRfx
OgWiFFd5mkNglYPh+kVx+/Iv9BIGj7jWMu4jKJbq0+FxSu4GAKchZrD8viUOFLlWniFtTylcknBP
8tdp41lgOUsjJKWWfcIfLW6Hk6ewyOtc6KGS3iOPNHUr8N5116S5D1GQ7hDKEdVqPcj0rovFaqt+
Dm95lbiKrq3JauriZS3jIaAS4FnvgbinI8Kq1X7C+WZm5D3hm1m6PFPRCRqUryHvSWw9RyItNltz
Uy4lhpanI6B41jcZ96TwtmGGLIqyQtGNP3onaA2FszhyM5sl1SfStogN2E7nBp5v5b2R3zXe9I0+
7J3G8cHG35qrVfuSs8JLS4ApadHcivUZytjgU/cWOJa40BnS1pGfqUev7037TSrUDalfOPfJxfzp
jjmhttA3WfIedLSTx+NjSKzF/wCH/gtf5rAkXW5i3KUPCy2nmKHv2rmy7yq3Ecxq2U4vnwh4js7S
pMKczdWUDUpso0uYHkOhrab6txYy+rUonzqVulptWXE/UgbkH1FFZ/aL0I3HuYcdx271tUUjLU9G
MCt9FMDtmO917VY6oQlamyCrVgVLEPTLzuKLhgbEaTqc1FVTHkQnL3YVso8blBt5GVVz/UktEw5o
NWUNU3HmY5id+yhXipIlkPTozKcGzt9naTbRUMszHTdpZRu4rUatNVVI0zHE9vlMlLTWwBxirmSq
8SK1ihTgwliSl1KUrOVDV1yKTRuRtwyAqM7CiXeIlvQ4NLjXkobGj7KLVW/IOFjQOC+KHLlLbsrL
zbSVAqTzQVBAG5Cf/wB7VUWWbiC2EXyOuPOHpDVtXMQt2Ysblt3PL9xjYGgTxN5EgmUxaTfZrSHG
ROVFjuEFyOh7ZxQ6EgHtRUgsviW8y2LZw98U7VCEkXB5TDkhjSp9I1guJThCyOxxsaG+lKy8VATP
H7Slwb/+MuoZPOT1KlE7r9AfKjvp9pbMNJsrIbXwZxnakWgRrxxM2Y6Ej/uEzSC2kb5BP1ViF5GV
lk+eBTar3OKl5u1kh8X8ONPwJqnIMpsqQ4zg9sZH3pmb01JVWRRSKZkYzOX8BuKHmdUO6xn2seEL
yhRx2NWujJ5KOfHq3kYPxMZEO5u29xpxl6K4pt1J6hYOMU7rRV8hbZmt4gEdwuhba+p8/Oi9Kg1c
YQromyOoS28phTowuUACpA8kih5RmL61B5UhM+4LeSpxxJAGtz6l47mtKtVqbXkxb+E7G/cgQXVM
xj/maOq/TNITcmHUNAhwY9tZ5UdCUjz71EWppmPXHMVAbMDrcGd1eLsKPrQtLJVRPZm7anzram/V
R617rThWKOqnnJHZmsxCHig7+v8ATet9qwI1j4e/De0SLXHvF0aM6Q/40IdUShsAnGB/vXL2tx+t
VH4YI62NBXZbastlUGNqaOWyG0gpI6YpC7DFFCUvFLikLGEpGQvsfShs9TVSRQDiVDVsRjI6itYy
TIps/CVksbakwrcwhSlFS3CgFalE5JJ69620jMDWNVK58TOBbbfbHKnNNJjXGK0XGpDQwo43wcdQ
a0ksmGWrGJolZTA238tpKikHAyK9KuW6YOPyLoggABPSs1HiOQQhOTpIrVSWE7jwSo46UJzBwJoz
Q1Zi6naZYV+qidxlKYjddV269qE9pDaZqyjeBLK2x5968rua3akZT00E3djsNY6lvOtsteJxw6UI
1brV5CkrDFiR9l+M8ph9pTTqPqQeozVGlaxA6AoGsMaUovEdv+YuJZUnSspynHcVz8rVg/tF8SCq
BGMRvUteStQH+1Yd2Ywq1PeG+KU8L8Sx7i8p8xk5TIbZxrcR/CPvR4VAzclNQ+IHxb4cuXBvJs7r
kiXMRhEYIwWtseM/px5d6YmdZFr/ACIxxSKfnaXFZhskqUla/wDXzo8bszcTTrUr7rg5nj8IO+O1
PYUUY6iXowp7b3RCdjscaakus0i+JMTqjeRY5c5Eltp4Kbc0ELbJ3ScHofMVz0iZeI68iupaLd8e
uObJkQ5NuRG0hKYgjANNgfwgefejxQ9vxbIs1Swwf+KG6swAmbbOZOydTjJw0cbjY9Kw8M7eLl4q
ZTxTxI/xbf5t6lMtx3pita22vpBAAz/SmI0ZVqwPObMKWzpXkURlKUmlRjLShxO+jqPOsq1TdLD7
hew/jEtDBVoRjK1dwKVmlqNRrxNXgQGLbGRHYTpQjv3NKjBKtzFaKYhcV+9Sou7HLGFucw9U/SK9
V6XrLEvcb8nA2JmkY+kueKuzG4m7C2WEveFX7jrvVPyKUtnBF54vmONcOWe7LbacB0qcQCWUjqQe
tJzQxKtmUPE8jGtxPh7GQ2FzrteJsrGFPqlqSc+gGwrjSojt4juEGEK23C3MmM7OcmtJJLbzxHMC
e4J74864u7Bt2rB4jUbKNIJdLeHkqB9aY9Mado/r/cqatuJO6VBs6SkK/ST0zXUBZMB+I3HPFsm5
y+H5iGLdGaI1iMSVSEEZG57YNdHT17cjnzzNyUpASEgBKmwBsBqrtXU5/Is7crwACg4YfY+cWpaN
1bCts5kTysoJ9aWZuRAQq/mq7GyVkaj6mp5GGYZN6EpAKc03hTLMSNOBDoI6HrXM9V1u5FZfvg6P
p2x25Kt+S68GXaz2yc6bottpWlKmXlo1BBByQPImvGrLXidrYR28QC+8RwuJ+KXZULnqZZaDIcU2
UJO/QZ+r3oDSdySwTXSq1ISgLOEporB1KxOAVdX3FbqA0jPYYrmTN9QPjxFcReq6tkbhSVg1FBsx
U7qgMXB8OJwQonHpTSKwBmFUielGzacZphIwTyCefJK+qlEmnESopI4bwvKQw4dMWE64ogqckYOg
egNSawHCq3kaXbZjTw0lm3vJx4lctIHtvQEnlX3BsYj/AGiDiSJwyg84q+ScV1TFcCkn3TRWmaT2
lcVKVK+VW8sw1KU0OhXjPT0reLL5FdVAXB5JoimSHvVlHwJqEDoaikgHpQnCIXbgeIXroHm1coNp
OsedITDiMaAlWskfqHWshTlxAxUMsByDj9W9dDQg7shzN6btqdIc0D0NepXicCxG44FrwKLFixlj
kxk5zT6wmbB1mu0iwT2p0Q4da+2UnqKxJrrItQkc1GNOs3xrgPN4uMdTLg6np/evNza8iN4nRTYj
b3Cjjb4xQ7nDctNi5gLww7KcThKEnqE+Z9a1Hq9zy+wJ9r9pBwr8al2uGiBeoj8stDS3KaIypI6B
Yq5tdv8A1r8ik2aryHM344QSwUxbe6pZGPGdqPDoNIbztR+0yriziJ/iW+u3aQhLSlJS2htPRCAM
de5NdTX1+0ISy9xhLzjTgKo/bcVn6qQww6ElY5fiVvRVTiDZgVZSo+Let9pSrEJZaXnO1VmJSWPm
w2gE6unTNL4arGWY75wV+pNMrIQ95p0bVUrqy1NJmrFigrQ8ygqSk7d968DPEqyMp7GF7KrBQx9L
fhT3wMCg4UKd60toONsA1eWqpRTIse4Xq7OR4MZ2TJc1ENp6kAZO9cxUaRuIR5VVQaz2K8SeJfkT
G+WkMpWpTL3hXgJJJxRsRMovmUpnGVwZl3APRVpUlScEjfcbdqdhSoB3K0pzTurrTeFFmcDcbced
aynSl1SQgnocqxke2aJhlUXlawx4x4OuXBV4NuuKdai2HGn2/Cl1BAOR7E4q0kVzDKwpbcln8tp2
Sc9UpyffpW2Vf4KIyhYAdWlWlX0rXnfHqai19pXIkjSOU7hWyVdqjKWj1YmdVqPlWBkiyKspjzUM
1CWCornahuptS18L3P5G5NKWpzQo6SlI1KXnoAO9JToMK5vtjtdt4gtoVIt8mIvGMutlpweoz1Fc
JsyxScm64M94TX/h6TYjnXz46ujgHT0UBT2vtrKExKpV3VeL2r1XpUVY7fqcH1GXuSV/Qjcf0EZ6
12PI57HrJ1nNPQYqphiZZp8GQqVWGLUDku6QfOubJyYIigXM8k1dA1Ttp053VQ3UywU25gU7rrxB
McqbLx260apix9+HLqVJYcISUnbfHWub1qNWOXXDTispkGce00RSjznZoUjEIH3hnSOo60optSAS
FCtljCIXHxg7DzraRWKHdtd5I5WrJ7e1eb9Z1e1Jb8ZPRel7F46jBMnSPU1xWU6VgO6XAoguqb3U
B2360GbipMMR/DG4XSHeBevlm3rRCKkPPrcS2G1KGCAT9St+lD1s1ZWb7YA7NWWpsN7j2111ziBu
O2q4pt7jTLi1aFFKxkJUD09zXQmZeTfkQS3FfwfjriOQ89cHS+ymOvmHLTYwEHyrGv4hXbkJHCp5
pam0OFtJ0lzSdIV5Z6Uz0qAc1zg/4cHi+VwnfGeS3bo7KEy2xjUVoJ7epocStJJ2zGfE1zjrgaDx
lFRDnMN6GW1Bt4bOIUemDWn05+7ZfsaV18WKNwx8L7hw2mRHhRITjb6NJuEjxHfsR6eQrOdWd/6N
Y7a/2FTfgS7xTbWLU3dvzWV61SywlIbPcBI2IPQUCLVljnsv5+5TMvuMT4/+GV++HtwRGuqGlsvF
XIkM/S6AfLtT2HF3jryUrCSpTZB+pNbY2rkedqhqx961DRMy5pVnyrLKawxZuF+J3OG7vHubMVmS
7Hyptt36dR86Tmh7htm4n6h4bv8A/iezsXFPyRW40FONsvBwtEjofLFeZ25WjZlZTGFOJMhiM6HX
nmktJbIWVkad+37UjD5LX7m24mXXpyCJzqYMVLTSVHluocKuZnc5B6b19A9Ggk7ayTvnr+n4ONuS
qzVUVazr3r00aiYcx0roRqDYk0En6qNUwRyGygUKaxFFrvjNJoodSBTXlVmsMeJSoGqYjMGN9N6c
hbiLs3IIjA6gaOpQZpXVkIHnlNL271yulhyoP82snfetKSp7rC90/eid2oN1OXFjTjVv5UtK7MYw
oKQoVAynTQUs7pq1IzDmIgIbp6HxAsxLzSjxBWCOlB3NaOeOrDGrM0T2UbWqLMvk78NhISqdoK+S
V6Dp6Z3rwcsdZO2rdT0+Niy2Nvh8OWr8OYZftjCPoWprQDhYGNzT2IUryEcyN7SlcS8JWWBMEiwt
JiT4kjnlCkFTC1r7lJ2JHmOlc/ZwqvxDxyNUzbjK2cYzLPcJSIsuTNdezJUySFLQBgEDunGNhSuI
5GksxOqqZfBsKW2JN44q+dg2qI4GRH0FMic+QCG2wroMblXanVzXjH9zLDGJfeHb+whq/RJdqtrB
xEiWxH5QTnOVnGVKz1UaF2aScfnn8mevtLtwxx78OeCmnH7Qi489XZSFFZP3OBTEczRtavzI1ajq
B8frGuwyZ1zUpuaHihuG2NTi0dUkdvenE3JVXx+YHopX43/EXEZmyefaZPySgC2ltwawodcj1oSS
Tr/yXdSvSf8AiD4kRe3Jlr0w4SgE/KZzkDuT/FQvhm/d8ymn/wBpTuLePLzxnLQ9dJHMS2SW28kh
GfU0SPX7Zl5rFZLqtRV0NMVA4Y+VhQ1J6ViobDEWs96hqx6HcVC7EgllKNlVipLlr4B4nh2q4827
3C4R4kf85DEHPMlL6aCeyfM0rtat14rjJO8W1z4hz+M704x8u3DgoBU20gk6E9ACe9D1/Slja35F
tjZatQsuHQB0x2r0UNV4qcsjDhK9q6kKkYYMakpzXSjXiAYnbWrNFMHEt3CaWnzU2gncdOs4oCNx
GDznUTDFEja81TrYyxN0/VRkj4gmJ4qzr9K3hGUwMeZRSAT2eprjp4nQUDzvW2IwSyNI2+9WimWI
3lJB2ppUWoOxyFp/hqZiUzY6S6lB2TSrxrbiaCEThipRv3GanfzIUkq1Y23NVytVieIxt8G43JJv
VvZuMcsglcxtklCMfqB79K8fua0aT/Tbrj+P/wBPRac1o+XyLrwXxLxVIvNodm3BU62vhSW5Cm9K
XdtycDqO1CkxKkn56FYqy+RbuOoU+bZ2Lm0txxcNwuIaaGQ7k4wR6ChbkbyxdyM1G6qR3NN3sPCv
z0V1j5xtnW43IICemdiehpjMcia3ljqYXk3ifmK/37in4kym/wATddNtS6pSMoAbChscKx4lUqjR
wLZm5BKs7cQ1cGMiOhhtCQEjAFId2RmsNUVVqVi8QUAkpTg10IZWYA6Ffe1sk50qHbzp9RZ1A1vo
zulQNEB1I1SW0kedWZqdrc1DPQVvCg2I+clPrW2IqsR/MgL+nArDKHwp8XEZzqrFSznWn+KpUhzz
h2T0rdTVT1qQtDgUNzV9OJllNC+H0Qpiv3F3q54E+1ZSPuNU587rapahhZGOg713dHUqKsSflo6U
7mKOxix383o27UalTHSx23PQOtDZpFKZD6Q8JKMN6iaA7yyN4lqtReuM6nqmiUYN1UhKFJOCmpyX
2ksTMoV107VWHWxhmJqeVlBMTMuhB3qO9VMhXzrfmn96W77EoxGtwKGNVV2RuxGEJQcnel5UZSrH
TjpT9PSpFsKvkSwKSVHPemsTKxg6AKd62zrUhA48c7dqTwwXCngePei2NVGFnnNQ7jGlvMpfbaUF
KbXuCKDM7Vqv3MrxY2qF8Q7bP4fkQrYjEh1laGWHUhCUqII3I2xXntle03bb5df/AIdeBu5yUGtk
tPCXDESFIlRpdzaaDaGYytbbedyST70rI6QRNGrW6hEiZjv/ABxcmLE+I7sQSW9QSy4jbptjHY1z
U2pYlqFzFyE7PDd54gtEO/XO2RLkuQFcy3iYsNNkEjIBOFZxVtJI31fvgn+2wJceF75fr7bLfNgt
W+EEaW0xEfkxkDrnA+o+tY+EllkWy/IMskccfEdv/DLhGyRFvXJ3ZIKlOOuYOPPApxtCCPyYD8TI
3iYn8Qf8KfNNp4WefeQMl51zOg+iM70v0jVvp/Y3yryM4nNhJX3pxADCR0YXTCgyLIUcntRFIEk6
mhW6i4KvrWQ6H2Bj1qgpwatSHlQh1nYCqKOwNa9ts9K2q2KfNVNds0ZMS1Ro6VYASMj1NdHXjryO
O7crDLQRsNJ9jXQXZVQLHCklNXFKrtYoiVThRxWWNBsRwIG9Z1wUpI5J/lpgwDuOpVnKU1TtxN4Y
GckFAIHSuM/+QKpGJSqJhidFJEuqWKYRWKqe5rNglhuiLqO6/wClN48SLFj9QV9RRsP3pSVs2KUX
mW4hWBgj1pB15f8A8Iy4JUSVk5IT+1X2v5/6Krgk+ZXoGyd/SpElm+eSKuCFaQVqzTLceOPsFU8I
wcAmhd3P6GbZJm1EDaio2bEYc8OOKMgpJ2xmuf61yiXqN+nNnuFrYwAMAV5M750/FZkpJcTvgbg1
TrggdYL/ACeH3WLdHSFx3SdlqPgwM+HypeRsrH8gbrg0K2l0oU7z3QT+kHb9qxBNJ+4Ay4Kz8UuM
5XAvD7FyhRIsmTLeDDipKdXg8hXatlYrffP8mMGEcTKj3NsXVqI1EVI8ammvoBxnYdq5yeQx7ShT
QdR8RrpILuIpeyjTCAwUDr1/eiWyQJJw2MUbLZqLgi91EmhDCeJ5nHQCrNnyT6CqIe49T+9WWekY
6E1pQdshsNkKcbyTuof3okfS32AympoOGUAAYCR/au5jivyEFO23VgjBoc3iUxMp1aupx7UtDnFv
sBOST5mjLOxRzj1NXnZepakqFEI2p7XkapWVxY+KjR7ZBnCzQ3bNTag8hXgFcZ2zYIQ5rSP/AAWE
NHoO1OrI3bKJdXoKq2SH/9k=


--301d393dadbd73c0c8eea95ef73f617c--





до нови срещи   ^.^
30.08.2014 profruit 

|

0 Response to "Изпращане на писмо с прикачен файл в PHP"

Публикуване на коментар

Този блог е реинкарнация на първите ми опити за споделяне в нета. На времето започнах с къси разкази на преживяното. После се обезсмисли и превърнах блога си в системно радио. Пиша единствено неща, които карат душата ми да живее: openHAB, Ubuntu, Споделено и т.н. Това е моето системно радио, разбирате ли? Моята вълна и вие сте на нея сега.

Архив на блога