From e7568e24b80777713a1360dfc3926dbed1288b44 Mon Sep 17 00:00:00 2001 From: ccunatbrule <32840852+DARKNAGAN@users.noreply.github.com> Date: Sun, 12 Feb 2023 15:06:08 +0100 Subject: [PATCH] WUI-CARIA1.1.0 Edit files for UserInterface - Signin, Profil change - Add fonctionnality Picture Resize --- .gitignore | 2 + DB/UserWebsite.sql | 26 ++-- .../controleur/membre/connexion/index.php | 4 +- UserWebSite/controleur/membre/functions.php | 57 +++++++-- .../controleur/membre/inscription/index.php | 69 ++++------- .../controleur/membre/profil/index.php | 113 ++++++++---------- UserWebSite/css/style.css | 1 + UserWebSite/images/avatars/CCB/img_user.jpeg | Bin 0 -> 38380 bytes .../{img_user4.jpg => DARKY91/img_user.jpg} | Bin .../{img_user3.jpg => FOFO36/img_user.jpg} | Bin .../{img_user5.jpg => MIBO466/img_user.jpg} | Bin .../{img_user1.jpg => PAPI91/img_user.jpg} | Bin .../{img_user6.jpg => RARA/img_user.jpg} | Bin .../{img_user2.jpg => sa/img_user.jpg} | Bin UserWebSite/modele/membre/espace.php | 15 +++ UserWebSite/modele/membre/inscription.php | 20 +++- UserWebSite/modele/membre/profil.php | 24 +++- 17 files changed, 190 insertions(+), 141 deletions(-) create mode 100644 .gitignore create mode 100644 UserWebSite/images/avatars/CCB/img_user.jpeg rename UserWebSite/images/avatars/{img_user4.jpg => DARKY91/img_user.jpg} (100%) rename UserWebSite/images/avatars/{img_user3.jpg => FOFO36/img_user.jpg} (100%) rename UserWebSite/images/avatars/{img_user5.jpg => MIBO466/img_user.jpg} (100%) rename UserWebSite/images/avatars/{img_user1.jpg => PAPI91/img_user.jpg} (100%) rename UserWebSite/images/avatars/{img_user6.jpg => RARA/img_user.jpg} (100%) rename UserWebSite/images/avatars/{img_user2.jpg => sa/img_user.jpg} (100%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2cc5371 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +Thumbs.db +connexion_sql.php \ No newline at end of file diff --git a/DB/UserWebsite.sql b/DB/UserWebsite.sql index ff2b935..5fa8e52 100644 --- a/DB/UserWebsite.sql +++ b/DB/UserWebsite.sql @@ -5,20 +5,20 @@ use CARIA; INSERT INTO Client (dateenregistre,privilege,pseudo, prenom, nom, sexe, age, adresse, mdp, adressemail, permis,imageclient) VALUES -('2016-09-12' ,'1', 'sa' , 'sa' , 'pc' , 'HOMME','20' , 'sa' , '382e0360e4eb7b70034fbaa69bec5786' , 'sa@gmail.com' ,'0', '/images/avatars/img_user.jpg'), -('2016-09-12' ,'1', 'PAPI91' , 'FLORIAN' , 'ARBITA' , 'HOMME','17' , '3 RUE PITI' , '83ea007bfdd589f29b820552b3f94260' , 'PAPI@gmail.com' ,'0', '/images/avatars/img_user1.jpg'), -('2016-10-05' ,'2', 'TATA85' , 'JANNE' , 'MORINA' , 'FEMME','5' , '78 RUE PARI' , '01750feaaf112c40293ac49b658b12ab' , 'TATA@gmail.com' ,'1', '/images/avatars/img_user1.jpg'), -('2016-11-03' ,'2', 'MODR4' , 'DAVID' , 'DAROP' , 'HOMME','45' , '65 RUE PIORI' , '81df18ab2fce0c63561642e298347e5b' , 'MODR@gmail.com' ,'4', '/images/avatars/img_user1.jpg'), -('2016-06-25' ,'2', 'ALLOO6' , 'GEREMY' , 'MILES' , 'HOMME','14' , '6 RUE NIOLO' , '83ea007bfdd589f29b820552b3f94260' , 'ALLO@gmail.com' ,'2', '/images/avatars/img_user1.jpg'), -('2016-05-10' ,'2', 'MAMA23' , 'FLORIANE', 'BOLON' , 'FEMME','25' , '1 RUE ROB' , '01750feaaf112c40293ac49b658b12ab' , 'MAMA@gmail.com' ,'1', '/images/avatars/img_user1.jpg'), -('2016-07-01' ,'2', 'BIBI' , 'EMILIE' , 'SIRANY' , 'FEMME','6' , 'MAISON DU CLOS' , 'd74c404f01c1e3c127118a8c1fc81212' , 'BIBI@gmail.com' ,'0', '/images/avatars/img_user1.jpg'), -('2016-09-11' ,'2', 'PIOUPIOU' , 'FLORA' , 'CERINA' , 'FEMME','15' , 'ALLE DU RUIS' , '7b5550eae68b75c98a58881cb968c6ff' , 'PIOU@gmail.com' ,'0', '/images/avatars/img_user1.jpg'), -('2016-09-05' ,'2', 'BANANA987', 'LUCY' , 'CARELI' , 'FEMME','18' , '9 MER DU CIEL' , '01750feaaf112c40293ac49b658b12ab' , 'BANA@gmail.com' ,'0', '/images/avatars/img_user1.jpg'), -('2016-09-30' ,'2', 'RARA' , 'SOPHIE' , 'BENIC' , 'FEMME','26' , 'CREUX DE L''HIRONDELLE' , 'dc6accf0ee16c9dbf4daf2b81c1e7fd4' , 'RARA@gmail.com' ,'1', '/images/avatars/img_user1.jpg'), -('2017-05-29' ,'2', 'DARKY91' , 'JONHATAN' , 'MOITILE' , 'HOMME','5' , '198 AVENUE DU GENERAL' , 'b54637201175346cc78ec20fa2718b2f' , 'darky@gmail.com' ,'2', '/images/avatars/img_user1.jpg'), +('2016-09-12' ,'1', 'sa' , 'sa' , 'pc' , 'HOMME','20' , 'sa' , '382e0360e4eb7b70034fbaa69bec5786' , 'sa@gmail.com' ,'0', '/images/avatars/sa/img_user.jpg'), +('2016-09-12' ,'1', 'PAPI91' , 'FLORIAN' , 'ARBITA' , 'HOMME','17' , '3 RUE PITI' , '83ea007bfdd589f29b820552b3f94260' , 'PAPI@gmail.com' ,'0', '/images/avatars/PAPI91/img_user.jpg'), +('2016-10-05' ,'2', 'TATA85' , 'JANNE' , 'MORINA' , 'FEMME','5' , '78 RUE PARI' , '01750feaaf112c40293ac49b658b12ab' , 'TATA@gmail.com' ,'1', '/images/avatars/TATA85/img_user.jpg'), +('2016-11-03' ,'2', 'MODR4' , 'DAVID' , 'DAROP' , 'HOMME','45' , '65 RUE PIORI' , '81df18ab2fce0c63561642e298347e5b' , 'MODR@gmail.com' ,'4', '/images/avatars/MODR4/img_user.jpg'), +('2016-06-25' ,'2', 'ALLOO6' , 'GEREMY' , 'MILES' , 'HOMME','14' , '6 RUE NIOLO' , '83ea007bfdd589f29b820552b3f94260' , 'ALLO@gmail.com' ,'2', '/images/avatars/ALLOO6/img_user.jpg'), +('2016-05-10' ,'2', 'MAMA23' , 'FLORIANE', 'BOLON' , 'FEMME','25' , '1 RUE ROB' , '01750feaaf112c40293ac49b658b12ab' , 'MAMA@gmail.com' ,'1', '/images/avatars/MAMA23/img_user.jpg'), +('2016-07-01' ,'2', 'BIBI' , 'EMILIE' , 'SIRANY' , 'FEMME','6' , 'MAISON DU CLOS' , 'd74c404f01c1e3c127118a8c1fc81212' , 'BIBI@gmail.com' ,'0', '/images/avatars/BIBI/img_user.jpg'), +('2016-09-11' ,'2', 'PIOUPIOU' , 'FLORA' , 'CERINA' , 'FEMME','15' , 'ALLE DU RUIS' , '7b5550eae68b75c98a58881cb968c6ff' , 'PIOU@gmail.com' ,'0', '/images/avatars/PIOUPIOU/img_user.jpg'), +('2016-09-05' ,'2', 'BANANA987', 'LUCY' , 'CARELI' , 'FEMME','18' , '9 MER DU CIEL' , '01750feaaf112c40293ac49b658b12ab' , 'BANA@gmail.com' ,'0', '/images/avatars/BANANA987/img_user.jpg'), +('2016-09-30' ,'2', 'RARA' , 'SOPHIE' , 'BENIC' , 'FEMME','26' , 'CREUX DE L''HIRONDELLE' , 'dc6accf0ee16c9dbf4daf2b81c1e7fd4' , 'RARA@gmail.com' ,'1', '/images/avatars/RARA/img_user.jpg'), +('2017-05-29' ,'2', 'DARKY91' , 'JONHATAN' , 'MOITILE' , 'HOMME','5' , '198 AVENUE DU GENERAL' , 'b54637201175346cc78ec20fa2718b2f' , 'darky@gmail.com' ,'2', '/images/avatars/DARKY91/img_user.jpg'), ('2017-04-05' ,'2', 'DAMI85' , 'THOMAS' , 'NIGOLE' , 'HOMME','5' , '35 RUE DE LA RIVIIERE' , 'b2ac9acf20fa3711eb6c8b00734adbde' , 'darky@gmail.com' ,'1', DEFAULT), -('2017-02-25' ,'2', 'FOFO36' , 'REMY' , 'MINONY' , 'HOMME','5' , '01 AVENUE DE L''IMPASSE DU CREUX' , '71b14f0cefc1b25455c3ca7c22a80473' , 'FOFO@gmail.com' ,'3', '/images/avatars/img_user1.jpg'), -('2017-03-14' ,'2', 'MIBO466' , 'OLIVIA' , 'MOITILE' , 'FEMME','5' , '36 BIS ALLEE DE L''ETANG DE MILLE LIEUX' , '857692b439598675d6f89db000a1dc0a' , 'MIBO@gmail.com' ,'4', '/images/avatars/img_user1.jpg'), +('2017-02-25' ,'2', 'FOFO36' , 'REMY' , 'MINONY' , 'HOMME','5' , '01 AVENUE DE L''IMPASSE DU CREUX' , '71b14f0cefc1b25455c3ca7c22a80473' , 'FOFO@gmail.com' ,'3', '/images/avatars//FOFO36/img_user.jpg'), +('2017-03-14' ,'2', 'MIBO466' , 'OLIVIA' , 'MOITILE' , 'FEMME','5' , '36 BIS ALLEE DE L''ETANG DE MILLE LIEUX' , '857692b439598675d6f89db000a1dc0a' , 'MIBO@gmail.com' ,'4', '/images/avatars/MIBO466/img_user.jpg'), ('2017-01-09' ,'2', 'BIIIBBBBOOPOPIL' , 'SAMADOUDOURELIE' , 'KILOPANAPONIKAT' , 'HOMME','100' , '325 RUE DE PARIS, 3 EME ARRONDISSEMENT , BRUXELLE' , '52b5dd8f28c934b7a4a3fd3d67835cd8' , 'BIIIBBBBOOPOPIL@yahoo.com' ,'7', DEFAULT); diff --git a/UserWebSite/controleur/membre/connexion/index.php b/UserWebSite/controleur/membre/connexion/index.php index 5112b6c..2503356 100644 --- a/UserWebSite/controleur/membre/connexion/index.php +++ b/UserWebSite/controleur/membre/connexion/index.php @@ -11,8 +11,8 @@ if (!isset($_POST['pseudo'])) { //Page de formulaire

Connexion


-
- +

+

diff --git a/UserWebSite/controleur/membre/functions.php b/UserWebSite/controleur/membre/functions.php index b1059df..ea7f472 100644 --- a/UserWebSite/controleur/membre/functions.php +++ b/UserWebSite/controleur/membre/functions.php @@ -13,13 +13,56 @@ function erreur($err='') '); } -function move_avatar($avatar) +function edit_avatar($avatar, $pseudo) { - $extension_upload = strtolower(substr( strrchr($avatar['name'], '.') ,1)); - $name = time(); - $nomavatar = str_replace(' ','',$name).".".$extension_upload; - $name = "./images/avatars/".str_replace(' ','',$name).".".$extension_upload; - move_uploaded_file($avatar['tmp_name'],$name); - return $nomavatar; + if (isset ($avatar)){ + $imagename = $avatar['name'];// exemple.png + $source = $avatar['tmp_name'];// /volume1/@tmp/phpiES0qN + $locate = "./images/avatars/".$pseudo."/"; + $dir = $locate."img_user.jpeg"; + move_uploaded_file($source,$dir); + changeToJpeg($dir,$dir); + resize_avatar($dir,$dir); + $rdir = substr($dir,1); + return $rdir; + } +} + +function changeToJpeg($source, $dir) +{ + $ext = substr($_FILES['avatar']['type'],6); //jpeg + switch($ext) { + case 'jpg': + $image = imagecreatefromjpeg($source); + break; + + case 'jpeg': + $image = imagecreatefromjpeg($source); + break; + + case 'png': + $image = imagecreatefrompng($source); + break; + + case 'gif': + $image = imagecreatefromgif($source); + break; + default: + throw new Exception('Unknown image type.'); + } + imagejpeg($image, $dir); +} + +function resize_avatar($dir,$out ) +{ + list($width, $height) = getimagesize($dir); + $modwidth = 900; //target width + $diff = $width / $modwidth; + $modheight = $height / $diff; + + $tn = imagecreatetruecolor($modwidth, $modheight); + $image = imagecreatefromjpeg($dir); + imagecopyresampled($tn, $image, 0, 0, 0, 0, $modwidth, $modheight, $width, $height); + imagejpeg($tn, $out); } ?> diff --git a/UserWebSite/controleur/membre/inscription/index.php b/UserWebSite/controleur/membre/inscription/index.php index 7a6c5cc..54f726d 100644 --- a/UserWebSite/controleur/membre/inscription/index.php +++ b/UserWebSite/controleur/membre/inscription/index.php @@ -12,15 +12,23 @@ if (empty($_POST['pseudo'])) // Si on la variable est vide, on peut considérer

Inscription




- -
+ +
-

+

-

+

+

+

+
+
+
+

+
+

Profil sur le forum -

(Taille max : 200Ko) +



Les champs précédés d'un * sont obligatoires

@@ -33,15 +41,17 @@ if (empty($_POST['pseudo'])) // Si on la variable est vide, on peut considérer else //On est dans le cas traitement { $pseudo_erreur1 = NULL;$pseudo_erreur2 = NULL; - $email_erreur1 = NULL;$email_erreur2 = NULL; - $avatar_erreur = NULL;$avatar_erreur1 = NULL; - $avatar_erreur2 = NULL;$avatar_erreur3 = NULL; + $email_erreur1 = NULL; $mdp_erreur = NULL; + $avatar_erreur3 = NULL; //On récupère les variables $i = 0; + $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' ); $pseudo=$_POST['pseudo']; $email = $_POST['email']; $localisation = $_POST['localisation']; + $prenom = $_POST['prenom']; + $nom = $_POST['nom']; $pass = /*md5*/($_POST['password']); $confirm = /*md5*/($_POST['confirm']); //Verification des champs formulaire @@ -67,43 +77,12 @@ else //On est dans le cas traitement $email_erreur1 = "Votre adresse email est déjà utilisée par un membre"; $i++; } - if (!preg_match("#^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-z]{2,4}$#", $email) || empty($email)) + $extension_upload = strtolower(substr( strrchr($_FILES['avatar']['name'], '.') ,1)); + if (!in_array($extension_upload,$extensions_valides) ) { - $email_erreur2 = "Votre adresse email n'a pas un format valide"; + $avatar_erreur3 = "Extension de l'avatar incorrecte"; $i++; } - if (!empty($_FILES['avatar']['size'])) - { - $maxsize = 200024; //Poid de l'image - $maxwidth = 1000; //Largeur de l'image - $maxheight = 1000; //Longueur de l'image - //Liste des extensions valides - $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png', 'bmp' ); - if ($_FILES['avatar']['error'] > 0) - { - $avatar_erreur = "Erreur lors du transfert de l'avatar : "; - } - if ($_FILES['avatar']['size'] > $maxsize) - { - $i++; - $avatar_erreur1 = "Le fichier est trop gros : (".$_FILES['avatar']['size']." Octets contre ".$maxsize." Octets)"; - } - - $image_sizes = getimagesize($_FILES['avatar']['tmp_name']); - if ($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight) - { - $i++; - $avatar_erreur2 = "Image trop large ou trop longue : - (".$image_sizes[0]."x".$image_sizes[1]." contre ".$maxwidth."x".$maxheight.")"; - } - - $extension_upload = strtolower(substr( strrchr($_FILES['avatar']['name'], '.') ,1)); - if (!in_array($extension_upload,$extensions_valides) ) - { - $i++; - $avatar_erreur3 = "Extension de l'avatar incorrecte"; - } - } if ($i==0) { ?> @@ -113,7 +92,6 @@ else //On est dans le cas traitement

Cliquez ici pour revenir dans votre espace membre

Inscription interrompue


erreurs se sont produites lors de votre incription


Cliquez ici pour recommencer

diff --git a/UserWebSite/controleur/membre/profil/index.php b/UserWebSite/controleur/membre/profil/index.php index aaa30f0..4ff4a94 100644 --- a/UserWebSite/controleur/membre/profil/index.php +++ b/UserWebSite/controleur/membre/profil/index.php @@ -14,13 +14,27 @@ switch($action)
-

Profil de


- Acun avatar
-

Adresse E-Mail : -

- Ce membre est inscrit depuis le

- Localisation : -

+

Profil


+ Pseudo
+

+ Avatar
+ Acun avatar

+

+ Email
+
+ Prénom
+
+ Nom
+
+ Age
+
+ Permis
+
+ Adresse
+

+ Inscrit depuis :
+

+

@@ -41,31 +55,40 @@ switch($action)

Edition du profil de


-
+

Mot de passe

+



-

- -
Contacts +


+

Contacts



-

-
Informations supplémentaires +


+

Informations supplémentaires

+
+
+
+
+
+
+
+

-

-
Profil sur le forum - Avatar actuel pas d avatar

-
-
(Taille max : 200Ko)

- +


+

Profil sur le forum

+
+ pas d avatar

+ Nouvelle image : +

+ Supprimer mon avatar



-

Les champs avec une * sont obligatoires


+ Les champs avec une * sont obligatoires

@@ -77,10 +100,6 @@ switch($action) //On déclare les variables $mdp_erreur = NULL; $email_erreur1 = NULL; - $email_erreur2 = NULL; - $avatar_erreur = NULL; - $avatar_erreur1 = NULL; - $avatar_erreur2 = NULL; $avatar_erreur3 = NULL; //Encore et toujours notre belle variable $i :p $i = 0; @@ -89,6 +108,7 @@ switch($action) $localisation = $_POST['localisation']; $pass = /*md5*/($_POST['password']); $confirm = /*md5*/($_POST['confirm']); + $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' ); //Vérification des champs du formulaire if ($pass != $confirm || empty($confirm) || empty($pass)) { @@ -104,52 +124,19 @@ switch($action) $email_erreur1 = "Votre adresse email est déjà utilisé par un membre"; $i++; } - if (!preg_match("#^[a-z0-9A-Z._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email) || empty($email)) - { - $email_erreur2 = "Votre nouvelle adresse E-Mail n'a pas un format valide"; - $i++; - } } - if (!empty($_FILES['avatar']['size'])) + $data = get_Pseudo(); + $extension_upload = strtolower(substr( strrchr($_FILES['avatar']['name'], '.') ,1)); + if (!in_array($extension_upload,$extensions_valides) ) { - $maxsize = 200024; //Poid de l'image - $maxwidth = 1000; //Largeur de l'image - $maxheight = 1000; //Longueur de l'image - //Liste des extensions valides - $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png', 'bmp' ); - if ($_FILES['avatar']['error'] > 0) - { - $avatar_erreur = "Erreur lors du tranfsert de l'avatar : "; - } - if ($_FILES['avatar']['size'] > $maxsize) - { - $i++; - $avatar_erreur1 = "Le fichier est trop gros : - (".$_FILES['avatar']['size']." Octets - contre ".$maxsize." Octets)"; - } - - $image_sizes = getimagesize($_FILES['avatar']['tmp_name']); - if ($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight) - { - $i++; - $avatar_erreur2 = "Image trop large ou trop longue : - (".$image_sizes[0]."x".$image_sizes[1]." contre - ".$maxwidth."x".$maxheight.")"; - } - - $extension_upload = strtolower(substr( strrchr($_FILES['avatar']['name'], '.') ,1)); - if (!in_array($extension_upload,$extensions_valides) ) - { - $i++; - $avatar_erreur3 = "Extension de l'avatar incorrecte"; - } + $i++; + $avatar_erreur3 = "Extension de l'avatar incorrecte"; } if ($i == 0) // Si $i est vide, il n'y a pas d'erreur sur l'avatar { if (!empty($_FILES['avatar']['size'])) { - post_UpdateAvatar(); + post_UpdateAvatar($data['pseudo']); } if (isset($_POST['delete'])) { diff --git a/UserWebSite/css/style.css b/UserWebSite/css/style.css index 2ab37f0..c0b6a66 100644 --- a/UserWebSite/css/style.css +++ b/UserWebSite/css/style.css @@ -10,6 +10,7 @@ footer { overflow:hidden; } .container-fluid{ + min-height: 80vh; margin:0 !important; padding:0 !important; } diff --git a/UserWebSite/images/avatars/CCB/img_user.jpeg b/UserWebSite/images/avatars/CCB/img_user.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..4105646b28062389a0dc79f48081ca0834ce63e7 GIT binary patch literal 38380 zcmeFYcT`kQxGmU-L%@B}3DKu7T57^-V>1WJnv zKIU+CadilI>CfR4;P4XSA42|T5ugenB_<{zCL$#vAt56pC8waLq_}sFf|-_%nx2j2 z5jz_TD=P<&2tNncV{TSffv19xMa3i~B_Hw2C`gOTi%3X{|I14V$jHbj?olvNQZk8i zvT}<5e?IsHMh+xgKJ?;|sYRsRDz)7V##29e zBpiLC$jBcsGBLC8^6?7@3Q2;bo=VHes;a4LXliNen3$TGgDotroc=bJn>)nA&p#kA zC^#fEIwm&m-TQc0T6#uiR`$mncyUQ-+2`^KL}gul1G=%Pxux}6Pj6rUz~Im@W*R$# zo1L3qSX%TDjZ+OxC<#p%oUBbI0|H6yl zPS9Tv(%dED6eFfpHX?EGq2m&dB&AnLEvoG%8WaMgD+Ca*g-+U#R`>%>HA< zqW)9N{tL1Hi`N2xf{@^E=MmBXo&m0Z!vqTN{Qvkj+Cb1piHN>P8&QHzd(ry2u}q~J z?5gl@A1 zMoyDFGO_&t?6t#~^XIY4)bmH0l*M9eLuwaBr?wwvl0C``%aB?SE^Ae$%66sEAl`|7 zG`cx6i1vZL^z{7J=cWIHPn1DoKXSlhMMgmb?YONONhy1r{2;xcR1cFfXB%(+q;3o^ zI$WOR`zEUMLoK!xLdeLS;4{FU*+NxxM~`hN?n#3Nd1)E(IY|X2mb%OZESw=lB(ZsG zoLN)$BwOud9;`JTae-F;2bkMB)&BG?S4V&5t4t<#JEwo>VVs#}86hY||KK;@GiU|N znb$kur`>NDIwHAYI9&~M{_ys4KQ~skUvVUjKzQqw6DI{uHo=$nyO2&>@a3x!w2ORe zgXUAj`S>A0pBkf(;BPoTL?3z=A)t4aLHm_VK0@IMV5 z#f-o*LuxAkX&;~9X!D*-p-WS%~j6m=3}mPuE7I{@6f?*w0$3^I==g18uED1E<*& zRMx=rrs<52;MebvUxscKfUZ3{E!Z-^or=&}hO=NBcqYR{e9(zlrpB437^Kjen@GlQ zX}!@zTMiI6oor&4SQe}yJ!OzZHed`4c`aEaV@QH&M0}hoIl`E$7{2lwUj3zBOys;k z@;ne3FONwgK-HU0ttWFl*|w-%sI0xyRFsftacW`HC|G6u)Wlf0-q{(K)T=xO&RU~I z%)GL%1+`}U7D}_Oi@!v2=^4>oAr)=4hP6y|B+H%#Mr|#QY&)vJi@j{9(2qvXJ})n{ zzIg1<6SQa>?y=lhc+DPF23>Kjo}4-G@@=e(V~66+4Y2KLLuc}6e5>=BLSo4IKk?|CD7L8!#TmTg3B1AS zkgJAv!$^Ug-grH&-A}0)CII-4!w45aVFa@Yo%y67d-U6gtwETZmW1$g@a9EPL*`s= zhS|IYU)ap@Qw=QW1G;hgur%MC)4L=xKSzON!xopis_V`J?s(fUO!Zv*Qub0o>lWEL zUC0t%w>ZD3>3N@x#wXuzXdinsOHuo?qX>Z?ku3c#%=5iKbwpT^WnaInCc)gnnux7Q zQ9+6I(WrUZ*GS2If0yPKxZ83M-+iauiPIX@ED3&b8IPF7zFB6J&P*-nQR_jH?D=tk zBAF#?DLc~?VIEGooBM~@M)C=?^vlnJ7-r49Vx{dB%}2jL7Wd2D`*fLvf|)8lSN1Ir zR_9y|F6&|-==;i+Y>SiKLmk{+^N!7ju(@G?vwPTq_L zm2wkz{II<;DE2Tv9VyAG>yQ=$YJb!q;YgsHsClMy@|EU_#O~*GZCfMlVr1V~%Xj8g zw=dkx104RSEAyBOH-rI=ewf6^^|V~mq~eqW3f$*!M(Xr{|E16&=y!jlb05IKBRV1( z$)$1>O2iBTm{k%8?C!(e#yAq)*) zsd)%o+ZQJO0OWs>?;Ng)-$(X3;VSzCn==Rpe^_6nuo5HzcUuJ497c$oD6O0Kt$Ex` z%~)?{i-X^4#v4g9ql5%$=a8(-&%qI2^AkjfhCQq|*Z#^LS;dNiu9gCX_ln}FvRb87PR#Ufn->5z{A4>Klo2Y)w zm(Tc6!e52-d-oDvm%xBO#odV zzOIe9%gY!jw0Fo&{LWC*W8U;0CAzy0Qq0MQBybUH>0UJ*K`?Nz;A?b@gH-j{=p7g_ z#cj=I3BSlkVL!i&djJu3Y8-Cx;k*ZB6^jxsSo-DMO_9(UY#y&cHhetn<+kMDMjGER z9qf#i3&T+#=3dXqHW7+H@?__C&eS$pX{{(-5nYDV_oCV??g&mJg$!&XOU8e^93}D1 zMO0d##xI5l91{AMHOqWw8xuX{L=<1FflhP!tqOnFs)toAkP&U6vF`j zeI!i&{pEGI1NtGm53|V`dCrhlt~o)Kw&D30#>|T}pGktH{ADCY(ty&+{dhp~1K!S4 zF872{A>ucBB))IDrzY&pz=J1j1{58KzgSm3thS);OjHowRU^KaVmWYz+FQV_%&T{l z3ew&P{BB5lE*eri{9+~Dj{cZIjBaNB(NhyTYi2p^`9Rrwrb#RE0(UP#g1*ZH4Ccg4 zo7f3aqe$DI3634u&C1ep18a68@^=H1?jn2R9@bG4Hx#we z3ThIhwnmAQRuP$-?0EE=F!Z_I`#6nX!pl4StQ#sd;etIVZOoum^iq~*XYvkBde;#SqQp~M=~?Se%j=duq||4~5)UFKp(w|) z51<35dz*KKlQptL3^CS^gc!Ke+8(h5v;X)8F6x3b%zwI+i104|mAJF?M*3!!T?06o zkdZmH`%OnThfJN`MBu;Q`~PoW$G=lvR$lt@pt3Ma9v}w~#C1thz;-36$tRGi7xAT{ zR!3btE(Npf-_Wn0u8G|XZ!(Wb2p?p9Q~FkCS43pyJ{O=;8sLAYW0cAi-?HyHH|)ph z?palxMar#i#%Agi#5Cr-B3Dv52-}T~>Mvcde{!D-?o%^Xs$4>MgfC1B(7&BQ^wV!tyACnS!&zmP=N=SdXKaA1 zVYn)AVbVj`R-V{%+IGz?N8l?*_#{|Pt-~-B8+Xb51I*Nfsd+uKs2eZx!ZA7tUpBq9 zL?=tY5qKRkW(k|5%VJy4Qnq$SJ!0<*6 zsXqV)UmkETo(cS}+NFMOF9sD;3* zTGjUr;9;LG`~$LA<6pi!I1A%N*GAq?A#5fT(M0^1JugdJ(I&QrpoolonL8ewWt9CS83&=Ik6S(~q9W$ z_ijA2LlPqnQBlJ5b-vD2F&#)wTFZAlA_||2zMCW9;v5qP?k*3wSbp#TJGRJ`GJGbtav`PpO#Fq}8HvNTo6Z#pVX=TS?=9FnF%Rzp=HmKsfOLD%_5YGyjKr z7PPJ?|5G>EGiz`Da&CAL%%AC{|LpN>)qoh~P@i4a!Yp_iU)vGy9ObgG_O)O&q+F%G z{0X-WC`cdN`EKM4Y`O7*bZpI5OFi%6^v>kh*MuuAcDJ+j%!0s@KSKYK)V+;s`&>ni)3e= zJUmNO;BSd!xiH8{h*o@2$X;NFcHKKjA7P!vY|X!P%)p~YT@-tceux{$Z=Y8oTp(ma zl1Y8npJzKuoPZIflHov|{*gD#aeiv$!>BFm|nw()Rwas&@LJEmf66MYUgUN`0nMkfHG z6~=+C6WU43q7?uJHaw>)Y~13V(fms}i^`M7x{)|UTegfOt$~%NabkoaHU`6@6oO2O z0!ezxpzjruUK8Luz#2a{9XVr|2r(_mcP#`HnQBbzzB+i+E}{UtcEpemY1xnU>`{JA z>}<&++#_rX!0}t~+8V8VYB_K$EHZ{B3YdJXo+e3slJpMkvs&vHs~%`toP770i1Ii@ zxtq9Z?>^HL9vg3K7~+Kk89xJW%NTYtk-H_bC{vZ&TN&TJVKZ&5huw-v5b=Gt(6$c= z{Hlm1fl1aPcKOz&Pkl%Sxqo%+kBxrWt7csGfRI_{L$!56G2nsD0j0kxIpW{?*9rC% zea0e~Grw{0eu_}gqhQ)87SB|(9SvqWNB!tgq`A+~f!(-{yykM4UYhw%5o{zmXMA!Y ze5p5F#7z3EzZDFF$n-N-FsyI*VE)cojYqF996pYh_*Zz&q>L$Qhyu( zMdX)CeUC=io2kkpg;sN$>4vdrOoKm{Q=28VijPHqxq{i;H&A$)nP;-|WRdNMuIix_ zf=HY3_&1dw2CH{pl>l>3VV95&>eAAGrh&!)&Kmh+ib$hD`B^9AcN8@U|Ayl$?X#@U zEwur(@k5D~CHI&qg9O<;+S4S?Wj<$(Nwq7wPUPZ!m)e}3$vym8%_o=j#R%5yu+ZrF zeN;K=WA*B^xvXHPi>sdJn+uG$H?T0emt+Lcf-*khPV7M|rORG|e5wWH7+Ieq+SouB z)!T0HBDUS{v#=p(!aoPo>RluW*l}cf3kY~Bm*>(k;#6cP6l17lS*~aM ze&7H4)9VZFX_vU76rk9q@2h+2>k||sppNnd&?o0R^P^Ry zhFz_ZxwJ|O>Y*PYWkrV$9s)bBC)9O$T%WoxGusApHgjOzSZ5(Cy!1wY{kQ)aFpf-D z0JjOc-FENIW?(A8re?gCO{0`%3YEfj*QNX_ zxWNW;aRI3VF&RaOlAP3-2$xg6f{J{ikvc3I*Sj|~^4CQ$%I}fSomJf;@f;PZUQ;)D zq0DlKcH&DiR}hf4e*t2t|GSeAyz3*W?Zwv}+_;UBnGLNk5G}$U3Q^I&tikS~#E=tmsg8r8#*NLg= zUDY47=4ho<;~e}rIlOC$k?aC5nttpKlJ%sp2j&66o;K` z0N|wqe$KPDLh@~C{pso?aGjm|EU#4IK9c?A&Fp!rma`)Xw7@xGEocB&XTVQX%>^*^ zVIy%cz5}T-yOy@BD!se^0+h41H8Gmnz*0Ny+VYHUxcDjap;eRB5>2npm)re`c4gG# zQ77s&XfmbB>m{6EJq&wD)O)1#!;~BIj|Q}G?ookND(4HG8`*#*C#MHV9=380gEl5> z55Z264ab9n)%)-15mnX^_fvPRRhp#MYw_&dn1bgsr5fGZ5?l;SOgzUH_zuRtEaE=^ z9Y(Ut!|Q?C{eOVtiLb|<;w~7x8bd#IFaK5c;C#dXhcTd3?zvqJkm}%H+m5#S#nQ3l z#jWwr@EJw;o6O;0>uy@%bJd{^qR(B zL1sK`W+=9h1FEb{BQnvpqg6t}F7yvDz#Xy+aL}99ln&xV%bhBfAIH_v7O?z6ysBJROG}#!#m~mC5TzwK6Vix3}PH(QE zYz_BUQzNJf*4WK>WVKtB;bSWu{P`$gttiN+e$iDV56X~H8monB8=@*SdzdIsYyApT zZ3Ujgp{d-8qPVF9DLduNu7wjc%jsVdh5FfyD=-i5E^1g$ot<*roqY~hKB*(9v|}gr zF0ZXosjpAclD^ZyBIzW+UQHp%PdHJQSoHF#j{D}US=FwzIp^Ya-f!7m1BPi?9=S~^@2mT>{cWZHyzl+5&+5oxj4MV6^nh&y2L<;= zW!>WVTTcCimr6wih`ZV;ST~~!JifPgYV+*dtnXg3yvg*WcO#>BV)YIFVKMD-NI#dF z7%oh~m0%n{F&38RKdTe5dTfz>84)F6`Kn6tL+ntcuZ=c$`1Dw)#p`DxReD*LalR07 z1&HUWi1_NMt`BLVZwtd*rN+hmr76P!QSR#J84bTnoaDY|ODd$@2cLbFy!6PnDg_CVvyRBx@?Q z+Y(_29IS~elCkyjC_R9F56;J50!ca8@h!Vs;@YRRssDrv0Xx)#K6-v3QTdkV!j2!> z-?y4BBKPTt9rM%GuOGRy1mER~cSr^q7`!LC3#$#6PNExAE0Cxod<5>8BPB`4w0w5# zO~=lBm><2Q&|dYgoLST-7s&dSFr{rpN>*Apr9`F`Qdaztg2Ksu*jrO)Y5LY6$hGLr z&l}uBa(hW>6%UL`o9w3oCc80aL#gdfs3N6?w#zawZ6=G9D}z-^9rW&V*8A6^`-iSe zB%s&qz`W@r4MzBqc1Cr`4CF){r7d`^=hvDZnGT-cftrco;m`uaEP@l64)e)P+4 zTy*2UQTP1Z>an&C1h|>_4JJ_fe+#kb8)X54O4*>`o*O5R*5$kk+u;++D-H*V(?=s9 z@idrcx{N^I&_S}(m0Q_c2Z*@Mxarc;+VPiYrh(`1y(dqe(nVY9aYh2}Zc><;_+tj? zT54z7VgeWs(`?d z8GHd>&up2Kva{9eXUcXt2*{e@@t99j?R%aHeJINuRPLjrC`9+;OHm>QZXzRGiFFEX z<(NN}uaAlkjP#_B%#VXSq)PjRU;09oE^z5tHWN>QPNt+Bf>F9Z9GV5ehH}HIT+Dt| zjPb!e{^?KmBjrK)?3$8ttR~P{3{%OKQM!I|h0eU5vw_CG{CTV}77e z%;_+I&U&f<__PPR6(}bcLLVVvK1#l8a~Qi5MCd&h5D3L{{IH$!&@5vXWC8~+djolA zM;ztA)?u$Af>B=QfN`ME7t!kHpY&UQ$?xw#r_O}6WQEdzL+k0!VqfjDAR?pcoiO?A zO(L;tKCDTj=hlO1>#VE(HPXinGuIwuL$cgkY zZ|}>VInjw-%kz>VEA6+{3kyBWA-vv2N)sDb0o7loOsbhiTqpAf&>mn!g_84!ht`-D z?X$j|Ium}-5?{>Ym&T8sD_3)!_$t}t1$baL@3Aot4MiK@39}~wm>4{Sd7NFKmK$?E zF#1(o`$^-PgXdWp_d}tF%dFxwjg7*t{o)?Iqg5TqOf3B4LC9?@A5NMW`H-wQd`|iX z4CV2#*(6V_rWsJSeQS}4<{NnC@yn;#y#48Y0cN1KVixIeLKu#!q*Pyd;XpC&^VFxA zgxU6Ew!}16Q8%`Cpz)QfIOs;KoGFfStQ2?hNKBi(6w|u|JB(w=HJg&}A45E>3js}9 zu&et8)?ixik#sX88kJNvde-9W&>z}44LvYp?`3hsWnv+Lvmj|ZRTsMbC5#acc4$pY zpJ8lB@OP{WMr0W2R9YMwY8SP65$dT75I4+fwP&h6)`KDZAPTkrY&!el%JhYg9&oAX zJxj%!9Ack>{1-?JLZ?jY?^Mw>=;0bRuyNnppUDnqF(#ZypH~>LNvI+E9sI1qwP+&z z&Z=5$27Nt5L&~RPL2OYQCR?v@%h-bu&n0S4zsHYB z1$ynzE6*`k;{yi^6}bRfpVVZd*=rbnf34QPBNL)pG|lM$SNz-bkP8$?{43}KP(Ri( z%X6wGe5cZC)l@pADGX{*5;h$Bc1=HVbLxe9-c--)PN-k{`~yv9Q?z#*>n z2y5FZDEU!s76DJ%IY*p9?gkaI9Piv}{d8}@C+kfen)bJwFV)7_0A$TI;(gobT^q|& z1KmJp^oLG+f;`1le(*ZVxc0>t4(uCt(N)VLq+=m(<3%DJqYxl!X@ldnEF;%0XLNL{7^#J*}!x_?_x=G{8}>B8-lA^3<$ zXbw!|&+t<}tyORrWqu(VN@rJ8!gtjd;`#3OP2YKq^(37DIvDJ4N4dg%eowXGc%j+W zMXz%Mb`EW`pURg5)1Y>XdMJFXXFfnxiyN$y-jNXX8-NPayh-;hgG4*Zx|uf6mQl~w z+ZX5OPD~(ZZZFJ@%R|4L8O((AHSz)DLKm*1A!1ff#@1@vRw#FP7HDI&=`B+=mq3oMAuV4e0a;Sw2>_7xcgcVae%R z&dq%GOhx7vI^Q*ee+OJ<|84yuzo0&>IJLA)GIJ?Z`CpaSfA(to_S=@mRcZ;c?{Q&6 z!DAiE`mIhX5_@m$0|L;X`9RE%PkP5*>48leSj_*&LU*ofB!dZp2OWW<#snCH}= zL27`4w;uh@6wL#n^H^u9dxCe_l}Th666vBv$bQ%@OI?Q~X1ox}}kqiZA9pvTpmC;4762*hY_g4sVNx>85BBqK|vp=O2o&%a#s1%_!! zpVC3;#nKEU*KCV-AUw~!->PS&D?z0l9TW(9N9{6ZBVAZwW`oi{tO8q|#tHB! zV93$}h7Jc2 zu`$<`U5xc}9l>q|pvL$VhFYw7qbyLzD6NHWs^C%;K9tv_qo>8kE7ZnX3!>k!zmGA7 z>tL0&)p<9Y%4tUm{N?(7U;wicLQ#_YJ?PkJI~nr>tD-Z zqc$^1yQuyEWdAN%uMcL2oVLb{v{tzO3Ysp9|9X*1e(~g;({Dku?cY{UPixri&<6z+ zW+IXVv|mKhq}FyCN8FBnX3_FgH9OGIy*a`Np%~n1b;wFz zwE=MNNMvV6G7sv3vd%SMg0H&&zINs(?K#&`bzGxxe2)W&_l+IDNIE)iAGI#B) zLEd?oJIff%vi?G>4c8F;R(Jx37%UL&b1+BdOxV>|fTP%D%`c+Vg60&UiUL==#(huc zQ4b9C8xWo53A>7xd|~YGxDMZ`a*DtHA0oQ=N)|QpPziS>lIS(z1%hX@ZMv( zvV>wb`wG58J4~gG%C^Eya;KedKfO#0@x{=coG}c1sA>r@>Q3$*$j)S_H*dI7oC#wM zkH;gn;j=&2UL2|~+qv+DAoCR%LSfs;;4nS)c*a-Cu)WUV+I|4Tr?tb+AXJpY$?PO1 zG3(uo5zI(a<}E;A37mfgBRa`-s;$w+ethf(KYc|zj=Yz90m|Y;X*hj=&etbTn*A%KNS9zmCz1ZBCTe1`elK8xEraltt&xU5bFoe)mg<=HObha(}M); zLr@5hKq>EqzW3pCtg})@MJY%sXzSMmDd@*e^tc6;x;L)8dJ4ZT2=!N|+a#ZCDu8rX zy|*apMppVN?B|R7$T;yoc*V0?Zq?#)NB{QJW?g@z@8wQY&&1pk%YHeCFI^5|W}NnX z*F=N1?=lPwLb{K=?AOBnf}Mp6Z@@XvD$t%{ya_2C$htDpVMfg&FeUT1ol_`d58zFK z&Z?rYyD;Sp3jK=dgztrr;|GlLWcm^HZ#lcvx9%^Gf(ZJQQC6Q@*5nRlVmx``KYsXp zh?2P*%3gAe(xINiV%K{>8ja=SlzIphS1_-8sY+4|QgDy-&~UaP{C_z0!nkIow2YN? zl4Ls63;C)h*ki&7J*e?s(0CE{WfdXK3LAsGMs#1I-md6&J9=@um_#Lb zFD8X>JRaDociBt-l@y2Uf3qRj%*;}9&AkeOYLD~J z7iDBK8n|$7E<7|kADK`uz?lAfmAJl+c_A5u*PSt%_2vp(2Cu7$X3jFC^2C?KDhVoD zdq@b|4Y=pSx*6GLn00@|?oc+dA0H@_Q}wf*d?YnchGBNZOA3xZXKK_=wapNEp~51_ zq9cGRBI0E(9TOFvqZkGv8vq|X=B~&9 zn4~Olg&l_xE&Ni$$gDSH%c4H_V=upWO_&Mp=+Suasfj8dJ%07>MZEAL9zd{f=P4_Z zkyh)ane$q?*<6mq7#cxgRtI$Il}-1MjTU{zbynplQ&aa1bK#G1lM8ZnxvPZAMEj}ZrhjlXUMHxtF@)y8s*yh^s*o7iu?IE zIt9p}@u1qO%Q?jiTmArj?^7rq+1B%Pl5=a#VOk+ESg-~L$y7?M{=+&Q{z$!WsjAA)iW%Q?6$1FEZUiM>L7iw@)h? zbJl?mi=Jd4#p53_f1`{0hpYIWoP{&>Y2Qm zpQt%k`ykc?EFWxUqJ1v$ilbkv@=MVe#HO__cSgYGRiA^&x@g6$n1jP$<*D`RCOIyW zA;ZLrbE6D0R8(HyDxP9*%BVnT?J_r`zj^z)E|f{zVl>&X1)XtiFi?cl?0s71)ACkm zB!zN&U#}|DQslEx!$z@l_S5vG+`&y)R5rb1*-*!j?<*gnzRYfPo3^G>NQIa_n}G3F z5WVyIQ5f~RfQFNlI3^C3y-$`2eV6Zae(F6lZ?2U#whUJQLVwdU`3%{!_=is0m8Lz3DmJ|Pl3d`sXi7i~TvDbgmEQ-Wzq)bgh`R|y6UmyW)U$8V;5 zdzU92=Hs}lgR&%EDv$ZJdXp3ROPy{5%rmkd8&yBlkb1h{IAqx*aR?F``caJ`tH)>dJe$)d`LZ?MgIZJUoVMLTl^42{sje5+sM@= zDN~erZd?WPR#&MpV1;EYa7yKk{{blDRE2U+cWp!3k}QY~jO;+rAl}l*$PG;EhZpw= z0YtxoKs%GYC~Jw?9>?j#Qp@AJ?%l96l%32+4I|w*Z0av&0t}>{Wk&MV9mczobVAeV zv5nGV7?Z&Gjo;Gs&=)kLTQuhOJZ8$tuke(9W_w@h&YJsT%YF(~B{^}w5^i>@X{6q^ zv(Ny}benD$e_FbzyFsDYg@623buTMLl{EZYfwuqXJ;A?$z%&?O_9y;p(At>Sq7mBd z&Qtc69>3HO1v%6t6&vMjVc;pN45K9#{`W|YRq?vqC~9x@*PXJnUtf#P&{_U8tPQa} zs-n&s{`Gd|4}c0F!$Bnxc{S@rRsQ&3D6NIQ!dM5svb&);<7U_>unj9D3agyfux2SS z;q^&3-Oe4oJ~V`R7fWui8Q)u~edX<_0Cin7?qbCO5cH{&xBz#R&l~#vGs{>0@;H^} z#*WMN&v`!~BzwB?b*34N0yaBUKL`MHRtW!2J77wjN^_r`_2+&dJXqgt6!sil(d^gf zmI@DR@f!nxU8GO?NA)uKl408*i%w%DRGr#jm7WF#(#IN;{W#uD03vvT&?c1}K1*-q zjg^E4h{7G|-t?1T(2vjW6O;V|Wggdi%HuCxRZiuT=XUWPcv;CiTh{Qp-&aAxW_@^d z!>3P9W^)t!SUxm%er{l+1t-t6`0R(dM%ntq4mAdz%15F7w~%EbQ&H^tQHq~9W5t+` zvQq>Zf)=B}+~;pg+EG?vXVog%oaltIdJ26*R<4U!^QMBr%bs$6hT7>T=R>)p@Q99s zG(|bnpJ^I;{)Xkld?TqMr`9atwLx}3sWDa7S#YT}@pcmf6FiBO%Qg5S*i-S5t=hre z^g1rWr6bDQ$Qp8meQf8GJ)J~{(%wN8*AM^+$C=&RAC)Jgvx82Rf~M0&Q$)`6j!9?D zx4`#B4aS&5`LMIXyItoc3<}kGeVgANy7T6%4r-;;K8rvCOZF(m-W{ZsBvtO1CXc75 zS;JK_@Q3vC`5J;ih`bn5hj_$se)m-1H~M8Tb??izxPtCKfX`EZ0LNxRrH@QBV^H~D z+(7y!NzfAZJI8!)Hy`~0q?Y^vtRs55*m?f|3WI)YB>w@x$|u-2|FLR1smI(tscu9U zs!P;96+@kJlFiRSfHM1H*B8eFvqT$byn2tXz|asHbIwST zC2(ZCT|csM^!l+U^BS@tGhJvX)PmKuBxw~HY!wbspdfqZ5IMh~OR^LKF0`k?Q z$b;rIwus%Qgxu=_{{WlG!WQxxkSJ?1U+)_g_9pyeKUxZZnFj~h1J7t)u zXCV90GbIX=Ik#u`$guRV`v%M}Px(qLF-~l97GxzJ-6jK^%;XPL{~HnEmv&4ro>C(I zJ7Sdx=gbz>dR&nlcvLs8v7Ak>;@bhPDczl^8fZDl4IgV#QmQ8XR&i)M{P?Vhc+AiL zZa7pNe@5kJIOYxDVCltrbtT-+7<&k`EC{rS)WNh?gxa7!?A37m#~-|PA*J_hlIo@H zIO_|;b(l3*DyzL)R&l-+gmAdzcMc=N?eK&=u<&CK>#USy9ZV883^oj?lr>K=GpjDq z+1ZP|hpbCS+$kC-7TPQ&FfDbk#Fn}Fv1Eh<(iAY^QI^`LIP0eh9_QJQDV?X6wjoDu zw*~{ZoX7VierFWi+?)NtUXU32qj&$~yLX4e^T)uk4ihZE?+>7edb~Zh`B`F^G~+L1 zfpXTfr6tvsw5+r?YNh|^EcWl!GxUa*{M2uSlYH>sA9B0D7*Zr+oAHH)E>4;?jX(kU zsTdv@M7XD?Pl|tUK=?SNnIeso$bwz@ZUFoF=x{7+g4x?xtNEFB(VKw7TS~u|zs(vR zZ;Xi%kwoTZvPmRRn2#5E7!CCUcSHj+Hk<^xrOCbNBSNRUP>Zwz^asX{d0O{G`kWcw11*${gi%;~v0;M_!!iGbjwT8pn;|AAyF_N&``_T$J;<&#X(U2OlYZ26?k<~$ zy`V#5mea51`Oc`SJjFe+mLhw_jF#fOPY*fn&Wwj&O|FIQUsf50i{%#Lx;SA?q*4D#_u(#s~ziE7O=T8+|_Pm8(;Sx=qoN_9@24Fl~~FnTSZHzT@)kDlyWtSJ)QJVwJLb7SB ztr{?`m0U->$p)d{-0y7t1N?NXaK1HDe&JH+Su>hA=`;zrXkTp(>#<(J20Xnc+k99N5KSwR!pV$VeYyg~fIE<-{2(YWg{*VVz}VP9i$x z#|ZgV=-i-;RM_0>WEwfYU*)+A5XQ^qUkX)8&)P{I73i!q{M7r~4R|g4?M&AZr=NqU zA(TyY{k?pBpsv;=NZ4m!e%dZfNb0D3%cfd7C<775q#!`t8D2bMx<` zQ9i{EXplbo=WjUYgBvyD5jrnR=aH{A=YIhE;Lng3_c)Z;Z&bNMsfYpsSEw;nB?Q8= z+zSl}KwZBq6u(H>&u`o5jV;fFJzZ-50NPVle+Q%FjC7mY!{RprmM1u1H{za({R})R zAFdqR{{Z^4Wvwh5bZE*H0R0{wQ)zamPrFiC~dYr9(c?F`2^Fe3goTkNGfdfYm2r%-D#D_baaqQf1bS67E+I4NtJT~ zX!OZZb8z*SiLZ}_&v!W9pHX$Z*BeD#^R4AY3J#{W_wIToPjMM_gb~Yi<10Fy58DjG zHAaU+*nXaR$JUMq7w0`Ft*Jc?9;dB-m#x6;r}m>EoL3Ecf;)xm#A6DI-fzZQGKmft zLN)wXXPa~c)rRv#%!Ykh%iss{;7`GESk4s^j#Il@q`d}o^!4*ShK~JDjP$EM8yk!U zCK)9i^x*fecN&aMB1$<0l_osuDbsa_1{sPNB8)JNv5efIro6(>^Obfyv_t|22`S9G z>zQ_dvL}0OH(-yde@sPS*}4qxEwN`V@& zLxic3RvJ`BQZcN>A^d&7tF0N~$0aUKcU|%#hen*D&&Z$2u8IRSUtp;a)wXsImhoCz z(*2ssH;(ndr6Pm*X(PoClzPUc#ZfSUYQ4X~!vEn7Q~BwKx+~mY{7f8T(Nuspq)L0a zm^%(68yalE_P?2J=EbK;mL)r-K&JYw8Uh}wp!9|Anf-NAZt`YE-?Pvb!-+hGNP(v8 z4@ipo1jbi+4A4k@L1leCmzNxuh!R(ZJgufLv`Z2C>dH*zZFIV{Q>1Ma-uuSn2 zGgN2)peFfhAW{z?paI-+`%tkx=J&=lIIyMYpTtpEbDyiKG=RXaWF5(HVx0sXDveUh z!+H~d&ZK24(V$TmUbmuf)EBhI`gU*^=%K3Mo}R{(H0s9tGn%u}B`BX=`_JYGvVmY&fG*J;-o zpf7^WoIi3nVOH?yxDzPSrgUf#Br7+%6%Aj&BkgpKRV+2MYUt<^tKVO(yqj_mZTMM< z%}jW8@T*yImwzGKAMv|RT*v}6X-z94XI=`vzf{8{gA%4$*i!s#9GBt@1Xo>|^oNQR zd>(iuXi-YYJP^8CqMooR(5ExxDSo>naaJujlDW((JuKEckOnj@Ue_ zPQH6(zHiket`~zoSRM=Y%3KrX*D-W#GJkW_1K&v$96@ZXOFRaVcv;sEtWKSWE8*oV zKeBI{o&8j77)b}bs1CCm+^`WKCnB7g_?)f~2*Yamy{?_s2w`2ETN zT>pM>ikJ|!ux+J6#x_9QLD<{*v{8^39l6qL-w`q`7RYnbi*NDhCtKi0MFm>E?u>UHLnw` zvDRgv7S8X*#2|2VlN9iJsyxZ7Zz;e;4db~r!;D6O7<}m>Y+mn<2D7kUIIUKH5S?m? z;VWuzZ7TRNy%!Jm4`9BK>bipEL8Dx^bg^iL?YvmIfLz0?#k%$C>uzZ72O~39xZfT$ z35YP)W<%1@C+48KOvdc@7(boBJlba`L^M6BM_A$82&-SLGqtP>9Ai(c%xp|kHCyUo z+n%hRC8~O!2?|0l9$uCCf4zr}Z7+Hya`mks$LT1%L*e?fX59)g+;yJS$;Z(fP$PUS zQg^dbHJwYk!EU2O@j4>+t@vA(gOQ9%)30hlTRH)i-%Fnd?axXs{7vsVK3n_GMymeX z=d42c&|!rhU-qOJsVR;N+TT@Pl3*XHT4uCJPS>{*?tMg62mHgbXkPEW0Q}hd(R{hK z_LNhx(w7=jw;)0Pu`lH9w;Cqvt2e)GrEX;!v21{p5j2OF?_BrLGl9cNaNXX62)1E@ zyKda&Yj)$bO_DE17l7UIqCkB%86LanlPY%}G2LiPEASzDLDsle$9s+&@hPPA;BG~g zTSD&~S6hzMaCxN7?=oi@7kYr#KU%5AlgndkKH_{?s`&5N}rb-CWzdA)aVeg^jvxJ)|i;~_E6gg`bbYTNNdBqMT zO2{YeM!mJFr`1>jEA355QJQoZh;soyXB-^GyPq0&+Eg>MQL^S|hFLU<+5BK{$BJsE z!q3-${hKrcG(6$ZnOnN1p_nl8Q7>4TH^^R-Q7z8er3OrX#clchq!A%ill z@O^H*8Lq5lWqWDF(YbU{!dfKg_@s;%XtA?nADlNk>|^J`Lq09TjX;(3S>1}2yhb$7N#BbieAodrgS>xDnubL2HAQ7lo*x$gtSHC8EN5$zV(EX&6qgGY<(h zq2NK0ovpWdK3uyft)x!>l8S|`Rp+h?LG&yx1zjwjKk2a2?(DY*I1$pL=bl7}e8X$c zyd_7xT_ZbKhukfSIv)!OV6gl(9VCa?_!3|7O$NXNgKvp)AdwiWz}H3fMUjl+Q^%0G$GVdCw~ zNsoSr?%O^{baSC9qg!E{iXKz|V(oDaAJ^`&9#=+AmwD>ILI+Qe=c~2CGR(%U4X&UR z?q6T#<+a61SO4{9OBMz0%-bX#NSKSXzbLg992<1n0e-^1;j$J0LdjA)^j`g{$X7U} zP~E>~$qtpuW>o`K2{j)9hvoGcqC9G-@;@}6-_)e%j^G&kr2~0U zRFX7NucLamvACGcQY`~N_uT-7>b3np04@ip;Bf6~{>+EZpXAwjhB*_8_q)SJj-P}l zJmE3*rHsIh?je8dn)0c?PB2{08o>L0E-6an&Ke{xlzS(GZ&;YS6I_x1{qJ_e^-Iw$ z7xlIrVnUO?(UULi4y8~{;XYe*T|e2rX>KD6eom`Uc!X9@U--I<&0}4SA$%`PYo^== zmzubo)8G)~@KQ2-Q$hq zHvc9n7SLbSdS>Z8(@(iB2((oG)!B0kF)o)^yXHP+U;&AlY(|}P9GAbRDfvB8o7v2N zNYO$4i{lTV0Mo44PN#Ds=IA$DEy36MiCRUH^M7mat%Kr<-ZbG(NFX5rLZERA4h;kk z4uRl-#v5teXS&I&>ukx{M1-n!Aiko&;HV4;{@HG|;kELVtCS%qTgx8wz_BU%vI0he-D$tEXDReEa$0(pRw@T-ZwQ&=N+CT0tN>HhFQ&u81&niwX{E;26=0 z0%mSk4jvYTp|8aJ>4D%!#Mym!dZB+<5K7eo&9T=b2As)UqC)PSFJBEPF1c&nO`wJ^ z8iq@aO!{7>ZfYb2cE3E%dFUlYcm^yf{gWaV#{vfUR61tq8XE zRVA?0r;R$wVz19QN~Pis&w@AJ>@}alo467%?X^{#@C&^2@%l|V_qe=@!K@MsorX|u9Xv2F;A&WevX`=-5KoDg5)cC4CqN`haLP+*=7O_Ii6fQ_>D})5l?-`xkG;a&i1!7!d99&0k&G(`YpYT${Agzp=cy9yy_@)oUp< z^DvmqJrMOd>CH5^!v5U5Kg61iC>MtuDC!Wk;jkw7xOX24wDb6q(>n#r{sBv+g)NW5T+da>T`Fg2Bw%&q31N}9Ku>LS7Oc0F@b#Yv)E{fc7U<4-i@U;>*Aq0 zcv#*M3xPMrpvRq>nKdYbhO@L!aM|2WH5bHJZVJm=9<;(tQr}fmcwbkDTBgoBKGU5% zM;r^*jC?Pi^NehG6s19?IXUC`Gi54mL6o!A{f9vYU4d;QT)k!ej%qTPcT*CUUT@Fs zOt)m3mJ?A^nbVD#Br-{_)Ga!im=GAf-@Qqb*2}GF_9dKhS$De*r@@JJxGuJysxe_l64Q!LQpfoF#kMJQDUb+{^`TWK{RQT(gK%^=3M&v`v${{ zixI_;vG#N}D32(!H*mM}#X0nL>KP{diS9myV`89k7uxlQVS0vloQES1ekDI-NpkGv z^LHI3wzV@xPBjnd)bcU}7WP1Ji~bf-!OXE2qC!`m>^;%G7I785-;m$F4L!g^vykeQ z{D(yV{~Qsh5I$rfy;od#_^Oq)_~A`12YiDmUQt#&SUkj3@rP|v}nlr`wr8)h})YH+6Ippokn z%uuqP8@i9NgVdmCF%Zh4Bp71C;1Tl8^#~PB-0QV%H9ZzS`eI-2rbpyzafVl`>TcUK zIdeO=-K(yBo>kz-o^PXH@@-1cfn?{E=~lP@0D-SDyZGW+dP)5f-WGFAORH+?PBFJ= zJg2pR_mD8%L*^UVeX)TrtA)8Ie24qSf*y*TCo$c$HBi5O{)CZx2b|kEnSndUP3bs` zB&NB_!_G%{^_vf^Ja-Wy#nTnehO1$l_ZTG0VV|^}W0*uP2DIfuR)$63THXh*m6T}J zB@bFUn~2k%=VRHzcgH415g^K?Y^etFnmGzl>dOP+>cF20fp|j7zg{~M0x7V$dFG^+ zST#Gm=jYE> zmk~vGS#!3JB#DgAT*4{{l6@AaZ8Lu2tIIApN6|3h0|8eXovuv_4b)zJIJmXPN?uRVhRmcC-$X(ag zeEkeSJe@kC{05_JY1B9m2LOorbSixv#((r=14l^2o+vYaXqNeowi7(T^}EIIpaDH6 zbH5+EHP2JL@vJSshT;ecM=fTGb`Wsv)Xo%+j^F#Uw}t3wKYx1p=VUdY==#(Ei^E*r zvKaNBNdX|;UxkrIr1^+ve6gq7ym{DXIB%@DZr9;aM6cGhJ ziRR4@o;rZpFUYd7?`}(i+{KkoNIdxjh%~2*&eE_lEA>DZ=d@=b7calZq5Vkpi2H&x z0XWmG9NJFCIdtYRp$>-BIj{YTOuJ5*Q)`_jGz1L#EIK+><-ItE2?JrF=O4oRh^g{ zYcLPoaR2k6f%d(kY~nGF(1VLDT}!E*E+K}PB3iL|O{d&kj8h6F=8u~6JH}FB(Jgqm zk@xFmKG{pk(7Ku-HYEBi!?Eb+;ql@@x79`FZlBX)U716Z zVbP91(ohkD>vvD5PHloT@6zPRqM#zKC|XAg{)M0b&Q9?!@tFV7=Vkp+{=`S354@|C z&wToiwPk|8f@dv^<b4TUN-^p!j>&RYJwIe!2>3j(D?6^sy2g8&Q_Q6WXz$ zFS_6_mG`2W=!B7uxQ;n+HRp-qcH89c@4)lh#7AbXigJiO?sl(@OxQbg-oo{RV3x-; z7T);fVo&`bZ}_xhw=Qy38j^6Ox!LO-J%u(AE(2=bt11p;!fAbtZ!!ZqPZ+QEW=yAC|K;7vg=X#dh#{Wtk=8e8Dy-#e7yrOGOh5M7nqsACQf?SqD0KJYsnp zKTLC9>_Vy`sqBDExH|$-988Y+_FYl?7QR=?6Bv5M=LL#*5kzsjAaSDwb#`jtK8^Go zh$jwoz|-h-nEUVpdMD9t^1?P ze~6mWTkws<)G4J0x{9m2D)FgY(t zdmd{`bW~HGwJ2`3n?su3DQO4;d~Djew={V-VY(3`oOEn-635crW1F?Qx6I-dRul3a z#%bhh=BQLe4|OwkT9aB}6|+IL!x(|q4=h?%h#XS96X+u(BwB+5%eUy+en941KO8*) zYBq9zR{12?8O9Jh`Z2ow-l35@ForVyn~oKtn4-u-2Q50hAo7yLP|;jM^)cpKB9YK1 zU~eHu7lStnag+bM5IMw{h55|+2bcxoaQ464J`s-Ip%`4)VheWUD-ifl3|8h>gPSfQY-K8JHzp3o{! zoG2HDBNS0)I^@eSE=%|c;!krPlF2gbrTkL=qj#SeyCh7sMjlA8au}_n8*ip5Pq`7_ zlOz}pH~ToP7oJoEb@*=b_Q^$D=Rkvxx5?w`rbyqRo#q3hVyM07k(&kIY}r23=x<~# z9iK_Q*ZOZUyWt8cBflzOH*AUKR-)VLXMwZkfS*SpJ3L%0=7X1=HO61(rV(>;`v~t> zy=#L3(U_45HRvzkF);O)h!#k)W>F1)sIvl_ z{C=XmQDauk&jkR41Np8>by}9x&Hd<=#r;R7XxH0`7$I(mr}?i)B03$b=xD;y4ts@g z*3POou!!DGKBCNTibz=Qvw9aIj72z~zi&vW0<}g+G~bcm`Fwi_^c;B8@$PbED2&U1 zQTt*br}qMwz?3S@$9#*hXPWMSi`dN=fA!d7H#b)X9o&V``R!z?jsYh1pM#?)OmBPx;rwdE}nhFtpp+4a-JzEh_ zdRb_i(hA4cBKlEuMXaUN1*66=S;B(44T-rs4>d|1A@rSIM@@y1_m*BE@Dhc7jpgs8iM)`cWiMTptYB!fmJmygo&)DT1D&_<&VuxyYX z5!z?53V`nHvVKXQywjtP5=_4)VB8Rf#urt6Gd7afIeqrTSCvpWcUx}mp{U51(8|xv zgck&}G*k^P;zlcq{MQOkIiEyRe`&nBq^8e)=`!EGP$)GILXZW5^V+4$dr|w(pndC! z&1OV$hK2L()IEP*v`_KS4+da-`I5RTPrh!11-*qD4JQ)jxr1tfNrt%sQ6uFTr*31~ zLplNYODMi~hEBCO<1qHo2a zo|*ye7jFZRFmvcA(tHPOoKiI%-wSItzma8;>I7=Zo-WI<9?VrZfx7=m8|7sBh*1a<^Q zC3H45x&HzLzEn!_?|)}=*strOxajZ3IV&F+@S_B%vGci!TLdF`)f?!EcONoGW z9|We^etbr;)b-k%+dFYcbG7;KU*^PgUsV#`>2}OoKVMxPb7P<&0HsQ!wI|T5uyWFT zV1c-~LKd*#V?oQZkg=?ysA-$Ni6vqcXZ~5+NNk9 zNj%X)?xCSbl~_Ujmz#IOIdt6Kp9XF`$-^hqrB|5e4mh5ZhIXfmPl6;b}ee+3t1l1ne5ea=uv9Vw`7j! zH8fitsq5T9+)(=h_OH+na`~?nkK`>Jgo8I07y=FlZ}oJUoCrs`y;>K$qc0)m&M--3 zf(gSW5_gcGAITimnG~O1``9R6v8~MShemOyx><>aNn2idR@EB(eu4H_pi_^S&rL)m zcS0IFx}!s+T(eD?a;_ZNn~|Ls_KTY~tQ@+6q1wirD6ZaAW-UK;2g$$a+V6jv2*6jX;FaFQ;drAVjH z{mg4yp}a}E_fS!`olI;yyIVvj-s+AHBpOZ=r=lK8uW~sbef#sJJs#cew1!gMn?#P` z>OmxIOaizWsr6u{;nm_WA5GEO8m5C#e2_)vd^EbW*$g%rI-78QeRf&=iY#hy%tMNA z&T`sQ6q>Lj!Wl9<_uHti)j0u2+08WrClrr)A^JyBUm6`lCx7!7{J#KHoTTJ|gN~-2 z7_W$^ZduWM=+G$yOymBmRjKgyUZX~slgT#4E{{HqHN@BJ^qu9KD(%|@D&{s;(8^%Dm}VGq@tqT&*GEIN?9nVDT8bGKh>4|SCj+) z56nA#PdhsO!QSv>9Yd?}UGy&ie{Vt?3jSDW*?9iu35Q6A;fs1N3tmubhD1v?*a8;b zT3;C`rK^pIcxfTwrmTJ}15DVL9KiS05)0<^r|3&lDru^6WI}x1hVqggdvMHYCMpU| zr>zASD{F~SxsoCTJC5w^xR~a-hX$aKe4m~69?G`@MW{I=p?y~s9`0#f2_dh^Kq4HG zlG)j|WUoW%Ci?*#85IN!C~1B|k{+0oGHpo-K(ETsfhS6GZivSvO?1 z)62!q9(RuU#7jZ8bTnTHwIG*&-h^&)Wx;nhu?mkgDH+$KY!f)@v)hMixB>ou<9B;6?uvVmKyN>ak#j#9`gWCk?nl5F}Iuvk3U4$+Vcj&ryj8r6NE!TEx4Kz>fGcsSK42~3XsX_G?jHR;h_*ES3!D|invE`{ zxc0ZWH>eIm+@PV{wN@^E`-yM+s3qlLZ`Uy(Atn;7h~ah@h4OSXEqKS;!{GY) zRJNe)7{P;nuTF|tpWYi~>K)Uzoaq9OFC4@|jV&Q(reEO)@PdnHi;t1?Aeh~cYHwzP zq{2+u>d9u=d+8L{yEMubzU%Vum-Y|R~RBJDiqYA)x+mt&wE%@@K1WWETjOsG$mPq5IE#Kq!&U_>e#T#&fH>bCOU(*SB6W0MT7Z5QngF36rKwPc zf0#cF&+qo6=rKgcwtM}$GyopFUSt0e@KzM0BAJPmKPc<^*HG^N8P`EeozETOK70$5 zQ%ETJP}7W%9J^qAWlbBqK5$+ItWx?Rgv>N08!2r+?|=B~A*Ct3c&x^K|E-+llFAsn zHZ_5ox#JrZ7TVi+yUJXn5J%@n-P-USK$Vor=O#>+x`0Wg%u0x>@UxiP+T)zMO}zZ8@4dqdWX0i)Xr@n!9}j>Gx*mI0d|| zM#|F}4iBm{zX0LA4{|%(4^2&i17t^{p$IKE~mu zB6T+a;f>Q(_9S5S@>rWLJWqnEP`EAb()8{aZqA&eENv*Df~zJTpJ;^tDG8C(!0M)C zgh-rCq?K1NjG2A1#Hhl_yE5}h)Ac6uaUo+t;#)1}F>)e@s7rad){j?E2fO51?)ls{ z#zH}8{S}XWlc{Yh{g9R)`RxIy z`NxR^(@0PqhiVFRM`*;msXf@e`N29Oi^ol))WxuNRgoq|+&ap^H5pikq)-gWY68 zL{1epRmx3c=N!b%W0Sik0+Q6IFBVfF{u?taHKhD7Qa=e zC1WDG{|;Y86$w^83lMJn=1f~+A&M2RL$T#yq0<)YfcT9Mi z1QHWA-@iB;ZIz>B8j-pLkxo42hlU_v*YX;d0DOG2F@ z9aJec`;)~pkk0tiJA^vPDlL~5*Eyc%tS*7^=P6f*da<5<%v94f%E1t^3SgqSH_^Z* z-Z!6(N7c0Fx+XC3rT#DAdl4273QNF#2Z@D>md{+WeQM}F9uHgy4MB7tI@p~F*yQkg zU;K*4a)xVm{z+QuU-E|kv(M=g&W10?8fNR8asfdS8VR#kmbrO``}ip$*cKUSA=lbP z?-Iw?Q;Ac*FvvW%maxq2>9Evnx|2ML#G~A30b!Z zK|BvJwJmz|J`y{~JFT0NOv6Iael_=wj6JM!yNVXIL4!Iaa@Inu4gnpfjH?Qz2$G+paz%?4 zUdg9pC~$nm{p~K|Bx)^aDRQs9`-WUpxXWFxJFA zcue(BgYP59n9BfoxJlpcTEcfnd#6Hyak(&jffH1%bt8O`n!rGD zPd;F?$Y|7siJf0F#C8w1_nYpUv*#eQc5X6`N=)TA^ox{!YJ2|vTf2y2{k+SiRwB}| z)@ZKhBpA|#@mmaGmA9fCHX|-zvcD^0+>WKDl#BjH@Kf&p z2XI{e`5up%EQ+2fF+&7 za;3b@G=AR>7`fc++MA zg3ogqE}ci3CbXbX;BwK66{Fmf9UJ%~Nqbihcmk6>_5B(}l)FF6gHC^Lh|N+4U4!$i zqrrq3pKgYLBLS{cGz0%ETS&A{x!YC#0+UFI$B?PE+}nT=LgAUWjRX znB*4!z@J`Xfqnj}_H|M(`VaB+c68Mj-S^qBV)JdwVBZw>;dzM!W{}>)30jy-U(WM1 zC2bE}tH#qD6tuydgoIl8gOqm3)1$(@1-E0+{Y z+Z!6ZW79XrPH-}BX-^Upyec_?10P5xA;u%*Sl@!pI{(P}S^IKopP_uu63F@q-@dVJ zSi1{r(mSV9i}J7?m%iYVrELn5}N z>ldgXM!YSHGDk?eXnJ+egU3D4z8BJVYv?u-N%*Bl%gL=`dhgTfP3mCBt5pFf{M|%3s24#bj5Pw zJo3j?)f}JR^lkl$2!~z)Xy^kmt#-!f-KRvHzTYd!?^<%fY856_tLnFP*Kfc~qh8~j zFzVvgCJ0{6)nVUrBPH|ViC1|pC3eC z5>copR=WCFIZ3^r0?A*!R!W~X-x1N(NpCEzsG31eP7>3%884210b}n=tH$^@R~2%h z=f(9cHN$iO?{yc#;eI)Kwz?S3M-fNAYt-yS_6=D%Ve$hiM-p=QH{CpFmLQDoY^?k{ zlYILdHQ9GW)HFe+^2%iQHrmDeyf;jrt?_RLlO86Ms6hj9#R8d2ciV`}hM?EMRP zZge1Ks4rM}{EVQP?eyNhiBjXIwc@6P`n$oMaJ`tIZ`dS6G|V6e^AdoXzLbjjUc`1* z^{VE4d#MK}G%dD1ZH=$3H9F5L3jCc&Xy&-ka`!_WN>qR4T(9vHacz^UapyT+-c^<8 zTxl#wk>FCm8_Clk1U+^d_ur}Ju}QUMRS!g^qD^f4e{kW1zSU!H5y9B!XFz!+;O!O) z0Zl-|4VIYNQV{e|doG#lXbdIkusSL49YQN$K$Q?w`M61%1v+KkkiE)=Ihm8aVS%4- z%3cZMtTz!+idXKgV?KKKH$YHvd2pV97Ls?z0}^OSl%4wr(9wb6alE+w>eM?qrP z1;qQP673M;)yX{h?!s^KzNPp#UHv*7DPqY^&)S;%Z3}6hZ{T>z*2N{GOG~T>AnK_@ zbWkX!(33~^iOs#7l*6h-a*oRs{Nu!D|1wU*0n5x;PYI!n6<&5c*^0L1e8-flq2?bl zhFfTji?kv7QVH=37Ny?>ULGvu{}NdE*4Uc+=5wY~!`jn_i{DuH0JOO4U}q)6;d;@8 zJ?kG;mRb`wek?J+Qr+(p4g0|tlk{WXsa&z4%~p&g+bg0)@qiQ}htP6&m4P;G0tM7= zjo*fsHK+L8+s%C?j#`>3Aot1=pGHiA-#l*i6ONyd2Bu(vG2MoioZ0MbB1224DpwZC zg!$XhuUg(x*Oa>*LL1qx21HNsATOI zZC+?#iS|He0=f-wjt?4h;*bQtm{UGq1swa}>?H#TVO_N&~EHdxcte^M1YYvTH zRT%!TRKAoJCAca~mS~jB?5W`^G&7#?4HKjAQ%4cDaK4Yw`Tm^uDd{m?X~VnF>H13v z^xR_2uYcNfS#nL9aag!#e<2U`g}O~j1txFX>mG7Rh?chDm-I!FHa(S}LWAfQf@pstCPhWjogk-^T z7&{k?-%sCJL?@A|_T;h6v>YdmSwoG%UIMCaf{B9zTqpfew@I2LC$L)5S#V~*WvTIg z0q)&wvZf);i+@A1`QCrhnESzsDow@xEEpv0DVR~|q8z2b-<8NKGq`(R?vAqCvtY@xp4<$J_ze4^eFE-lWhbh_K*`NE3k36_ihlhrV zQzS)%CLDx0xWbh%6n>B>*)~^o#fA{fvAPk(W8zb-Fq{Y2I#0B2gb*`Fr-nF0%l^n; z>bNqp%@gSq(7a99MKyOv+TY{29!?^l1pixreUi-Kg92 zj(hQL^{s{OZPpwI#cWYVE0z`bTY=g~B3invr1$+)*+UPF6}4Tdbv|(Vu;5R1#lD)O z3s(<)oMKNCPNo3R{+LH_b?PokQHho{ro5M+Ich^&WN)CuAZNp1@f3^6PmW_W^KoLz zM}Jb?cH3^D9-useDXA8U`X*({_s)Ohx5JhO6CeG#qS+~P}9d;N0SsA#;c1L zFlnbJi|BIvDl z>UTmysMDmw0jQond`MoTt`C*I!P()dIOx}z?;q$3GFcsxfRFOO!^!E*yTu<{QBd%k zpMZPL6#mH7o{8>sNf75bYxD6~phb~&{4nSj^sP;DJ`zx{D=3Tq2i;2kpKS#VCR9lL zk){fNo$TM75-t!AwT-<_(_VtA+WQdn@o4F1iSZs#(1fTsoZG=X4qB}AUnw->i%?Vy zWch~VTnp57B=ZYAKcz|pYbjM^&_o=X63ez1(&;%*TYp)PbxY{JE{}TB&pWs|UksP4 z_s~k4U~SvC^rb7crm;d+LTcRk`83vgnB!b&;4#kLIexlfEwMVF95C81`CPCZO}VVn zZZwttbv!t;#al1kHj7?^x3HY~>wmGZu8INCeBxdXj!;72;HU z6FW~UN@3Lrz7yh@VZ`uvEl|4n`aHU4YYs^=oaGB*4HPN)sUc)=uo~mv#^;FRg11y| zJ71vW<)k9x-PEY?(8c}_k-d`tA-eDmWuT%=c3zJJsja4m>)=s7xFv+isZUikhyvh@ zksqRd{05a6GpSW;Fou%R_pKmmtOIH~NjGWBU+D4Z*=8DvdN&C2f9*=0?B6kgN>oaR zx^hxFzGw`LS12o-gvg}z=pN4Jr7kM<*FX&M4d0yaMxiv<-u6CHG|YL$U`CaALeGg( zSXqdPj9`w6?O)8Ui=H2g+R|fYV{LS7^N9PPGR$+!TXXrc59Mq2BMj}EXQLXP@ZQXw zNIfFt7#ia(O>$Jp_2-4dUw~cQ$YqIu0zaWXUFi5{y~sp zOW36xJL%jLNR58sOvkg~M9d@-qVRwYPga_$uSJXIxBXWlXKl?hvfOQ^s`#fb+gePD z{M|XP$MSi=9RY^DDnRC3Z%-)de&R!YCU_#q{hx&$ip+2RTryTY<{o9yu%c@LrY=sX;1EwP zSn*986@n|9T1@`T7Luz&DkVXL=0g;f(b=oMWxvYm5W2))~-5518P_puQHS~{=J2&q3d3!k#+W9i) zF|x2R;kP_XWY!g&H^*M{D3Sl$B=_W>8`-s<2B%}LXp-TFYS1S*&afK@hz3d$@Hl{BS!1p6=eTC8`0nsC_Iza%ly>qj^=0mm^b z3#O>by>UrU9Q*L@A=EdTUUG8XZn>JZiAxc@58bZ25Uu zXf9S%u;rR({|k7i|80@hf6p_u!+raOlf6ptCZ!)%X`OaAr9Po{u5Vcz_j|S(^cN6| zI683}lE6Qw51|?>N!t9tdK7jSK;V!lUt$sWt7tztvZ|iYW2|9u&qUDmvkXpS81a|kz!ek zc;Y}$&R!gr{nR2Jc?3hw+G@p&xoeB~>Mz7ZZ^xERvqqE4l{nb55Q0db6UrOJT0n9d zFy*TTDHg-RLm_d72aZ*r-P>;}<=)Ffn_8?W@ZjtVHy+i3UbREJ^05t>+^Mfcko61v zL5M||nT52w_1hr{E;bhM=RO`syQv%SS^W<)@skuND%WwffU2oVgf8UOwq&W`$rH!Q3X-t$oY zoTM_()$mBuMAcy0Q*WFCg$vkhln>0emJmzLbn$mQA9{Ko1>D>=VrmFbYF-gARStMK zU+MJ{f6ab@u#$`AKJBRLv6(VWP6!3XfFY*dg}B5AlKVm^%!A=&^!!O_x5Kt=e3XER zkV2B6e385*yu-zjVqQle;3xW%!2+=3albQbhUJl&Cy=3u+P4@MwyYt!hV2XZ(w;1` zj^nFrF@+nnp--GeWZ#&3Zjcj3yLpMFp>0{RkX;GF`G=`wAEC*bZpy|w!77(Wy2EUO zDJ7}Yt+Tyv73jU2VyWCAvO9bs&$_A}=%rMaPq}_69Vt3b85GLoZjVoVR4~VWK>l_w z$w2nAUttt~k9a3aQFgL>2>}B85BCu)$G;p(RAIg>8owXwGUFWg`%)I{mL>ZkCrd4{=EC$ZYU`JXr+IY>$n)3Jmxo5;b@)6t5qW9ZGbX;(|0a-rd z;0-?q{6G-16aAf%_I0nBr3eNVOS--`>s*1i^y(WAlYxcV)L?!*^1(mhbDWO{E%iS< zxc<>#`go*3sc&_W&ueA7>CM3YMNpQd&=*sq^&C(yMteJVuR!&e(8VS^T#>9lE6*i4?3WFq7`#d!=`W03G+qfY3Z|GDwQK@8 z_3J*|A}b`79fS9ZqqTxkyHMD=Dmt$H183Axaa3J2yfh3+Rv9)LAy1D3Pag<+8&&P< z;J%Lb?%~_6hKB+JVhNzJ-x{yW-J671T2{JrUW<&pu2Tn06DR3Nc$Ia=o!vp2qvdzn z86O(>M^P}D`Ml6ixSDWSsSA0(CUR<`c3#!zHp22bB7X@(Ml!xQL=+5sJz=K)`UWk9 zK1Oxl_}oQxBy2s55?m6%)&<@M|Bqdi{*!|Ee@pTJ_iI?Ys?Rs$_cJ>6JOQP+`YAV2 zNfP<%XNt6-gKr+TDEo8M{qK)G?8Q!Fb@qDqXXz~mt71@Jr0{=yJ@P5+S&E*xF-q%C z8;VaN`L0ZRPa3(?a!#tN6eBQw`r<_#FzYoQZtJHzs4d`+(8NlgZYyLQQaU)6ppm87 zMq0ti_(5eiMt!q7b_-s9v|PR+ze81>YJ6_&xu;T6rnWd9T|Iz{R^-qg>bF<4OqkRZ z&b~MU6`Pknbn}45ieI#oXf>7t4)wo3YbOYPSN2$FOhRYQGX74 zsr}|UttmyZ>pk#nY`k)^=$LGZ<|XTdU@8t^{W3Zy8?{4gq?xNXd*X7UUtc$9{E5!@*!Wc+JtcU< zNq@O=Zsusqt4SBDbej|sG81wNwU>Y_nC%Vo?&kK5GG9|;`2Yt0$oZxJmuYItgWeo6 z@;xnj_PU#5Ut>y!Uh^H%2Cy{N^P7vOWr$IjbRZGnE#FAqiKL=S34x=@QuaVBY`X)` z`19Es61TMUtwnR>`Ciwx7M5DB^v+{oiT+dlq0K7|EQy<*`)JFR{=*%^H7y1-Fv@$f za=tiClutSZ+(8kKdA`y!#+LZeN)q^IqFzF8Qr(a^@Gs$CRIvIUdVJNmjb_c%u+?rI zcuYp}rzehiw_0QPVTWq3o*e3yv{HkG_Eajk)G|_#eZ}Ci3KBy^%=l)|TJ2cCj<9C( zl~8Oi*brADta)knC#M9hb6bVKH}cvRW#{9a)BEH>UFoo-4DhL!a7pw7t*x2^llCe zl_}QQzgH2QFZ6K)C{2_au;7Lk`S^a3j7)E@0nFWOHY2@k7(Tz<|Xl+edU77i(g}xV9o_Ok=!>W~Z!gTCbw%C;rGb~2e zA<|W)=g)rf!XVEpkyS%?a_gCb;$>CLr7>Pafb9nT6I5jaa_p&ER@dUYTDR22FUDWl zcPYE7#7Yd*A)Z&~RUOBM#vNWbc&xP= ztT#pfx_mfvw4p-5$TdrktgAa(Z6l)V~06pIy4-6tNjdG{s3c9{LvIStkwMY>2nh#XpWnqJfqYGLzXMSYzVG=W4Im^(<>PWJT&n_qg}E`+!^{@zqZoD{}u#Qd(v`h4FQGI`RjdM<5r4ooum zb1*(Fzs#jU^m*t2EON6C1$iAR*b}jKAappU;<$yZY?jTj!rsCE$bRSl^xZW2Jc|lG zlDlC96gCf)Skf{8#GxN%fZ&_}6{t`8NH{`-i{!`Bvm2o?5w z?tyk(O8query('SELECT pseudo, idclient FROM Client ORDER BY idclient DESC LIMIT 0, 1'); $data = $req->fetch(); return $data; +} +function get_allMember() +{ + //NOT USE actually + global $bdd; + //Cette requête permet d'obtenir tout sur le forum + $req = $bdd->prepare('SELECT cat_id, cat_nom,forum_forum.forum_id, forum_name, forum_desc, forum_post, forum_topic, auth_view, + forum_topic.topic_id, forum_topic.topic_post, post_id, post_time, post_createur, membre_pseudo, membre_id FROM forum_categorie + LEFT JOIN forum_forum ON forum_categorie.cat_id = forum_forum.forum_cat_id + LEFT JOIN forum_post ON forum_post.post_id = forum_forum.forum_last_post_id + LEFT JOIN forum_topic ON forum_topic.topic_id = forum_post.topic_id + LEFT JOIN forum_membres ON forum_membres.membre_id = forum_post.post_createur + WHERE auth_view <= :lvl ORDER BY cat_ordre, forum_ordre DESC'); + $req->bindValue(':lvl',$lvl,PDO::PARAM_INT); + $req->execute(); } \ No newline at end of file diff --git a/UserWebSite/modele/membre/inscription.php b/UserWebSite/modele/membre/inscription.php index 4a4d50a..c4a87bf 100644 --- a/UserWebSite/modele/membre/inscription.php +++ b/UserWebSite/modele/membre/inscription.php @@ -27,14 +27,26 @@ function post_Registre() $pseudo=$_POST['pseudo']; $pass = /*md5*/($_POST['password']); $email = $_POST['email']; - $nomavatar=(!empty($_FILES['avatar']['size']))?move_avatar($_FILES['avatar']):''; + mkdir("./images/avatars/".$pseudo."/", 0700); + $nomavatar=(!empty($_FILES['avatar']['size']))?edit_avatar($_FILES['avatar'], $pseudo):''; $localisation = $_POST['localisation']; - $req = $bdd->prepare('INSERT INTO Client (pseudo, mdp, adressemail, imageclient, adresse, dateenregistre) - VALUES (:pseudo, :pass, :email, :nomavatar, :localisation, NOW())'); + $prenom = $_POST['prenom']; + $nom = $_POST['nom']; + $sexe = $_POST['sexe']; + $age = $_POST['age']; + $permis = $_POST['permis']; + $req = $bdd->prepare('INSERT INTO Client (pseudo, mdp, adressemail, imageclient, adresse, prenom, nom, sexe, age, permis, dateenregistre) + VALUES (:pseudo, :pass, :email, :nomavatar, :localisation, :prenom, :nom, :sexe, :age, :permis, NOW())'); $req->bindValue(':pseudo', $pseudo, PDO::PARAM_STR); - $req->bindValue(':pass', $pass, PDO::PARAM_INT); + $req->bindValue(':pass', $pass, PDO::PARAM_STR); $req->bindValue(':email', $email, PDO::PARAM_STR); $req->bindValue(':nomavatar', $nomavatar, PDO::PARAM_STR); $req->bindValue(':localisation', $localisation, PDO::PARAM_STR); + $req->bindValue(':prenom', $prenom, PDO::PARAM_STR); + $req->bindValue(':nom', $nom, PDO::PARAM_STR); + $req->bindValue(':sexe', $sexe, PDO::PARAM_STR); + $req->bindValue(':age', $age, PDO::PARAM_INT); + $req->bindValue(':permis', $permis, PDO::PARAM_INT); + $req->execute(); } \ No newline at end of file diff --git a/UserWebSite/modele/membre/profil.php b/UserWebSite/modele/membre/profil.php index aedf436..2f453bc 100644 --- a/UserWebSite/modele/membre/profil.php +++ b/UserWebSite/modele/membre/profil.php @@ -4,7 +4,7 @@ function get_MemberInfo() global $bdd; $membre = isset($_GET['m'])?(int) $_GET['m']:''; //On récupère les infos du membre - $req = $bdd->prepare('SELECT pseudo, imageclient, adressemail, dateenregistre, adresse FROM Client WHERE idclient=:membre'); + $req = $bdd->prepare('SELECT pseudo, imageclient, adressemail, dateenregistre, adresse, prenom, nom, age, permis FROM Client WHERE idclient=:membre'); $req->bindValue(':membre',$membre, PDO::PARAM_INT); $req->execute(); $data = $req->fetch(); @@ -14,8 +14,9 @@ function get_MemberInfoId() { global $bdd; $id=(isset($_SESSION['idclient']))?(int) $_SESSION['idclient']:0; + //On prend les infos du membre - $req = $bdd->prepare('SELECT pseudo, adressemail,adresse,imageclient FROM Client WHERE idclient=:id'); + $req = $bdd->prepare('SELECT pseudo, imageclient, adressemail, adresse, prenom, nom, age, permis FROM Client WHERE idclient=:id'); $req->bindValue(':id',$id,PDO::PARAM_INT); $req->execute(); $data = $req->fetch(); @@ -32,6 +33,17 @@ function get_checkMail() $data = $req->fetch(); return $data; } +function get_Pseudo() +{ + global $bdd; + $id=(isset($_SESSION['idclient']))?(int) $_SESSION['idclient']:0; + //On commence donc par récupérer le pseudo + $req = $bdd->prepare('SELECT pseudo FROM Client WHERE idclient =:id'); + $req->bindValue(':id',$id,PDO::PARAM_INT); + $req->execute(); + $data = $req->fetch(); + return $data; +} function get_checkCopyMail() { global $bdd; @@ -44,12 +56,12 @@ function get_checkCopyMail() $req->CloseCursor(); return $mail_free; } -function post_UpdateAvatar() +function post_UpdateAvatar($pseudo) { global $bdd; $id=(isset($_SESSION['idclient']))?(int) $_SESSION['idclient']:0; - $nomavatar=move_avatar($_FILES['avatar']); - $req = $bdd->prepare('UPDATE Client SET imageclient = '/images/avatars/' :avatar WHERE idclient = :id'); + $nomavatar=edit_avatar($_FILES['avatar'], $pseudo ); + $req = $bdd->prepare('UPDATE Client SET imageclient = :avatar WHERE idclient = :id'); $req->bindValue(':avatar',$nomavatar,PDO::PARAM_STR); $req->bindValue(':id',$id,PDO::PARAM_INT); $req->execute(); @@ -72,7 +84,7 @@ function post_UpdateMember() $email = $_POST['email']; $localisation = $_POST['localisation']; $req = $bdd->prepare('UPDATE Client SET mdp = :mdp, adressemail=:mail, adresse=:loc WHERE idclient=:id'); - $req->bindValue(':mdp',$pass,PDO::PARAM_INT); + $req->bindValue(':mdp',$pass,PDO::PARAM_STR); $req->bindValue(':mail',$email,PDO::PARAM_STR); $req->bindValue(':loc',$localisation,PDO::PARAM_STR); $req->bindValue(':id',$id,PDO::PARAM_INT);