From fc4e8ae8514e728cb115796722c1d59cc1d7c4f9 Mon Sep 17 00:00:00 2001
From: essae ";
- echo "Exception: " . $e->getMessage() . "\n";
- echo "File: " . $e->getFile() . "\n";
- echo "Line: " . $e->getLine() . "\n";
- echo "Trace:\n" . $e->getTraceAsString();
- echo "
";
- exit;
+ foreach ($this->routes as $key => $route) {
+ if (strpos($key, $routeKeyBase) !== 0) {
+ continue;
+ }
+
+ $routePattern = $route['pattern'] ?? null;
+
+ // Handle Closure
+ if ($route instanceof \Closure && $key === $routeKeyBase . $cleanPath) {
+ Logger::info("Executing closure route: [$httpMethod] $cleanPath");
+ $route();
+ return;
+ }
+
+ // Handle dynamic path matches
+ if ($routePattern && preg_match($routePattern, $cleanPath, $matches)) {
+ array_shift($matches); // first match is the whole path
+
+ $params = array_combine($route['params'], $matches) ?: [];
+ $controllerName = $route['controller'];
+ $method = $route['method'];
+
+ try {
+ if (!class_exists($controllerName)) {
+ throw new \Exception("Controller not found: $controllerName");
+ }
+
+ $controller = new $controllerName();
+
+ if (!method_exists($controller, $method)) {
+ throw new \Exception("Method $method not found in $controllerName");
+ }
+
+ Logger::info("Executing controller: $controllerName::$method with params: " . json_encode($params));
+ call_user_func_array([$controller, $method], $params);
+ return;
+
+ } catch (\Throwable $e) {
+ echo "";
+ echo "Exception: " . $e->getMessage() . "\n";
+ echo "File: " . $e->getFile() . "\n";
+ echo "Line: " . $e->getLine() . "\n";
+ echo "Trace:\n" . $e->getTraceAsString();
+ echo "
";
+ exit;
+ }
}
- } else {
- Logger::error("Route not found: [$httpMethod] $path");
- http_response_code(404);
- echo "404 Not Found";
}
+
+ Logger::error("Route not found: [$httpMethod] $path");
+ http_response_code(404);
+ echo "404 Not Found";
}
}
diff --git a/app/Core/View.php b/app/Core/View.php
index 7288ef8..142ee2b 100644
--- a/app/Core/View.php
+++ b/app/Core/View.php
@@ -2,7 +2,7 @@
// ============================================
// File: View.php
-// Version: 1.1
+// Version: 1.2
// Path: app/Core/View.php
// Purpose: Handles dynamic view rendering with optional layout wrapping
// Project: Wizdom Networks Website
@@ -33,6 +33,10 @@ class View
public static function render(string $view, array $data = [], ?string $layout = null): void
{
Logger::debug("Rendering view: $view");
+ if (!class_exists('View')) {
+ class_alias(self::class, 'View');
+ }
+
// Extract data to make variables available in the view
extract($data);
@@ -68,4 +72,39 @@ class View
Logger::debug("Successfully rendered view: $view (no layout)");
}
}
+ /**
+ * Renders a partial view without applying a layout.
+ *
+ * Use this for modular components like hero, services, faq, etc.
+ * Partial views must reside in: /resources/views/partials/
+ *
+ * @param string $partial The name of the partial (e.g., 'hero', 'faq').
+ * You may use dot notation for subdirectories (e.g., 'admin.nav').
+ * @param array $data Optional associative array of data to be extracted into the view.
+ *
+ * @throws \Exception if the partial file does not exist.
+ *
+ * @return void
+ */
+public static function renderPartial(string $partial, array $data = []): void
+{
+ Logger::debug("Rendering partial: $partial");
+
+ // Convert dot notation to path and resolve to full filesystem path
+ $partialPath = realpath(__DIR__ . "/../../resources/views/partials/" . str_replace('.', '/', $partial) . ".php");
+
+ Logger::debug("Resolved partial path: $partialPath");
+
+ if (!$partialPath || !file_exists($partialPath)) {
+ Logger::error("Partial view not found: $partial | Resolved path: $partialPath");
+ throw new \Exception("Partial view not found: $partial");
+ }
+
+ // Extract data and include partial
+ extract($data);
+ include $partialPath;
+
+ Logger::debug("Successfully rendered partial: $partial");
+}
+
}
diff --git a/app/Models/SubmissionLogModel.php b/app/Models/SubmissionLogModel.php
new file mode 100644
index 0000000..1a39f8b
--- /dev/null
+++ b/app/Models/SubmissionLogModel.php
@@ -0,0 +1,68 @@
+db = $db;
+ }
+
+ /**
+ * Log a contact form submission attempt.
+ *
+ * @param array $data {
+ * @type string $email The submitted email address.
+ * @type string|null $phone The submitted phone number.
+ * @type string|null $ip_address The user's IP address.
+ * @type string|null $user_agent The user agent string.
+ * @type bool $was_saved True if saved to contact_messages.
+ * @type string $reason Classification reason (e.g. 'valid', 'blocked:honeypot').
+ * }
+ * @return bool True on success, false on failure.
+ */
+ public function logAttempt(array $data): bool
+ {
+ try {
+ $sql = "INSERT INTO submission_logs (email, phone, ip_address, user_agent, was_saved, reason)
+ VALUES (:email, :phone, :ip, :agent, :saved, :reason)";
+ $stmt = $this->db->prepare($sql);
+ return $stmt->execute([
+ ':email' => $data['email'],
+ ':phone' => $data['phone'] ?? null,
+ ':ip' => $data['ip_address'] ?? null,
+ ':agent' => $data['user_agent'] ?? null,
+ ':saved' => $data['was_saved'] ? 1 : 0,
+ ':reason' => $data['reason']
+ ]);
+ } catch (\Throwable $e) {
+ Logger::error("Failed to log submission attempt.");
+ ErrorHandler::exception($e);
+ return false;
+ }
+ }
+}
diff --git a/app/Services/ContactService.php b/app/Services/ContactService.php
new file mode 100644
index 0000000..e77052d
--- /dev/null
+++ b/app/Services/ContactService.php
@@ -0,0 +1,42 @@
+Hello,
Thank you for reaching out to Wizdom Networks. To complete your contact request, please verify your email address by clicking the link below:
+ +If you did not submit this request, you can safely ignore this message.
+– The Wizdom Networks Team
+ HTML; + + Logger::info("Sending contact verification email to: $email"); + return EmailHelper::send($email, $subject, $body); + } +} diff --git a/app/Services/NewsletterService.php b/app/Services/NewsletterService.php new file mode 100644 index 0000000..4446bf7 --- /dev/null +++ b/app/Services/NewsletterService.php @@ -0,0 +1,115 @@ +prepare("SELECT is_verified FROM subscribers WHERE email = ?"); + $stmt->execute([$email]); + $row = $stmt->fetch(); + + if ($row) { + if ((int) $row['is_verified'] === 1) { + Logger::info("Newsletter signup skipped (already verified): $email"); + return false; + } else { + Logger::info("Newsletter re-verification triggered for $email"); + // Optionally regenerate and resend code here + } + } + + $verificationCode = bin2hex(random_bytes(16)); + + if ($row) { + // Update existing unverified entry + $stmt = $db->prepare("UPDATE subscribers SET verification_code = ?, ip_address = ?, user_agent = ?, created_at = NOW() WHERE email = ?"); + $stmt->execute([$verificationCode, $ip, $userAgent, $email]); + } else { + // Insert new record + $stmt = $db->prepare(" + INSERT INTO subscribers (email, verification_code, is_verified, ip_address, user_agent, created_at) + VALUES (?, ?, 0, ?, ?, NOW()) + "); + $stmt->execute([$email, $verificationCode, $ip, $userAgent]); + } + + Logger::info("Newsletter subscription initiated for $email, verification code generated."); + + return self::sendVerificationEmail($email, $verificationCode); + } catch (\Throwable $e) { + Logger::error("Newsletter subscription failed for $email: " . $e->getMessage()); + ErrorHandler::exception($e); + return false; + } + } + + /** + * Sends the newsletter verification email. + * + * @param string $email + * @param string $code + * @return bool True if sent successfully, false otherwise + */ + private static function sendVerificationEmail(string $email, string $code): bool + { + try { + $verifyUrl = $_ENV['BASE_URL'] . "/verify?code=" . urlencode($code); + + $mail = new PHPMailer(true); + $mail->isSMTP(); + $mail->Host = $_ENV['SMTP_HOST']; + $mail->SMTPAuth = true; + $mail->Username = $_ENV['SMTP_USER']; + $mail->Password = $_ENV['SMTP_PASS']; + $mail->SMTPSecure = $_ENV['SMTP_SECURE'] ?? 'tls'; + $mail->Port = $_ENV['SMTP_PORT'] ?? 587; + + $mail->setFrom($_ENV['MAIL_FROM'], $_ENV['MAIL_FROM_NAME']); + $mail->addAddress($email); + $mail->Subject = 'Confirm your subscription to Wizdom Networks'; + $mail->isHTML(true); + $mail->Body = " +Thank you for subscribing to the Wizdom Networks newsletter!
+Please click the link below to confirm your subscription:
+ +If you did not request this, you can safely ignore this email.
+ "; + + $mail->send(); + Logger::info("Verification email sent to $email"); + return true; + } catch (MailException $e) { + Logger::error("Failed to send verification email to $email: " . $e->getMessage()); + ErrorHandler::exception($e); + return false; + } + } +} diff --git a/app/Utilities/EmailHelper.php b/app/Utilities/EmailHelper.php index bb9e136..7ec3b39 100644 --- a/app/Utilities/EmailHelper.php +++ b/app/Utilities/EmailHelper.php @@ -1,7 +1,7 @@ addAddress($to); + $mail->Subject = $subject; + $mail->Body = $body; + $mail->isHTML(true); + + return $mail->send(); + } catch (\Throwable $e) { + Logger::error("Email send failed to $to: " . $e->getMessage()); + return false; + } +} + + private static function buildContactHtmlBody(array $data): string { return " diff --git a/app/Utilities/SessionHelper.php b/app/Utilities/SessionHelper.php index b956a8b..00bce6e 100644 --- a/app/Utilities/SessionHelper.php +++ b/app/Utilities/SessionHelper.php @@ -1,7 +1,7 @@ = NOW() - INTERVAL :days DAY) AS email_hits, + (SELECT COUNT(*) FROM submission_logs WHERE phone = :phone AND created_at >= NOW() - INTERVAL :days DAY) AS phone_hits, + (SELECT COUNT(*) FROM submission_logs WHERE ip_address = :ip AND created_at >= NOW() - INTERVAL :days DAY) AS ip_hits, + (SELECT COUNT(*) FROM submission_logs WHERE ip_address = :ip AND created_at >= NOW() - INTERVAL 1 HOUR) AS ip_hourly + "; - $sql = "SELECT $timestampField FROM $table WHERE $emailField = :email ORDER BY $timestampField DESC LIMIT 1"; - $stmt = $pdo->prepare($sql); - $stmt->execute(['email' => $email]); + $stmt = $pdo->prepare($query); + $stmt->bindValue(':email', $email); + $stmt->bindValue(':phone', $phone); + $stmt->bindValue(':ip', $ip); + $stmt->bindValue(':days', self::LOOKBACK_DAYS, PDO::PARAM_INT); + $stmt->execute(); + $data = $stmt->fetch(PDO::FETCH_ASSOC); - $row = $stmt->fetch(PDO::FETCH_ASSOC); + $emailHits = (int)($data['email_hits'] ?? 0); + $phoneHits = (int)($data['phone_hits'] ?? 0); + $ipHits = (int)($data['ip_hits'] ?? 0); + $ipHourly = (int)($data['ip_hourly'] ?? 0); - if ($row && isset($row[$timestampField])) { - $last = new \DateTime($row[$timestampField]); - $cutoff = (new \DateTime())->modify("-{$days} days"); + $totalScore = $emailHits + $phoneHits + $ipHits; - if ($last >= $cutoff) { - return ['submitted_at' => $last->format('Y-m-d H:i:s')]; + if ($emailHits >= 4 || $phoneHits >= 4 || $ipHits >= 5) { + return ['action' => 'block', 'reason' => 'IP/email/phone threshold exceeded', 'count' => $totalScore]; + } + if ($ipHourly >= 3) { + return ['action' => 'flag', 'reason' => 'Multiple submissions from IP in last hour', 'count' => $ipHourly]; + } + if ($totalScore >= 6) { + return ['action' => 'notify', 'reason' => 'Cumulative signal from all identifiers', 'count' => $totalScore]; + } + if ($emailHits >= 2 || $phoneHits >= 2 || $ipHits >= 2) { + return ['action' => 'flag', 'reason' => 'Repeated pattern detected', 'count' => $totalScore]; } - } - return null; + return ['action' => 'accept', 'reason' => 'accepted', 'count' => $totalScore]; + + } catch (\Throwable $e) { + Logger::error("SubmissionCheck evaluation failed: " . $e->getMessage()); + return ['action' => 'error', 'reason' => 'Evaluation error', 'count' => 0]; + } } } diff --git a/public/assets/images b/public/assets/images new file mode 120000 index 0000000..6aa9f65 --- /dev/null +++ b/public/assets/images @@ -0,0 +1 @@ +/var/www/html/dev.wizdom.ca/public/assets/img \ No newline at end of file diff --git a/public/assets/img/person/output_webp/sa-media-office.webp b/public/assets/img/person/output_webp/sa-media-office.webp new file mode 100644 index 0000000000000000000000000000000000000000..0962a7231d55e46cde907dabff5c0e912a14800e GIT binary patch literal 18230 zcmV(vK^G#h)!sALGUP~1-$u{Z6;f#R-mtya zDTKL~fH^PU7LFv;g7la)^cvwKgzM0&(c}T9<5d}%WvNSdXNn*O_5_5gr+emHUo;BR z)KUa+kLU9lvWnawFTYtBuF7<(%I&`#VwUc4jj4D=6qpIpm~NT5W{wzh>@Ze)6sGdb zB~mtA8ez!YS_ZU`bFGXb+M5?WZqtuv0@qYKvUrl@l>VBXbysLfvID{8H Lc~HQvui9VOxE`_7_jRUrC!&6Cv@Ws4=E=o*1(YSSTn{QaAO3D!ULn+80mpDy zAikL%(7?<0(eDxNHon1;sb5Njv{RooO*{*U*N%YPd*%gykdP%#DMn<3 @)l9%-MAe9z!VG6o(hoSCAKmh*iBiq-v zl-HwKLxCmaHlKi1_$P{<4xse_H36cerq`$TqhG7KsFTRadcJdQ@zjt|p5|4E_kir{ zL&*g)jmjJ8^^|cy?>-GUN c$ODSELJs?-HLqW-;=sqEE0c z3sr_f65MHuO_dJSB?0Mo9G}Y34T|8ceQb)Ld`i4~5zp~;jGxy$j>z%Y7Pw)5mVYs6 zbfWdM!au&O(4a~i*0mq@!m!}~oNRv{)5B>3jzQ$tGtcmCSF G%K#-2!Y_opU8kNd5<6n_~I#h zb8sA9@!Q1rNZA+pIcPkcwq6Ev_ y265D`ZmVZ|saa;Nyxe#i zf@U#gZKAZ6gr?1R{_A!tV(2y6*Nbv_YRP;AgE}8ncU_BJ7;%Bv`Xnrl;g`N=_>><| zs_(TUWvZLEn SY27&r)J2)ZTts14?yR_V8qFZO*^w2i0bOI{hMLnY=T z hc2#%7+SU1ZiXS>0-=I&zuS|UuwGQ3K*x#&L_}Cw2s8=nXL*>P z$65zBY3Pf&Z^oj6h72_f0a=KIC!)s0+bSsRim9|N5+0S_${hrsMDYQmbD4#4!TlkU z%N`*)80$yiJv|@OqhqcwS~4ZOhAXmfOxxluI9EokoT0#?M(lWfLiDwmrmKTSw~dBo z5OcV1wtLDT{>Zql-)ofv7;Fy}!$yB!bKr&J#2$))ORMWj+u4*GQ@H1fj#$ekMV}aX zf3L~%8ojWDJpTrw@ihRYB49rHp-GFbdJNfqQv+dcvD7 HX+XLMO zgHWy@6CSo8#_6;YCDCB(OG^&3#6*S)6h++*@G>SCK$VhlO~IMr`Y!B3jpeB#UdO zbhM_&cmTFD3EU=n3T6j nCU*8nbdepavku&an}H3cNuT6Zi8>b zL!d1frnlNe=uio7|M+O~X 9ewFabu>cooW!5!dadAhq1BZ}3sPDdd&Y>ueb(?`!$IlvR3IGB$?OybayQ((( zw8`$+dIEmDepxD}(~bD{vbCTSC6L5xpp`zDqt#&&R)RA7!V_LGFYp2z(d<=2(CMNJ z_FuMRFR5{gad^e3kGWm1tHZi!>2~{)8+oTR#$=a}&+Vr amX2 >=MChlJIdg)o(O5jd+C!wIT2;la)U*9xbRTtyr)ApVHI8+VA#zGf1_ z`e6zIdQ2cU19#(rTuRW~pqi+IFaK$MQL%aXLI?4&Yj9DMAiPDztY<>i4Q%GV!;;xi zUS0pb0ZxF?^#|9l3wIiP5~zmH)TTNC!%cgoT>?TNX2RE5f=A$s98%9wu$FbxfE{ z1@Z`$#@jk;o)7zo0M?4uy`(}w&S^1zbB2~{*id9LMX@+ZCtyNL02b+~j`XlLWjAYh ztxaXJL%iL(>FEyMr$}3twFG){uZP!~l%L=f(a8h}o5Fa!d5lPo>JU&|>2qv}!q#uZ z5k6AY*#Zj<`36(ltn-B1QMYW($awvAXIMw53;|3UZWLj)4-u+a)$~}iU+yMF2In =yos<3g*oe|izB4nu0J);^Nf6V_6)pPw>|#O-uZ zRUsP8*33Uk{MY5b1Cx@1dvLm6vEv|sV`VeU`;rMMtmO78xw56HdnxPZ*` 73wEbTiUC)~yJc>JPDyl5jZ7!CWXbIkv}Wuq9<+z10J)6Nr+G)%6Fg=eB3ke9APc z(W%C Wj)ngW*L!D^vf(FE`vWz# z&{Af~7*j|_2lW%DPj_a>M<`(4oi3KHoDwH=+wtECVCvGVYoXmbwsFT2415RCl*~Pp z?v?QG4EIURFRoD^Jnafml?p+W@+DC>wmy_JUlW8- oxCI6?k2 ziOf&vO+fYqQpXBPSAiB7M0BU|{g^fR)o2T|z9iisBIAK8lk!4(v=Zh>RE+f;JIF6S z+^m=2cX7+Ru{b){B#Jf&(7c?dDZ|qAKVVpnLR>a)bCqR<@I8>%Zs@>8fajMC6IKIy zgieu9B>oHJ>E#8hRln>KW9C(c!iJ_jY~W7TAen(F5(Zw4;_ix@l J zkiAs-Y10P{8FVWAIM>ftX@l`4e79_UuFjGpre---@{OdK6lFG0FEIqjYI+-}5C&Qz z9+byacz&9E>3|=FRNc<+*xiMTm$=|bwB{fj_9kv92S2ElwfDkL_5!qE5;6&}7%+1F z>>ea40Y?iQillhkh<5*lsfyE VKwqmZ4jM^`)^ u{*U4FK zdpdBGhy~!FND9N7Taz`OV_w0mJI#@cEyObqvAjdsG&(=CKx_#8MKh}C(8i#9tlo(_ zh=SrXwRL6udfl$|&F*2U`QI?z`n|@Gz!!a?%<*p_1rB`awr4B@zFJ_)xV^fy$n$~6 z?c@(i8C*SCNn@Zh9|%gk$l3zPBvn$(^j#;9nWtG^#RXKx8iqv5ZF9qu4AxmEPM;fh z-~JAcWHy(k)ij0jMg4IPsb1M64t(4T&AQv`!m?{k>pqU1vozDUwcaDFLOq;+_h*6z zDV&{3%NlqEsdSr~XK|X5QD`T_o>t3U;L6a@;mq)2bORS4Lg*)*Z{}^?yujxY_hhY5 z0WK9wtfC542bwJapNZRTo>{SQ;)RZV8k(vKOEBRY+u1F_b9H$|+ICo~eaF%^ljxkB z3l=Mf0&&FOHZ9H8ifL{r4Rl^UR<~(M#@? z;^|8(au&JF`z&8DF$R%4-8?l^#o%=eqCzDvV(1>7SBAPC;|`gbaLh}ML>U(3omeP7 z^P#sXp;#Wt1}t7Z`7xbX3`9gIgZZKlQTb>x(##R3(Y<0c_jtS}_aHcoHrq-T^du7f z?)s+miXM}@B=h^06>ISQ4-;i7-w>nUFf6U<=3u6${Jzr6ba$d8;XeUH42p)Mi~tBk z&=$tUS2DbeTi*WTlAAA D9 10Sa#Imwe{OHF;7-S*hkr~_GgJ({al4l$4F9MsS1KqFyqu=w~#dI zv;J(){qxEopIXFz-~`7EBJA ?>f?y+j4-0j1nY1Mq*Lxpy zi{Vx8fAp0d&_c6#gHM`r2wQIYHHX3y@k+1ondMF;C>p-tYgm^|L`y#{tm)ti3y;yc zvb;X*7a%5bJeHk7$Xsfm1NNFltMC^xDPHu)3!%LlbyHIpX#HjNRK;~~0&$#j4wjSi z^DZut2-c`*1#7(~YlSM#6JMP@8BT6(t$2;(v(J`xSrj|O`3iVeE85Y8N2fJ36(~Pn zS-Xob*>Er{17>vB|CNuD+gkE{$Ei`;8!olG&?McUG;*{^#fa-fIXzbe+;FMPY+s9| z`e1c4><*wEEYGo~(?u#wr$d}(6`Z&O$!G2}7jbvM)1QK@X>(wa$bQ7FVP0zbR#RsF zf;$>}{O;Zfb32<|?ITI;P- ?+6g$Qg#%I&9+(6T|{mCNa-!oVC=b`kqQn+`q6M7o^x{X98;ep*v zDA}XN%4E#zLKh;in|5zL5!=cq-df>=N@&!jisQ{Ll_dJgr@VgD^juP!dmOT)BT4q> z6l=3ip2j~A9xavYhCclI{T#-G?MouUd6r2?ljLk(Cux}H=T5DjOMl-;_9Yb(J*o^G zwfoMjqf>7&AFPVR`-|QlGGlOtc92C+09i(|$nT^Y-wQ9FZ0BF)>zBVgee{*ZoRrMh zmow0*)o|0awAnN2tSiwd<|MD$z7Cw)5Olh6u`QYAm^(1}<5H8#un>8yJzI$-IoIIc zpS;cZFMwk+rr0;e r#SyxGD_<60`=&b2l{Tkp_1;Ib1n_ zHcINwUr_*@ yewyohGkqD&mTP<$AXR{lKmciKFq#_}?SY;LvEn z0C&Q!=sX&(o5n#IlmZ1^w4#A76bhX52AW+aowxirQx>z#@^ZgkQiNOI?IKz|YSF84 zP2JpMleCvUFhrGQu{(-wmR(!@QF!oRE ^_3XC| 0cRYXNB+*KIf=HQjvj8v>W7A4N(<8LWK;%+Np?fDcQ zVI=7HKbl2N4IH^>L`^z7LZ!^Yha8#MiDr#nL{TDCym!=vVXY`V{C1S4%j z;XW4eE!Y+~)-e%9NWuTD2(ZO~{A>zBt3u%>MV(z`; V;@dCZhtai_ zzUC$ RoQV-tg|0o)*jiCR&S)7|5li31p(Ol#Y_=A zvrZ2WMMV+!tAt pewaEw zf;7;RmfhD)vZD7*50vG8P6b_Zot06#57X&BWb2%qqO#av|GDojl3F0F)Yd*E$=;cE zfqPm#B~6jkc}A#5K8b*KiZ|X})XO6{kDPdbJ =@D%Wi;oTJ>$i@8`p1u2-{Yi$b@U~!EZ1z9l1!Y_G+V4EwYE$Kr>_9D z61Un)pc{-^IevZEJ&-b2B%gNH7eO{N?19s&pfFLslA|p3f#9#--f*Ge0 wq(NTWsjwZfj>;B9y zwA7ZzTl~Jv{|rFC*D2<7m)0*zbI5^y4Y$=!vacqhyK_**;9Og`DrCA{O73vayjC8+(wMZTb9TQ71}M!bm=VO|+X5DcPg4 zAE=WR?pV4iZvylFe=$0->K{++9B#qzKQosNlYgnuPn}`yOTOHPJn>>Yg3x)!WltT` zsHD(3E;Lo_tC$Y>X)F(AVEK-mJZwMT*%1n^Q|QlA6EKYFu1SE#zf{@Fx!R|NPi>MI zwbi{bO>D_f*QvWweCB4VEO{T#2@t(A1uH{n-sh??WCkSRB&5SGYXzY4J85Y37|5$A z`zOrMqS)CSV2ST-pHYC1ln(pa&YitRG(E&aw?3Q8i-W70q0CkW)$Fe%>!9$_3mP)E zss$B901^y~tvI@1N)o3z%;d;f@-=m(gyq%Hw`~(B+fxMhsrsx&wBfO>$sKXZ9af|P z=|X&-liNb1_92IZclG@^LoEw-*_Wv2LGk-lenHYwRmD+*Xa?OGT#=QD`_}ve`yf0^$VLBaKnk{Wd8oyQp9P zsMs{VGGRmO)H~X idAfiFm4s0hN#WOU#zI+Il`sCU1z(41a9!w8 zh+&>-uarW?QGRC(LX)7>t2{UO{?7xaEhM69r-;J!TJApb=$keJVc|?#JwPg7NZCT4 zA^gCl1tH+~0OuST{=sjKhm`UB?2>+gj2r;@JHE>ql6C%iKeZK_k RXyDzx$Lafy& 1*lKF})9U4RWQ==t1JSxaKZSkB->>Gh+2a E!%CA#NIVc+)&wDMDSCE8jh`J+#9Q`fHXYr6p&9?`V%?)1pI^{ZHnCiQC+!E7eQi zYT>T*Ktr}S;&=sa?mur^ltS bUP2q)q zPsxT9lxR+z-S%Fut&rd$u7ImXPZ4>D8U6U*2$AI(U~U_tP?p>Po6bnyoyZ**x5b%s zWn%jbhvn?{%TT^GsJHPKM4yno7>fUSPZ@zvZv5juIrk dAfNw5ZcyZbU~*OTc23 z kANQH$(d~>AQDv>=Cq5KLL>9v;(p|1Z-pS5!*8bF8Z zoKFrO_3nnh5%EoCn2tvU9hYtZKl7E7Z?m;)F%Ko-_uyMzeOB%4&uoZwhrzyd4Ajg? z);hhj19nandUscJ$5_{1?@={@YSy z_UN}6_y^^wtg;`p!PWGH_g`a#t#6w!LGL9zwKKFCj`AH-#E(%fyhtTz=oi?0hq-~J z_g3!_oZ>etYxn>MH`@D|4qJO|=Mi+BM@sDQjGF~3w*(OaLm}nR6Muq_!vjx>ciFRe z-Tk1}R&6j(X$;CwhW}$g6{m5|+!_EgF>J(y4P}9*^3$`G? zUe#Jd8OUEp-#W&Jlr%A@>}wfQJf9iWY&`iPy8-#poX*C5c9-&VjpLV&I`!XpFo2HG z&AX&Vx06_>W;ZgUStvu%`3unVV^GU5e2_0(_+)Vz1Vc>@)XLH$JF82yy>HTE4_Sik z8L60bH57##@_m3nG&`z_Fl#GZvgi}+w=1NQdK@^c^=WIY$l&O3&ocxhTObhcGGVUr zGUZ}{lQ+-Hw9DBvMAc16c+|1_x{lc8h^R#9Bp0+uvs*tXc`*cUU!F?x;1M>j1@(vF zTybfYrW&L%TXag#SxNZ}pB8x8tQ` 3yDZ~ ul2!hCmMz$u3O`)W%0C)UWkr-m)}2R0_R_=qn`TXIeDaGlz&-=jG~x zN7 shU^Kaw505FPC#IofB#Ygm!ns{BXbX08Xtw|v+#vJ*GlSkA0G6okg)&vj8;TWTz;wFTS zI24T^rDJ$d-1)||^?^+SL{GS7O=wWGs@YQaCU|XFXG0o6*2Hznwydc)YHAOBIX F0RDEQGD#F?lGHPVgK(66Z4eXMgFXq|CBC|%>-H) zj29Flf)0F z#Gvm9&H__WZR*MOJAURWTj)?*v{z^&U3F6HY=_ioR!>YMp^fxfy)%|Kv)-x0YbANR zbR-wiStN xXaL=k-BW zmF$|QyUCShgIJK%fSDK@HgFVp0nU Ed7s42_AwrMFxNzO~4+!Onaj?(4d5~eCcjz^v`v(4<}vOdo@pmMcq1B zaF>{PY^c;WE^i8vMoq)-snWbIJ)jXw>8jEWdW#?Lc00Y4PMJ1Ps$Za8R7{Uma;#BJ z0X|4we6PQBRACe@zz4+8Ev$4*&VGQ1jY^&fPHZ0?7? 01RN#|HZ3b5|YrGj~ zhg{9}k+b-QDj4=MV~gkDY_}Si*4r~C=745kFOOz*=F5vwkg8t|jq_mT^Ctkv-NDt` zC@+?5sYk8_7;od#$J-r;Ty5F@u7IjvEIj-9Yk3jooKLvM=p?9!{7|rczDoyw`VKDt zQFHUDuSKouHIhZc7@OWdv}`!;S3Z!7^enmx^`Z*(?pwQ^j>bRLsulqJIlD}<)$Gw56pf24sUQ;^}EY-kJYAW zn|5bP+iGFNc)IFAO7c}^e?G-RrGV^;=MY_r_hU`I0U-z8_`Hp%#h=G(KmFIB74)%_ zZ-8qWN6r5@0eX7)s0&2>(cIutx^B#eCgTw*PRiE7LRm2pe!7hS|HNmV+J^;x3(?HW zEPC * z$G DiT3Cpx zhCV&=F2o!uZ`6z*F1GM8DIs!Yn{`5IZhTi*YQSmknrqgs^`XZ&>at*?u=s7l$tXd^ zn45+BUnW|r!D+~K&7y7Z+TY}eG*3j=TzTmbWGDo8a7xZVSx-L*7sG^H*m=u}*_5>| z;ui{$FeI?IJNfKIqHqg(ZZ-0C%Lx7yE>#*Pm!bWV=&4OqJUC1C8a)Gd^$fsJ4wGP! zQS8VYBLxVx+z&RSBB&~yvk)Znae*!WVNbL}bh=d$c +`87YfQq?TFWa_ZXApaybbWujl3B^Bomv5uM@(zb<4PgGi5R8wi#q z2r;QSITCGhrtsOVoIB=6aJHsb!a3QsVR$1cj{d5CrBbw_JiYnZK6?dG9s2N_C> ) z)`&S(v_NSX15=q}0*)qMR`|LTjsALOWHbu>+aR;}?Fh&%OWo3B_BGM%XY_JAP)|(r z0qMDEiL7f~2>3hcdk!Va>}@Q#AKt?@6^A2?Ygt}eHDb~bcoqi-;XqdmAOI&b6$FBc z2D;t29zd dk zqd~u`(`vpv%ND6}g(Y06on)6zJ5^%s=dPnHksv%P7_|UWA~Eg&OjXJXz@l^ze|4^o zBfY$50C^ f zgk5|CI gN=R+E~j?TJ=vXf`L&-_9{!3Z4_{ zgl?d~hB7JfFf}J+n7|}_z?hAYS=P)$h5>Tux$yE{4l55gUm*}WtOuXHo+5K3J6%|u zi?&lFTiI>wo5Yx=I-U8paSQv{9OhvPDHgXfKiZ65wSp_fr3=wwXXFJ8NGbpfrt_gH zSV#(mFaE3J-?x3PD;0*s-!GK&>sF+G7&sODA*%7gpWJ0$`pMH?x9j=BZ?o-T;U+EH zdh>G;7F!#Q`w?&3 e$z}J=FQnBff55OUu=&L4ZrrJZ_~-jz)y&Pet5EbgP@KEr`zv z2~Z@oGmNd-o<%-2YI?BN)GfDYRCJ#$*AM*0WQ#x@mI)C_5CPwNsjnfe0nRXwv&6$y zG6b&lvI?+**5d`_70H$1BDWZ5H+Gk82?P*aXx~oRW&2(X1MS6RQ4!^f#`7y4x=PPW zTv4|%3DGbh>PRAYR;M-#G41nU9Yg3FG_kF~qA+T&8j)J*SZsw<2oB`iCOsHFW8U7Z za&&Mc?`ppbh`nM3lnU(RNV&n{5K5Ipe1!C@_x_7iRfcA7!qr=CfL1z%Qn`HzRSP!a zq;R4lzyzpPxs=yb>VXT@F$Zb7nFAQ`!cZRkC4?3aAFMsWEZ=HTo0PbY0970?rV652 zy;r~6xZ`iJ6l2u$Mp=kOX_yY6rb(@cIPF_;8G3T>D2%SZ1+`x;xPKwfM y@&RuIrr>E2I>i9v@j6h005#3VZs0a literal 0 HcmV?d00001 diff --git a/public/assets/img/person/output_webp/sa-polka-dot.webp b/public/assets/img/person/output_webp/sa-polka-dot.webp new file mode 100644 index 0000000000000000000000000000000000000000..1335416d3c6ec838b374e190d332ee2dfb67bd9d GIT binary patch literal 22460 zcmV(tK =FynEez^YyuO4TU->%%%Ok3 zAsIZf-BNtK_fgepKPfDA@DU_Wt#h-=GTS?@za1n^c|qGE?LUcqG{O@6n9<*Z+=eOX zqSF*X^y}es+tF-BGszUi5I%Np4{0FMS3nK0?{xjJMI5E1A+~VyMzJx=ziT|&Gk)xI zO9U)fTcn6~U*ecf+X&qZ$?LSnUTN8CTO6|#hXmi6l0mQGN=vIM#VjsM*n#Dj!scsQ zui&r;8r5C)^?mAcvhNbB!SAw?uKt!?$*Fqy7>>E#O+a?b>=%U~>m6=@Nr`wd7_uNa z N$@z`*4@CgT2xOS 2+67wkHzUD@)7}8{{+kY4-3GAKwEQv_DA(+9}`L6vv&33Bmp1 z*QFvKx
)4CKGID^PQ?GM_KKN?-~F!xCF~ulwX=} zPO{uDd*@UFe1}GU SpX3a)F!!R! zxnHuV{igWQPb$qYrw#e5u7{@s>7N=D{8qNPs3q}fHv*z7+6l^m2n@xv)t6;sM(+Dm za!`Bh9CwtT$E8syTX)+H97NON)B+t+tq;}HiA;_Er*XRY9_t%a@izW~6bB}wqZ@=v z%;gw|s~>z{RsdHYg5gplIOTEK8{GhG%e1v)_l&1X#;PJeUyxLV3MrS`@3v~wBTjll?NSh9^E65mv%Fo0KXQ0IQ83bm z *-M7-Q9U4dtYS1G=8#7;==9+X=JcC4r#+%y`4D~Y?_o7h}XXu~r z)Oy~C3Ub<)=*V6JuaUl8EQ-3pyi2kuoiSD)9GLKOgeSUDdL)%NNvhpDmcNkjMiE}K z?X(5-!y}An%i6>_tSRH@tqQTe+vuwn&oE*nUo4~RR`q>Zf7?^*MrW;0&<58)o>R$d zRR2K{MDP___yH81QSkD>*)V|pmFw3cF5FnSv|>++Pv5_haq2N&X3sL9I3Rqq@4R5U z6&^=!>e6lTnxSmqElVz%pMv7LVBFc-%%rrFxWHisjXe&Xey+^SDN! +~NXC;EZOB+5@-;s#R3^;S`3iHZg~2g>v{VQ}}dG zjf+ZgWKdow4yvtK!n#dO>l*5ue^}^~Tl=Vg&0;x$NiFS=S5>pB4hyj6W4u@H5-jb~ z-l|>AR+>BT*+aa$z-*8E3nvy4 uG-7+AY@`5x*Bj3 z=JEXQ7ULzo(V|27sk; zVVH @;k>c(e1SUz9mkC1YAn3*k9#VImU z@VZbFjg8b7W%d%;EN{~Jxt4yAr@Eoi2nbH3Ip6t+d IJl(K%0U380IAzi0ypaWhmRz>F}@mm$oQO7W_|fkk$Ky 69zGQsTJ!!x6q5h<4aCPqw)1RT;QiNY}GU@jJ%ep^C4J@JG>9-i$no(>(=-| zsUIr;yWTrA$K5v)bBh!<-4wN0j_xv&DMWB0KtuBIn>80xhJ 1nz4XZthM{Uug+LYH68A^<&80PzDZS_W;p|<~L!Sn6 z&j{T67+=pU;(Q{}a;aEiUt^fCu%dcW(Y3T6m5<_!%0Ew+oC&6buRO !oY@y6lFReOhwKV>X)w37a7=~B(xofPUpB#G zLRpjM0k2B_PkCh1l>SR$P4h{0!d)Y3QO6aQjQfTRkqXz<3ZRLJio_VShAFPvO)>GL z5vb8BqfD2KK1j~ULtG_W4S*=Zgp1SrV_h8$xa!}g&h=d_mUUAzGkgQ~X# 0 zwD{;7BfR8NfDaw-yq-qR@pV($#ijRB5$2K0) vsGZ@=r>8D zi6H@Vu`4xK{E%0wa7!tC#f#oz*#^FmrRpt_DeIKqjW$i9i>MT@<0MBz?5mK6Q2#A5 zym!adn}TZd6jZfpMoex%_WuxU!$rNU{6c+<AhnPcRl5Nyf88bTN{vZ5~ze!=iE< zA7I1gkOr>{wE8F9aJSIF_(~Ui$ql+xX}Q0~ EkV=emBW zpOpBXCf!qfcB}#|dqNVu|M%(O*EHZfWY^wVS-*%1BxBFB-WVT3)D2;S!~Lp^P+zG9 zvjEvUC2z7=<@ZTE f7y+|1qWLmYC?OWOahCpEawc?MY(N~AE@bAe8d3V~# z#9KBKsZCXN`R`TQhlT#*(UV++PX@ }-AXJmOsK&yj7lO*7$v zd=|bSyNx4Q{@%SMQQJGq3b$wKdW%c8WN7G+?Lj$`ogCv XXEV!C1yfj-=80fM=mtW+op&>XHa{X@jqjgc^~ep$KT$4-R SuC$Rn2lIM@E>3kdsc z>@srk5BAIF?f=5fDHrY$o-E5HqTQh02a*XRZf>MXb+4@Y6Ucnm4M)Fba41Z)XAXDk zKn{vBVSO@#I+6lMOJ%IIbN=)8+VkUSu%r*%`i}!9`M?yD24v(9=SJ}w)k8jw24&}u z1+*j=0@5y<|I)xudifogsz&?M!nVf}nDbr)7&+!IS)o_ye*LYU9mk4u*22fgft6VY zM_Ljsbh?ef`_9E4M2#U_ZM^JJq(Eqr`bw6h*y3*P&N4C*PbBHS-J`H&C_8%l=s*>4 zhiDL`vl(1SqgqAv8IJ_6 I>MSmPWIBD=xZKY# zZWWM15Xe;& {EWll#Xb5M9S@R{5m1zTU?TPrc {N*H-gFsHxA=lG1hw4SA7j1=3O<+ zdP}lW0;GjpB;hFgazpsLEJ@%a6^|*7U-d|{Mvv`gs?qpCZUYq9ud=_Qxi0HR;G_IR zSApfxH%PADW}=)t?|3gM}l!HXK> zdK1PgzWy^XI%*!B-0-O3i%h&K=nI2mnDsTuv3p6szT|!7p3q(Os+05-Q+UC&0hiZ? z^<#-u8bznO`5gI#o|3OH8}!rXu|qb)yWYX?9N&qQRQTwdLeZ`;9R*j}8lTqO a!&f~IKK&*&%KHxY^T9KJtkAX0){u1Dwvb30UF|F zS> GX|J5!2epEZ+NU~4l|>Pcn4JgG+EFEP(ZK(Dx&SV)7_$p-&S|Q zF$=7CSEh%_Fr4SGr}Q01z#y@TZhg5&a8?b52*R-0Zc(s7v>A&dXDgNC686qsdwf9W-{vH@4 L;6BKuAETsBA|h_l^;L& zUuXS*M!;DU^Pi`^z&1DUz JxuFx)|zoo5ReTN zp;D`N@oJn%c0AJ#6Og^7#Izs6@#OwxLitoEJqdJ-NYe$ld{flHS5bYUVy>Gd#=9LQ z_bm-7EpB7`1QyHn@#nyzdmukx07e>(0sOAG@HwDX6<5sr<<7qn((?s1qAf#T<}mW^ z#;lWu!17(3H1bjp0vE@WscMnEzePA#UbL>ft=Coy+DC=mb4QbQG6)_o5 H!hve^dc|ctHYA5>k<2i5` z xf(4aNkUM4L z8-lwSpeTwVTU<0`yhoKgG@3qL*@`*(Gv(PPDncHM!z-zvjN&LaNa;pYlV6^c)O~iX zrNfVUlaw|z7548Ub#k$grlQm-5$j--=F-7(RZR~ETW2~Hd7s!SHOf0I i5y zS(gTofTfCQ?KeUiwu64K{k9~ppv&kR#YdRVe4C|s5qMCC5#8}uPWEq(!Lp4QC_Yni z+cm><5iIGZhna{-WsVtZ64+4)4)9nd`XbHK`wQINu531dM?sU*jrJ0IXb6A+5+x=E z`H+?9Gt1_hQ40F8`u3iM-R`fKJ>0!4BN{lN!sQCu`ASt_^?yqdyJMudB=!sq3m4D} zovgxJKY-2E%72jlD&n;FPKU^DdE`^}>D+i50QVIMd|6 nveQ1j2B6Mk=y1-PLQBAJ%pF3>;fE~MXv=8=eKjOT(L5blHjI>I z6$Vz=YxxJ#eN68&HDkLDT6B{cL)`6(09oMY zw!EjN#iB}&ed}%0iHxgnS&<5fzj1yClka%C0i>j1J7r~^tvI-7r>~wP(!Oxes54*# zP~E;KLqh6DcUd`3_Gb3l=S6Pg?A#+uwm$X?H_yt|t~k~v4v%kr?zb*e9+pw+sIIib zY8vzbeLAo_5emsZV*$cE+G5`?$>H{$RCM=mu2`$%Yc0p;1rj#ALXTY{N_e-|b*!Sr z;>$2z?ALV~<5u)tYX%lT>SkH7etSm)UC>|IEwL&w5|X0FKbJTlV7+oG(l>86Lhyzm zqN Bn*WJ~<2M7+*aZ=+ z7CpWNHt-$HRj=~XRUY7U;F|4h#M}5Uu2$AT;b^lH73zB4f-$hnLzY>8n#6hD$xfoD zxG8Hw)qGsG!WgQtNa=DiSX9`Kl+Q`=s^Ky6u|#5v|69p6)thu}9e5l;#~Ofm2Kr0g zyB`rnebI(Hg=l@J)W~e{PV>`@dn1SICy;t@dE3x7^VWHsa@L5zEcvD2K<`#vdYae` zu)a)7ko(XxuU({E7m4W{tT1;n6sbU!W*7%RqjMp?OAfIV+O*5IluJgo=uRCKteD1@ zoW5zq`Yx-AH3~KOf5AP(9>sE}7nT#PK9@ayMWxKj+VJ0CTZKFy(RLlwrTZS=JpQ2= zn@3-?idNo5mND8H<#;S%ItDkS{|2ov0vz|CFJ>hsVLUnAG5Ayn %)OVJ9qdF@6`00H3iWz4(DQ96T|z|P)lj18uH|Lsx0*b zmLHRA$BY+$p*4I2Zqry{^qJ-h^=+tZUz~oH=1)CgwI&`UPW86?C%EvVYzC&9se(W( zS75u{XB|W*tf0MSHzHZ$8x`LbCPPj^vH7nfC(*$F1E+WSHfth|S@Zb=EfF!=Gwnte zMW}m }0`o@s0Dqv`%ZehhT(@}{BeU0-psB;*Oux0c$K31s|#fZof^j^75h0BM2 z-5K5Zj{5ae^*D4b`R_QqNFs<4BgXE!69ybKn(}B)kTV(&6zUwVSFlT(=cTe;O0VAY zOxWRGq-+<-_q8v0uF+f47{cJ1Wxsp?r5A>ZKgo!;j7`3z{jt+i%irYymt(EJt|-E$ z`{PZ9)&jK)cDOb4Gs?`P0PXbY` T60y~^yIu8jsiYg zVC!6akH(ONf2e@uvvPSvY&mDHg-me>hs2++D?SFrtMUxbdud)t!eEp%f-PRQaRe z(r;C6NS4WQrWYph<+}{5u9!r#!%X!WejF_?K_F->j{y_k85pMSq2m{7Z*+`W?`ah7 zO*R5L`Q~EI@X$aU8hN1~+6fQfOT( trvSBN?vD@Zv<3s#y i$Ny+dZat7Elwg{(4Kf`yD z5h!AGot=cGrkgk6A!KC|R36}gp?yDCPVG(e=kXgLx52y>ejAdcH3>y)h%AKQ6eYK< z$XWh4^E2t9tl!k+n`9?j@C1ISlO@84>B*R9v$07hx%$weC#o(lIu0#`TWTB5`;=yd z9b26h7Z4y>^I(dbOiJy-n$NQDS(9m)f3wPgV*uI;cW=jOHRBRp1fmd9@2g7H$jQ1+ z{Hq3iK;u=O(Yohzd;=er3D(AAb@JPIyJ@?{8Jqp<`8(4dEkPSGLH*)N2gy_|L%0Ct zAzxEB(7%9r3?cES1Nz$ Kx*eN^U4nniH3U%cj-9 z<4IN>U(QVZ7R=viXplPEs+Ka@!InaK0qCBa3pJULCJdr?jtgRJh$9q`Lj&om<*Fqp zemTd#7H5DLZ37$)SHk`-(3U67=hHpr`0($!%s{-os}U%SZOS{zj_$+W$*z`B2P+^I z-ys5^ag9(kvV;trsn8jgmfO`M`QqI*Ib>R=Y9KjeRJsmgiJO`P6aniA@G4p*CsT!a zgB(kVC+* z3$bqYkOc4gz90RM2y;N4IQ)oqec%`={h!x_RDZj zwKL$2n6*@Ay65v;gqN_aZY*rekic1z0~dpJ7%LiG_%j;vM~KpX&N+Yp{*g2P4d0ce zlmG0m(to#8 o&x}r2!LX^xvD5>NHcp22DKaYZD7Mj4 zekfwMN#@sfOf|wC<2 Vn6j2;zXAoV?_mpb@vR2q2SMgM-=LsI;+zT@GRYv^_Tr$f{a??C6{go`H8QsPtqH zwO1@1%0DOFYW*bAgZ;Faz$x`OqC35njNXpDo^ckPf81(^n)2qqeOKl4Ifp)YefOOq zeSA&ExXkIZ(^P}!6^59HH(pI~_M)eoMLzqgCr~A&Tq@DkfVEQWDbpVuiyB)F{{1Wb zt!Hk>0Hj(~gffrqM{XO!_P|pyaNtRyF97P^4t%>4UU-Hq4m_CqBL|oe`11>h>qZCe zMbSv0P!5K$U;%4BK-G-2CeRAbfIa{7i7?RCm1#n5_25kRK%d!n+zUvsw9Fo6CQT6d zxpd7E6iDLs=Ah@Xg+Us1GRU+AG3*TYo@%dxc-76#iT-14AHQ(icx#2ya#JeQX_ZRH z=1M3HftQT0JKWpCDr`Ao@P(+Nb5aJ0R->Wu7H0a9iSbw0<`+1g3Ot|l!>9ptYNw%2 zkI@9p?8fZ}XXl*c;%8>1u@ltL8p4Yn_+Voc=jo5KuRrZlFzl{V#ve}v59bz)m6S5p zM8oSE`aah}iBmTh=r0k$E~BJ=?Q)XKyQN%n!?zp(N*!jLZxp5+AGA%8LOl@eahnjQ zUTluVOB7G7PiREfQp?Uga1IK{5n?cV86k#`2UkGjt(${rzuCK?AZ?}(;BDBW@oN}D znh0b7#)~XdBS#l)Sp5si#IniTE6+cjC4DmW-+_5q1a7sc{XU=n2pUli=kM# MUWp@Sws>rte^V1*SaFwBkE?C9+(C<$D)R3*DoV^0^%jVtnjOXE4ko-SNXJ%89 z7$TgTEyXhHEoPGoOKtg2H*oP(z)gO;>vJ}!Z ?UvYTON0UmA{v29Jn5=@Q zZx#k#fp-OIGCZj)Z%f2{g->0L%|A{KOy)o20x8hHn!3pnlZhifoR+?KUn^edPsb_g zJk2Qxnki4Q2`o|Q70S|3b@|RZ-pyXjne 8`d^R?8GVW z&T>2~x =QltBWXXpN>ECo#Q=FbJxaRkG+4J4cbQyy}ak 5qXCC=}Ms!4GSC-YTcN**)iI{?-8rm&S1@b?k#&2HeUuP+-HQhD%p9Q zvbUgwo qfiRERI{I#-ur%D9ljz<=w z(=c9${fug s|4g7wK*3OR>NT^eKK@rpavR7eb+C#Lf6-p>LxFrch=JP9EFy}nr zxvx>kEOgITK~0}matUgyChMn!o;S2qHINs@w2(KIWxH|F?$}7!&;*n}^+EtNG9b^g z4Pbr^TIncRJV=hK=+~m9zW9c9+*3)-(nWe41GF2I lP*f7{TW!g%`k zHPp_;@i>n(J9S1#rEvUDNr#{?5xZt|?#j=Cw}{KJKw9R=A-_>qp(wy5Ytr(g=MvN{ zkSXZS=1A3=LRPjddx$@X!^A9JP%?VCg6cZlF@PCF7ln)W91sD=3&gl|@#tAZjX$*M zEfI)gBN&ST^yz1LR-8fjtS{<3B`>7OX?z?EEt&a+3qX)-FU_0T9kTvPq$xsDW~)b4 z-U;MqBC0(%d}VXE?ch@Rr>L6TF*~E7rSR*dorPjf3 SG1B&6Fls2ZnmcBntT5M1PxSCu(Y}tsv+d1iI{i-?n`COi zgxH5OP6hHC2%}7Y`(`IyVUl6d+Phw$R(wY3Qs+?BahlUNpAQH+(&8UEE{ -I zHLtxNdOV7vH7qp4erxYsZbQ@hDwy6wVmO1M)9`lMk07ZHyk^!}+Ioq4V+KK_@A~PT z#wiOL^mH%=qJY}K!eth?eSx}u JDV0ybUo^G# z)9{wb?2I1TG|p_82pGVl%ZI+CX2_ZTBsrIxqu@+<<2k*w)W~7yAIy&%uZYhFt7Xm| z^%Z5^>D-GUBmyX6OsoyT1+ZjxE@sX20!q*jgKOxH8ZAj>0B0+hO &RI_Vkc)*Mvhz@|Iy!)4m9JvVi5%+1Q+<{Vg3+x~Ae)aQ0I|BH5h z04m|IeBc5on3?Q69%SEL>a{rrCy3h!Miud@gLzj!jppruU+J2(Vs18T>2iQKfWm|{ zCH;8|fkrkC(dN4QhYp8U8qd#}y2F~$(rEiwoG{z1K YJ7;Yx8Y@nb%N8sT z-QbdT1X& 0559jj#va1tIZ;$ZKU70=pMBRDu$i+fd(Ed?F zP0#yfnkQb?4le{6Ai F{S=n_wMrSG$I ;awGc$UpMlk)kgo{ zD^$ed9%J*96w0kY-k*`*>byuw{T45Ta(pcCvu#5n-TMZujlg;bWoT3#p}X;FJjK9t zcu-a6<@}QkNe#r7DczfZF<9oFVk6P=pz@U7_RH9$8syhXpXGi_>8e?l&(IS^op8d3 zIFQ%yY`G8T@-PtKd%l|Y3R^V3Sc?+R4s;k#>;gBbIee#!b}u0S7Q;-?SxmSSGWvPI zIL3azwPQY)zPMTKm0b*LNG1WONE%DClTGb>AA<1y$Y8-uCDGWSOnnP7Eb;@>CbQsk zIXO)L>y@6``eh4qm4uAJh*t1FJMvti@IXN$?g_{*13NN&P7eI(l}bgvFjXKjugZ19 z@G4|w8AFKD=t#!e$XNm*5Bj`(o&C#sLPo{%CMbl%M)g ZQG=vd}g%slzr0oR|v|7rrmt~FF*&O8z@&F2=BMS7$ zaQK(Z<7@+R+n5`Hr#F*7e~oI8c_0`%nS zz@%i)90ArVU(D1(Ob;GiON$=ZB4V0x;DCum)3Gt4%3W}+3ofBgIzkEbl2Q ;r(++ZB2e;su#Gm>>k!a>W;ejh}E?Y&h?7)rDqLK6Dyc zP~5? <>D*)%xZJIT4@`8d~~ZoW1jPo)bxiAbk$w(u2(*4Ig*6>?|DNf zd; LA#K{Eu&LBmQaXwbh6s#k1*mB^)_5qLn3|r7eQ&~gbUsX!*0;IN; zw@`+s&!u`nFsRpVq?rFj()U^h@--t2*z}0S(KMzG`htX(l|oIaR>0?>G2_T&vUo5% z*_O~5Js~=8b%eXx&}nO9Y!<0eAms^mqPQqg{#W>_BguY8VXd31`i^xb19NYluVbpu znnDE^I(fW0rLKb!3xBho|Ek-i9+abi!~wL7Wo;PF{%VXx-TRK`JnmccyN>t}hTbIM zi9t5gAnd2-!;vu=8hRZskr-tK(3%UUO%5iWYbgQ%_ZI~*R*0;pT?SDj8Bj!G%FYCl zRUz<~FmtAZOE>$0OF<2$`7089?D3N>3LHj1qb<~ZCY*l3&1s@HBgl?&L2bTf|D c%TGLNL21D2SNl8HqeSvYJz#YZ53u|lbc =P4Ojn z^&xwM>qRKC=gv0CGi|KWQBRN$*zk7IUg#|8*dM~9`|ngVW!lcU&5y}kBrl7uQe3io zUkBarQ$&I!mF9+VsY9c<6P(3&qB@yE*>Fq_BHJ_e>yk_Sk~VpXA$(1|>{@U2*=hil zMLs11Y0ZpXRW>oXf~L{*0d2u&(?gzM1l4*ka$fmKJWyvDLPVJx_{IRAHpil)o7o+H zrz69c@N&*}>mLGNIf_EHI%9qMlfc8*CCP*83j9*uTcyGDF0B+2lFtX`$MBi`{Q&;T z|3t?LQRH NDiGF8;D!a=K{-_-&ntZGQvvnX zY$*13MvrJ<1>}vJSaq!U>q|BIbRz}Y2kirCR;Mt>Jkl!=b3{4)KI@|glbnGChSJ+F zi+uz(wDA|25N4pd+yb(VMDJ^@^GXiQ@h-$YLN3NHubkHXE7qP*9kDM$mkEk_2Ugup zDW$PkW!SI>9V%$vK<_!ZIMf@A6r@fN^Co0MBt9F+MI!k(ppK%pYvFJ~cWnUA?-msp z1GKPTd2?P9;J+_Ip7^D%z9Tr$-G^l%Cm1y`OsJ)(h_s?vPvAM>-j%P|0B_Y*Psy*0 zw)QA}&)FYG0PMGbQ4*fB|D%Z^5_@6F$Y~@>-y0-SU=knjLXAeMw@i-Y1SP&tPeix* z$UQy@`_}q!mW&jWF@jN1-+KcPW_UoH!UA =6)e(<7?C2U~39p>)W6i+45!tq61nXwUXMFvU zaxc!Wvv%r2MADEyjtgKa2p+9&St=`;8M=wi6>_2vWJa%%X}WqRKumGg8fs={w;Z#U zOg>_r(`SB2X?i^m-o#Akd(#lu5gk}V>NCSbZw#8#!k&?X$~ZY1h~plkBPXV`ZI0D+ z{?ITB%YV+moTo{FGxq4SfCS*LKWpp ^2L2vg zr)gRzr?t!X>3+@=Mov4_x` $@QDJ5Ey8^Q9UhCwaBNK<>j0L4p%EO4%}W z<&^Bn4c%H%^tNjuS03FzZOjYYJaRe*UfkBn31GApVHxQ``O8PCWEJ1~mC~5$rH-{O zmJOr;Gh^xH7ZXSNiV@+xycm|*J~~Bo? ugU)OhuTErTKU1YFN;QyH5(7E>2LW?cMTq+U9zQM zM_#pmJYaO!g5oxMA*2sjm?e0c9+9lJS<} BLtL)x!Ekx>lk2gtpq3z`xE{J3Q%vp z^MO=5EJlYv&g2j^mW4){uF%wGqizC*^wrKEoPg@RldLp s$AzW9-43){KCW3<*#phH_=SDE5 z8`rN0?rpI}BpIu9e3Bd74G5>AZl)ZAF6C$Iv_t7_+wbVwTvjjfF1!>_F-HMv>mJhr zv-WR278h*i6XegPIQ;#^_vIBCgPM4xvnrtYde5wUUqi1F+lI}uQUXHK(($du!v0G> zViPS-i5ZJwK^M_&DPIoLQ}a}SA)iz~=)}sMHPE{SBtWUlQcXk_XE_J!Z8Sn9S?O1c zs216wUi$LMHWG;P>fMayN$QP_?DWDwrySvlz4atnyVU~{sJs66@i#bRXG$E%H6$w- zAe9J+XY7gVw`8C@D+`>sAF#30B1>FFARR)5W~imX9 aH<$-g^J_@R0&;jD8{A}}iI(+dFtK4w5*q-2E zJ3Fdzmr7&@q=`l5hT|b)Glw<;n|NkRUcnYIbu!fiP7#o1p@|JC(2(^FVuPxm{wWs( z{(PAQi68x#+A<2 XkE!})Hd#W6TW_nVJl@EzHz{~iIbTMvq}OPsggaOqsqSG3KhQ}d&1(Nu29<+21V~&&z eaF-aV02|j1ApfcuzYe|L zb!(yzv(8+B<9z`EA2sw|^z{CQIA@bHhlBXgA~(nYvdQ>j#DTBhP0hm4B`P41QnHpd zFtFRVl=??|NrcS_R5t1W%`ezJo{#?~ug`33?J>yDoI}|0_8sj><>bbAFc39eRTlfW zhmdP9<`Jn~j6;0~5|k*Y>f~9C#*>NO{l|L!HLGVDt_%weXd`(*H;@`LX&2Cc&25$Q zS&0SS37WS*S^4bWoxIpdu&l>~A%iwmxI@4upsg+NmuBi+Qj=nhBcudl6vMaQ6ZEOJ z)_5^%^v@roY1Nkf`4v 5J|L1L)vj%QWcZuJRoYd*sE4pW<&)iOh8 zGFUl$cdgN&{m&BIdViXVqWa=dVY!;b-mU!S0nZWV|7mJwPQd+n#km*1jqRS^l622a zsAC@)B5zs;zZ>M3eFYx;vom8M2DnrrAA{de#8X|!?FI~~d1twmi?YAxoig&sRi{bp zAFpY6rl^p*2W4-M@vz!DNYi=3;ByW5jlfhjW1OH~TfrfTO%iauJPJAO#y=B?tdOFj zujINaZ6E{~EQ2I>m!D^Qohgem77o9Ak9A+!TEN;M3_!0f$aJ{oDzoTk`bE4@{9=4# zCU)^%_pg$uq9^&!D}8Sr5nD>!Fi=$|zM_lmEwOh1`pt{EZy$pf6DtVFlS0Zpl>kO# zy3zWaM)Uq@k=?kMeI-{U72L>(8;l076`XyFSS`4S@3UH+K)lOAW$TzV0Ol4Ul@64% z$TS$Q7?-e{(9D74q%v|eSyG4Z45kl~oKxf18`yhfODEhz2w02Si& f*O);l>!H zhyCx7?ckL85dvex&=nih8bMWku~==I9_{A35 7ermA;P7i @(k d%{w2(cJ#}|IR7M+4#>jMr+(rrZ>KnjN&7R@XjJ%!m>f@AS?;nlh CNG=b2g??OdF(PeyC%VY&xnC*`o<2f~ zsv;22I3_v5;%_=Q6ECy)p?jh*AMnE !NF9mlFhCwk%i7CwVQuh( zqCKrkJi<(d-6wcyXz9K2Qx<>(7<(Z)KJCf^>Wj$X>;fk|073G0Ign5~1B11ncm^mT zR`x>^blw2 Wcly`p> z>VCS=dXgCAl794Z*t#{7AEfeGS9T&0+G>3V8|EPzZs@F^Jw0iLo1jl9a2wwr^rkv@ zY*hc-N3YM;VL*VUq2~Dt^Krb4Q1Fm}1QkUgz}BsM^}*z$H8=OzRv3mCfg3u2Vfkx@ z5&duFZEY3~>sjG5>RAGA@FC^<6v|gU&RG>i-y%E4SKf%weh6E`!_Kkc+NZ|Cfq~U< zzlT*~)3mJphng{cZ$;iH0147klWNm{Zi_Y{`a^l-3Q(4(_{+gwqK0-@9be_I+qj=* zhE)kPFCdF|L!U&t8{{n*t;djz8ufyIVho0-4?a0w4v;7wmjX1m;X{t3qWet$eu6eT zURR<@2Un;#L%CZ6U-o}kRWa(Hl}9<`@qUGb5H|FoBt9Nf+`vtcN>GG|A)0`$`^{JC zPQzX)g2ag7OH3?dXc-zE__F!6bE5QN1Av}P!;2uGr)!klxR7?`SBg4Gky%5$qu^HL z%h<}Z7*QTQ_qeD%7@qGH1N~wI#?%?ll8}~) l?!+!h~}ndw6jr)?GYLiY^t 5@9;%~ z1k*#R>ZWkR8s#l!s>X<_y|Ec-dU8zb_b95kZJRJBdKl~!LsctYDEp<(cYtJFHpAAb z{bs&Ba60jrTjqC7DKT0)LfQ+^9Dd7SXZSh78SU+Fwe5Pvs!&YEaXp9lJHD`44?G zvD)BojW~llw**nMp=p@v#x5$4IZ*)1usUSq;1z?vF%gDBenHFZ)NSaCrH=5$2&GVf zy>{@rQ_l2Y1u=8yu2H+o+Wj#{J2y^*O|J=X?thSDg3xLeQH|lQ;N&e+U!ew*$BYQ_ z{F4CB 3U*1~w{6`)v7WD+J|7G+x3sPvx^4}z23s-1C~o5@5&mNl_C#QFqt8PCEK zALjh+2RBkw+pl6FK&DEfN@Qluu{iw>0`$^8`|o=BlG8;W9uOb+z=I29-a3-$x6)Ok zFw#S?u*wErx{P;s!acjOVbLNH`PtzYQdLfbrFu` 0$ngrOCn^J fG4k0 zOZM#kHq?2$>%N{kJUABj{K#rCzI|4BrqN(Q+$oK(He|L%OWoDYx%wpQ+4)xwDFGv( zG_lPp8=p65P9=r~dwGZ+>(SSJxH>55=tVB|yZ}2EW~?wBO7JL2hLU3qUBU@34KTfP z`P-%P@?S6Qgad7=bc(B@W=|NA%fLD>()j~gR9sD3PqH@7kCAdYKvyqMb{cc9fsSI& zL;V%_dOKtgdHbW2NA~J_e3OU-z8so>o{`01^$odK1k1~?82iV`*w^%2QowB$IZmQa zxFNIaY@cWCB9sxRXdWd}-ZSdCwtTIy6j*yNYwkC)F31tN4UkQRCFOHI$N>&~3PZqe z8Af@O&;`)viyU`3u#6Sw-)@mR)DAF=Vvo$&dduB14I%4Kr<%0YZ^l7I)=3)mV~QC+ zkqR7|l*ecTv6PV&HXP(Xd%cBuq * zt~l^Xrh`6osM8aqw~HiCr1FdzbvNvQa5|f)0FupL^R^2Wz?1;n_;Lvxu=6I&HlcUC zeESRrW2w@L?D;)T i?LY_Dhy^zYX?6dHcpITW z&=+l00mV3FqN$Bg{mNgBwdAQEqu97=IEe09#dEMN8~khxem2RmZ7VtViO4F981C4f zdwAudYc2+IWZ*K163Q9y=JR@D!W&>+h_tA@FM~(1>*0@kh-fC&8Z6?ssc(m|3Xn?Z z;J{3H1%7u#Edm{H24a$>3lpM>?dRqP4gnC82@wG%t_rHD2t8T%;+#=oysfeNY)sn6 zQENV++Sv(z;YrX89d+?&s1tx?-bCwM55T$`;rKRMBF3mZp{!>+)B9ElSsPba<(*(3 zN$FkAeD^z@n2XsV!Yk1i+N^b)yEpOnebT#(G?;T2$|4v&3y3?7OL@zscaqTZIg&)R zn}yp$W;t}$Gj}mUGBX!Pc{0ISKz}l#OG$QSXel}!c!PXwL BG0CDe7Ka6yE{ Cd^`c*g1;unk@$)#0Mo4*es> k|+c(`%{2q zk?5R0&Pe9)?vME;JuM5U|6BL5V8s6Qcx@q}0)RgxIUIF#ufEtQyu;NS!$f2$Pp!K* zUa(WYwM6x3vYN2vfXdpIJxa`H=dk^MR5=uV`nN&{v`t7Hg2hp6v9=Ex!Xh1u UqJ8%%?DvB10m^q)wwHeOkF&(yUaterQGG# z8V3 FNNdNob#iPtn=s)-()+q* zc|viQve?GAE9d~>JjIIJz?vx+Tcf_F7AQ*ya1Vdy)&bDdT78Q&U>bv_L9fn-OVI11ao8LNwEtzL zOLK5|oEi3PfRS-)-H=!#pZi!?RhZDpBfWc&LFFSe7i!$@T^@?&i|j;baFV-c#|;*0 zv}$bN;nVITsnBP8@XRnld*2y=3i-7c6arpb3uwN*h@@8U%ykeyZG4~qT=^UxFgpLv zPU1Qav6p5avoe|L{Ucuc0?M&LM#EIp38v(B#@!vGU325>+NN*aDAAEeIaO6aeU_7h2T z(q6+7`b4~)d1(2hu|d^*`s_gv5J=4)hJkZeQWj`ezDgucE?ob{)a^FF^dDmhUtaio z2^5X+lHBP4!}pLEI?=-04MWgGv>oFVG&<0@na!^&0l_RycW&ANTWohqY!_Gf>J@uZ zu39pxuiu@bJI2(6{gBrru}-gNzpt&qzGv?uz`A+>4arU7QD4Y8D2FO= c;C-u;xTI}DifB4(&$n4GM4ovYUvy+0=1SAOg!_)w+MwkEg5e136Wbp;AME8 9*70lE1(ka@hDW?I^Kc2LpgmmK0hs-=jTgcNs5Bn6_XBE9|1z;8Q- zd3dLrUOPRl^9>!rn)bGipmSkBJKes)?OYS Hr`? zVW~%4HfbO+^zNTA{xiMHAd{fJ j zhOoSjTyOKz;{{HwVg~LOR0Xa3BSAxTg$UDk?@)qrUenI(<{8cH$mTUgg@qjJ^Jblh z4X@AXwcudId)@xAySrhLA?V1AKy$Jn3jI7+^Hp1Q^i8@3T^QkV0WB=frkHAVzC pXoZ3N(_-8!G}i>MG=;>|W660bPNZjjQS!cv`7EXPr#S?Dt8&AEb=Hk;tFvo- zs7XnUTcfPadn@XIp#q55p}S}VfMgB4Q0M9IpE}hnV)5lPIr)-b;-^ibke$oYn`Jp~ z10EKs{B4#dU`lt`pb+ZXaJeZ3ijL(dwUXZfQIdTI;3Q;1)>bg$fjhkzG-34cK~^)$ zfdG!6kXGvkCL0ZF#3X;5xh Vr<7sec!a@5@Pf&gYF|_WWGpJe;s|MGAfm2dWhb!u{(Azln{Q9 zR!_Dh!c9Bx5NHZ-IyX2TJFqy2DcbX`m)>i)bivbiuF}$EMp^(D=U0vFS9r1nrq(~g zi3pa#H$mQmeIf?X?lp4MvT&6c$|)Xuk2O?IiFndRn9L)UQJWs=@_Hj=YARq7+fB3y z#g_h)zPU|Wox#0>blRCbaaW{uYk0F5s%)f|2VobE6%}+XZ%Um4{e(FRMSW$h2=@C3 zo9yuBeHT5o%*gC_97nEtn6g|QKsUfH8;^3ALZ|mqCoXXRR?WkIsqwE2{f}&sPPc_F ze_FQNi(yJNkE9d(WW9=*jb#o;IV~h7pQD$zW3|2*aWH{b&iBl}C y*cwVnq?ldWJl{iOqy>X4Rs)rq$L4c&rc}Z5Lj!^26^5U7r zu=XAQGc{B}F?I%_lxi51OErJ)n)ctEW799nnfnLm%JZL;HIjDiNiF?C1ta{l_qmv~ zxEm5lP(&dY{?h*~V+45lP6zHWw_~F_fkW9Ni_!e+LeT}aihcmicGSP)bO`6^?~sHR zT3E%QRxjT}6jjB=Z@GvdK=gJAKoT@o4`xIK#V(T&43GE&5-#g>*Zm;6KOlLKWb-7t zyb$(AcWR?rI j=37s9eC~)^yN3 z5oY%iUO$(Mz$&Cl#}DGlGaMuDAW{f40*k(OhHMoD5icVk`2#6c8OTT_HssJfr3z`u zHHh+3dQC0hGG6)*6zh)wyXh(9gLQ&9F@$@zHx*Y&rPW4^l$=u!FX&Ar3@)SSnln4& zg&wHsGv@ks+G*X-0P+Q!LrOM$X7Tz@64MM#pI5z?(718k_?uW vz zb2@5&4^dnDg5x86W5;z78@_G-UGsnJ?4o>w{1wgEc2O8}$7mB=rj4x3w@l>rmRu-O zt{(XcR8y~*+=f9*C4{4d{f7|^4q p@x!?U z*P5DK_BRl2O!~DxsmNNsQ?Z`~J^oupdhY5`FP6p739t4oNY{Xbt?HPBJ=BWg2Ogtg ziY* gYCg@oq^ikluW=>pc*!gtkoLnA#o_uD$D@;D(r0zKt62M#+yut#Na5(nc z{hYW_@qAVQq5}_Tj#xGRkI|tkq^BX%?JZ;MHGw~tELL3;1B7E;l8kpBlCk(-x%9{d z*3m23?QB95*TxJ`advL%%w+j*Hu76GoGtUkk1Qlm6#rEf__0!%c8++8@_~@))#9oK zMt!fR^sS6G4pdV(aLpq41%hi{%bFZpX?Rvm* &m+7%z>0|v_>XeE*O~`7P!@{$eFje`z&-!sC}|onk^xWMo9D0uBbD~tKf|Z zsg`tYO_KdE=Fm%j=%l{S`z_bpk;=4ycnnvIoc0t?;2su&Xzmty6lel5s_hL*I-0m| zf0ae1oF@`1hq+voco2w8QkEN`GTnyVN1WXOGsTBj@wQTq;m^hGhHrxIovp_%m$e;D z3V;>2frewxC!NLE^sUwygCj1Iq2GbEKhq#97%$BNdrd3Y4-mXrIl#L|AsKJF+jJJB z!nO0}NBL^NLsJ#|0bA@vc!`Ci^J7IPD(0<|n+&1JlPS{-k;#*JlSXM^qhnF#!AyVS zbD5jZA0U!vynRETF-@Tl0&4|Jrke{)<{aCp9IcsmsLOtaIf&3#f^Z9|75<{0LA{8u z@Y}`#OWeDNNd_ 4Ra(bsnzr=pBkf+jw}y-|{m>*+Nl)F+1;)$c(Hk^Y=4WP7J 48w~mN+|T?UP~lkOLF+q7nCW $I?Y31vDu!ZW)C|&L6@xShmWhicwfYBz4+IE-t%#PTkI(30us8u*cIAOM$;n LzymzbBCEUrO;3-6 literal 0 HcmV?d00001 diff --git a/public/assets/img/person/output_webp/sa-shadows.webp b/public/assets/img/person/output_webp/sa-shadows.webp new file mode 100644 index 0000000000000000000000000000000000000000..597ec515f9d086522cf70fa2539fd47bb12aeccb GIT binary patch literal 51962 zcmV(^K-IreNk&HU$^ZaYMM6+kP&gpw$^Zb6>IIzvDgXok1U`{Onn@@oBcdwRS@{4G z3280};TK34MQ8k4k6NAgbbI?#)1ht;uxA{5PLz)S!^_9+-}OC5X{HDBsf$I6)#eO8 z9r7FVU+Me{{NvunWDhlD%k}@^Kl1f|{;&VfE&ihDr`^ZLGokT|{>Sehq1X5NtNM5T zPhw6{&*1u4dNhCO>BsIu$i%LFFcihzp3ZN`s9E#))RCa1*J&= ShVGiGuCmHCF*lj4sb$eHQ8w&< z(ZnBB6V<9C=!L=7sOt0Io$<1vvKxq|1~tI##>ChQkNHggaT61f8;e||8+oZ+)|CfH z6QfF|&8H+{s|v7iBW^wN1kQ6LSk?0gtnXth?36;Qa9>_Yw^9(?VfB4>PstPm1hplA zmmDLiMMNxzBKuC*^GR;mICcrf*V)2A#tn$xFlM;D==BEc^U>!Q{b#ON55dIp` T@|p$m%XhcWWhJ%<`Lp 4 zTS qC2!fG?#`1yk}Q!tG2`OMFFq55ms-dD;EF+izsJ_9r# zfr%H~p0n&H=6_38??e1LmL%_gKBo9Gg<;n7>U7~O29$|ular~f5mC=H>XN%yEu w70n0z2#@Lcbk@{A HW$@e+|aLhQDHioZ3pJle7$U!_bhc8aHk*2PRy~xh@_yweI?IymD2)Ie~@*Y{H!t zxf!&j*V8Cqo_PB W0c$$Fy*=vhYAXw0G2 mhCaG;u)+9ATZ`W_7bH?yDm?9^O6IGTjKHFcPMH(DN5)HFg#i%*aczr zVjusYsi=o|;bE*zvkudkh{(}*FO0{ 0pqdSZ)1gznyobqXNEiyek!)4 z*}!XrUHPFRU4NlD z-f}eI)sCUk#No9DDpW|1{@8yag3K+8R>~A4AO%d}H0%1z;6ny6qnHdCVP+fZdG{LI z&|D0?`?yihc$_Qagx(i72&&kTH}MwM1z{<(g9hbg2l$(j6Jmm>j?5&tVBwz&-(4%U z(&VvJN@=zjDQ9kO$;^RByuAm{Q1$AKgcFQ`02s89@M>|Py$e_*MUmWQOpp0jn&+ur zlM~mHl@V_PTe4pQ)xgecVc?qCVK}1Ga9z5$R@0M=l>2ksbZ}k|H_hpAycD5&S z4Yfagd<*}8`i_j?UG5(j@E+l75&^U@Gk`8^6=U?FFjBw~81FuNx3A~nsM$@Mp;qTt zb&HcEqh6^Y6TzQ0-kG14u-wdchaauoNt$K7C?==&qogZ^ez=0!PPYVR;t*}0k5(jd zU5-Y`1Zj<;K(8UyzSsZ$cjmdn 4Qzn!typAU(~C$wUDYusM7*{J zDJ_Yux`GaJ<_6h-E&SmW6cz{Zh0AT)TnFB|O=W@lgVTDw37RJ+C;e*QM_P0i?uzP! zb)WYX)ym`|{rVH;?QQ^uWLYPi97cJaIuHp9J|AFz>tzOb`A)oUaWAG9exS@41hf~y zmx7)<9(-;bAP>>nrM6V$0!8Ah%&ld&)ubjN@nbZUK+@5NN=(>9dBnVHA|U
&_&pOG0W?wyo`6gx4i?5LnFYn54qn8C`z=>XH3V1)hrGF%j|Nd z{@cr+c}|aGa`|BIdXq1?B+;bx`5ypBAT66>O*NNxfHD2ZqGT?3%rwBb)F6~{6fWI{ z0RUpQZb+&aKo|6xFI0R1+W7e+VC);4fj#qE`fQ=yuKS7)FhW6LR|%+nj^&b!wu)!g z*W&7qXid`dZWm%;>^y;N*IGk%0WK#9@%!j{ocb}$ejJ@7>S|%ig;}pHmNCP>n0wlf zHEPL8+lcOHtw_0X2|wFj?J=V@7TSPXR&WN)mOi1yXsalt*ij{*EL_8@ALJ3o LoiT1QD0xD#b+zW;Xb-#T0%ZI=yBu W zE~Mha7TV9Ym_d}bDS`P&lIkejoxmA&TUJxhfd}3f`Ya1_gnWb}dc-8ohFX=ql~c0% z9tGi(?*8w(n`tqlPQjN2LGDZeVm6!okW~$a%=uO~IOrBk^k?H4;yY%9Rx}=V+rS`< zbwmBp<;A)?kVy?)Y{g2zvQ;4Fz1G%$T$e1w{}r=rH%r$yUW|EK#Mx#q6e0$i5A>`! zgBf;kKA5s{=;vM*rgUpXATN!y)(74U7LA%XFIbRsM7LZrT0mJD)LU><+bXk~G!mV@ z&29naHr&s)7GqpJ*sEU3Hm*JXZdU0x>bmCLH$|+>>8ITm>EbL3oIFA OC+`KJXDSggnzD;X_g?!-iBrv$!xFr26}}NIZ9h zJXxBa`#a;bKL$HeS?jx0BrC>hz6pvfC=J7N`cqEoT#_@`Ouf}Eu7_cKCsn94wI7EX zRDxUo4&8swX~+dPWqy7XtrY(T*ZU>)!oO*r#Q>du^S96@seSN*c{OypW+x-=cIFj3 zRm^)(OYiubCbap&>-AqE-tHawo}d1a1BUjdI^Vo36q0&fB9YtG$Y&J@B}Nt@)0QOM z>#Jc7rk&lI7tj!*w3J!nNUK{oOw-}8Cgg_67+7v&sw5%99cc}@aU4p}bda%^!Mw)k z9$UATkN0ZJQZa8J&j|BVkn+tN*D<+J+uz!uLeHv|u#7paoQo%mq|31a`#aFwPWM>4 zAFox)i6m~|fR3pRA4tkC0sdlovQ%hLK4u5SM}N7-4b(k4L56%Ec=et`QZ{%)M=g=* zg k$m9g^_Soii5JD<(U2_y z;RbmC(E^Wk|9aSH=R0H-oGX+fjOrZP2W{uZ-*rGeq+?M0JM0T}y{>ez20r9ou;Tjh z5||B`S*MM@ee2s@IN7c66daGAOh|2Z02-Mg$ce8rWoNzVB0T`@z4F{!*w{55dyRzm zdA(6?E2b1&mn{EeF$rkOMDHG->VT<5S;+3>)`-_6zs|Bp28H+%sOSazefOHqB7#kR z*k2j-CViq;{#|p|6O#k;lZmL)VJn{;s&uf{ d9 zNx5JC@ewK1JP0YRoGnjXrYH54WlKvtB>kZ=cGmLa`tPTQmXPH-)E6q@HLm?f>;rTC zBn?TbJLtk#W833{2^5pk8cjuH!%u>z(AZJE1T{db{`x_boUNVuhjUW&;sB&51(4v- zrdt=)i81q?&3O4ox95Gs0~?xp0=md X&7wlr0&q3z z>*nbRkAy#}JJ6a<9CZT0sF76sJ>9uGZyAc19TS G z&8ino+7RK>;q7_+Dk>oqEzm3Por|6~r{q4SYdIXXU*H1;&WMX1eYX5Z?`H#yR-&^e z?A~OZg@1OKeq%}FRQTus={g^qj<<1OOEQ`J`@F;IZmwTc1MT>G)oz#5IBEhh2HPpI zn!XRs9+pXGOr=}bGQ_Zu{aP+CG95|Th^-WVczpMhAn6&|AY(priDH|&cNUtv2sJYo zFLmtj!aE5`JVMAN*o{|_PUWSjn~jg*KySHW`l)|Gz~r#^<{PZju8HYe2e1FuT9$0) z2cG?1g}a-_&1AgEh-~H}_2F96iy-yMW+Zx>%pXTacb1jnP<2PHD}qdvq(9}rYoG1? zK^e!}gK9eN81LN&9Mh*(@!VcCPbQDs{}85DUY9k~ni=R6AotE?c^JjJbIlwskD(!I zKd0X6x2|rcjmjAGk6Z)(2dAw;OH}{4rE~Sw^ZVtu$aS)#e?Cv8i_7Jx*a1Nqf_VVh zE_Nx5bXJ-LHwRe|@)E@*vw&yvyYV1z(V<^TisMF-3O{~fR5&OmlYdjL8NwEB% LC%vY>EJ+g|xQ><`6pPDHY15#vk_PS+ zZl@DCfI?HjssXMcPQKex&pXIvDMl7k@=nld+MIKWs_$-#6TG^5(qyEh1+-yt&Jf@{ zecs&Yg55@Zv9R14+E&^x41c#>x_)b+CUn{anB4R<%(tu*EZ~ @IkVSDM)p o(C&pslb^v<$*&6H>aqZ#Mh}T1ed #~NbAsOsHmU~=3zgW0M(dy)R5xSdoZ zl-AJ>kCimS%6xcX#Gwqh1e !x0D|O`h5XJyifw~=wNmhI{t-uX# zH&*$Ea*gRfFU)E*oG<>(;f~q|Qb;Y{p4ay+?0D^2dy6WzJGtV&0b$+yaVzSZ!R^O^ zyloF4k7bs=9j~?X$t-+hRIKJY-Hvv;A)CGD(#KC<9P#egYF*{B#Nuj!bY3kg;wyTb z!=?fiP%`;SGDt)V&Gq+HK34CS{}BY=S7ck=dDyc*iHPafch%_O|6IsfIm!GEm%|K9 zG`DIlo?H60mpCF}Bm+E_%Kss8nS8Ad?n O{ SIT0JWILyIQv3r9*(E{sNVWPFifJ`Rn_--1Zsx-rYh)#X}2Bfj(^X@3T=~y z)A6!-rE55ga$>qVG~Zb84CU~gOf*NdrH8I=Si0Wp42Dlwov%|_|5K4CxtH*iI3i8- z;NYiFmgbpCFKjS6>U!H<;*;fFFvM6uJV(42d6cc*+StIHTufPZb1j70$j0P xAED4;DUG7RF3-SdR!3hl?-QAXwjUjQ$iEpiou(uuOAy!&3_&k^Nup0V~)^1Wj?! zpi9(Eiw2?WJ8I?-`*#5?TVw_)G&Page~8y_`o#)HH`8WZ&GX(_(6$A}%$qVg48mnV z@YohNj%BtpbAT9&c9tIYpt@h;+v!yU9kBW6%rEPoM;BT);Jtq(hF&=plF5Rdr`bu+ zjx?z`Q$uG$qBsY9lj=RgPPv~{y6q!lo$cI3!dDx6oGC^aBqNJ~r)P#(eimVPWB)sD zhB};KD|L_*G_w#pv^BNk{CQu}iWbO&W8g{f4Gu5r*QX1u+hLbPNRzRa4W3rBN4BEu zUkS>mkqr*{mtbQ7&j{<8z0^*BYJ@>~WK0CHxgYWa=a*4aTS_lan$1LlK~*IU0E>G* z1`SL7KS7f6=`J0!EQ75no+ST^&3$aGc+Q3lpyuI2^wP-U9|jkEwDA=HqEKs_`bMPO z>@Mxx)0V`XNm?8zlgT`hZlu&3lKG^K2Q>b+I-Q_N-Nhhjahlz{o}@}F+x1J2s!q0W zmxwrdmvqN3@RXB72~{H8d_cRHxU^8OIW+OR&iJ_fMuWT7H=7{b=gy_7JHz36Skh#M z^WHcb=r`DC JF&vIe0A%hGnicVVN03)B zwkc(PvJ95(yHi{sPxZ`mO_IkpTlY7dGi{CJ8WxMlSV|_*O(MEg>0EPJ(sui$=-M3w z*qd(Kpk_x<#OPXql8VwJoUM#>Mio!i4U@^cMoF9`sn3_dm}0&Xj(wTSaR6^XR2pq? zUCgL4bkhB}|D4UoMhQhl?Gne=70%f2O> K3w27+~v4S48T5zn6zH y~UN)M*b$?U4!ytMym!q7_d#nvKFS?Rk9v z%TSI(iFP+x&I+fW-TjxzmSXT#^t$f#ua4n1MiFMa3IS|#*=p8y#@D!{RL|MPW4h?h z4TT~*n;$pYyq5`ImQ9UX(FQz~z_`os)L9+)Qo-YkJ9_G=C{FIP%oQyW2pP>=gQ2%j z%wRZ<%WTK8egr);y}B82&uCnIbo;7i lf&O>zFJQ=k@@_oP+tS1%)?49DDUn{%i%qh}ybey1q~0XC|!V1Fu7ydYmz z{js+Ke|TiS7uiZ1v1FEF2%X6V&PY=8Uziy<`;>3S3p4NRPx1#=1{{#J3 6H;*iZ8qyyUbxggJL7vCSG$zmOTiEboWRO!9R_KtUEWdF+ zaFd;W2AD^qsL#s6C^q~Rm6_1rY6*jsFF^*Gg*iue=&g5-I4jWsmmS%nJdpgnV%i6= zZsHSL(of^(Smt^Zk4}mmt9GE!5MmaZ=4bIJd;p?hAU!GZ3~sL)P StF>y=}#o{(209m34m-(~DXi9C}iD*TLGJ1mv@x zNji>d%9>=ogDi+|CgNIin;02HPexnADi2QQceiRB6%lx)INY^F8vsOUU66!KD)T}k zEItywFpErUyW9N;+lXIgLAix?D&Zx>M6HuOpqdqFp+KxzoNmxQJU?EOGC&>7<4_5+ zO%=~F&o@Jh;<4lYF1cFql|J*8?nJ%eRlI0PgY&rk#sxd`7Pf-o0Y@(it3ShJKfZmj zs{LTFTB|r(GmaEy2jsk3Zp>BLZ4F@{v4dHYu{x9rGR#Vc`19fWc!NkQ_r-**!dz6c z6SSr`#LftTt0y!d*uc6tBmh@n?fLa=7F7*jHIpksJ9Q??5who7Oz%%vyUM6tpe={j z_HcD6dR+9jG-VMO-oSZL_oBi;>RMz<(}YW|WzUY5UZEN1PGz2P$<_!i9%?pS-Nuw| z$+UPY9udbEl_v8o7@b{-B~+K%aixcrHO6pL{zPEllkvfT6U^SIhO*4`e&Ce4d8Ro& zuKyB{>_@aOIdbev?MJRvl&Sm3&J +?-nKFO`;r{28 zFa^@mf~DwEFS-nwzogI#^gCtmei8dc;kB^$fD6#IgOi>=;=@j^ek9D}VLz~Df;}y2 zEbR4WA_*6*&$LEt1NC}`<=NK1Q;Hk-NwP5jx%|gC%}L+NIQ~{y5;axPz1a4u(xx>1 z0Pp*k$T4Z1h~AEtF#O-M)jr4-pV(>?f#&ihMD)}UG0Npr&|hD&Yym!TmvH0G&MrXb zoOXMRKr?6G0y!_jR8WRL1W~*H_P=o((({RJVkK*8eUS2uyS1)-uj`cqca9stiO^{m zb(_P%D`<3vGIvO6PcPWwNV}vq*a$GuQDF3Y@}|#J%m<;V!pE0j!yp@can)PnHZS6A zit*{szAL&wyg917_DCe!0ER);{QYzh#NFtQ3LAizQy49JL#zaHzztH0#6P63{xs0m z24kYMN;t;28E#PgFG5Vu(d~Du#)FK(fndNYbjeVCn~QW;8BS1I!^8;yxcjEj$8uKi zr=N79?bIC3u6-C|AxCC~qWoYB{&oGNSRH5gcc5RXZu}qh{cPU_P}~}5H%i2aV2lI} z%Xo28uiM|W{*?R2X0+)#n$gg2bE;(o1L(<8PhgBl|4**>-y0ep=Bb-X;!E|r!D)0O zUu|;P5`0&C&8l52i&mkyD)~c#k7)Js!{_%-q$GPvaX}(6dXGT`GZFKnalLy+C4s1~ z6f-8NFyz$D^|7p+GQQH$M(9B6DbkxZ{WpYh$;1Z^!t;9jI_|XzHme8loI4x#sujV~ z!TiZ8#n8=5ZkCQvo0T)dS|{yili-+~QsFHImT753xHwhdXPwE%JDM@k6W5Z={nN4& zdh<*S;I;|&{8}pC@Ia6V0wi}AbyW(OTV@Ie*LVg}x{EbeCub><7cfFEyknap(3)={ zit`{G^y(!(aEQ-JJNc5qqL$Q5epksweGw=?1dYauRcAAj6rWJ;8{u^i{Qt}lhCsnB z*(*j`7O&=GvHX~Cx5Ab&PG2jV7c~t#Y3d@Scb3Wg8YRffbu>O-2mq8;vLU$j#7k@A zzO{Gd+MLYXZ`(&6cv#y|h(ydJffzvI_Jda9%z3G89$pPJrCjW40C%fWhT*b@+B8Tt z>jx@HSgb~(nS%D|UA%3`3rY5f@Z2*?;SvG7-U5nbkmSv?>&Bw}lxl*Tn^cajvTLx# zA(?{0L zXd79do(qpHG{vAbT84_-Po&4Bv9`sYtblT8cunhT-nQ2EoW>y!Ic?m#`mdM;Tl`$f z1OaftPvb@6)2@fEVn)qVCcx?3d8uvFOI2jHzp;Pr4x~Hiy4tKeJCTc0o8vpR`CoO- zsp=NY_g_WRi>%q9NxJVc_C*IrSA=BCpXH`PAQD9Aqu`U%>^ylmQFt?4lj%@SH}F4g zc@IVU4uQJLUS{h7I%t1I+LQ1!6^ E*PiqT~bUqrD4>g!7>bS4!yi}x@p092Qx zTwy`t;`%@R)PcyWRt)~olkRNm1L%~i>fk8BeenSuGM$v9OpHTNz~7A>8Ix!u))_Lz zt+^a(N@ka!hHY$emYjh0w*%^_KiMH|g_TvOAInh+W~3p4+!f|-h+E(7aZ+nvX;j%K zt&>s3c~X+3Y(s|G*R3?$Fa|aT^A(fF{EQE1R_C>=ul7x4U>Wf0jZ#tbKVi2-^WF1@ zfE)z$d#9