From eff849549b4d8fa661d1b07c2c1d742ecae7df3d Mon Sep 17 00:00:00 2001 From: Lang <7system7@gmail.com> Date: Sat, 11 Apr 2026 19:23:59 +0200 Subject: [PATCH] chg: usr: refactor and redesign the gfx on front-end #4 --- .gitignore | 1 + assets/css/style.homepage.scss | 683 ++++++++++++++---- assets/css/style.mineseeker.scss | 106 ++- .../hooks/useServerCommunication.jsx | 40 +- public/images/technologies/bun.svg | 1 + public/images/technologies/howler.svg | 1 + public/images/technologies/jquery.png | Bin 9067 -> 0 bytes public/images/technologies/lets-encrypt.png | Bin 14857 -> 0 bytes public/images/technologies/mercure.svg | 18 + public/images/technologies/phpstorm.svg | 1 + public/images/technologies/react.png | Bin 12988 -> 0 bytes public/images/technologies/symfony.png | Bin 10632 -> 0 bytes public/images/technologies/symfony.svg | 1 + public/images/technologies/tanstack-query.svg | 1 + public/images/technologies/vite.svg | 1 + public/images/technologies/websocket.png | Bin 5111 -> 0 bytes templates/Game/index.html.twig | 140 ++-- 17 files changed, 745 insertions(+), 249 deletions(-) create mode 100644 public/images/technologies/bun.svg create mode 100644 public/images/technologies/howler.svg delete mode 100644 public/images/technologies/jquery.png delete mode 100644 public/images/technologies/lets-encrypt.png create mode 100644 public/images/technologies/mercure.svg create mode 100644 public/images/technologies/phpstorm.svg delete mode 100644 public/images/technologies/react.png delete mode 100644 public/images/technologies/symfony.png create mode 100644 public/images/technologies/symfony.svg create mode 100644 public/images/technologies/tanstack-query.svg create mode 100644 public/images/technologies/vite.svg delete mode 100644 public/images/technologies/websocket.png diff --git a/.gitignore b/.gitignore index 6d48fef..e3de4fa 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ node_modules/ nohup.out /public/build/ +/config/reference.php ###< system7 - jotunheimr ### ###> symfony/framework-bundle ### diff --git a/assets/css/style.homepage.scss b/assets/css/style.homepage.scss index 92b0aa2..2094ef5 100644 --- a/assets/css/style.homepage.scss +++ b/assets/css/style.homepage.scss @@ -1,181 +1,592 @@ +// ── Reset ──────────────────────────────────────────────────────────────────── + * { outline: none; padding: 0; margin: 0; + box-sizing: border-box; } -html, body { - background: #ffffff; - display: block; +html { + // Grid lives on html so it tiles across all pages including content pages + background-color: #07090d; + background-image: + linear-gradient(rgba(35, 111, 135, 0.1) 1px, transparent 1px), + linear-gradient(90deg, rgba(35, 111, 135, 0.1) 1px, transparent 1px); + background-size: 46px 46px; width: 100%; height: 100%; } +body { + background: transparent; + width: 100%; + height: 100%; +} + +// ── Hero ───────────────────────────────────────────────────────────────────── + header { - background: #d1e8ff; position: relative; width: 100%; - height: 950px; - color: #ffffff; - overflow: hidden; + + // Minesweeper grid texture + background-color: #07090d; + background-image: + linear-gradient(rgba(35, 111, 135, 0.1) 1px, transparent 1px), + linear-gradient(90deg, rgba(35, 111, 135, 0.1) 1px, transparent 1px); + background-size: 46px 46px; } -header section { +// Deep radial vignette – grid fades toward the centre +header::before { + content: ''; + position: absolute; + inset: 0; + background: radial-gradient( + ellipse 85% 75% at 50% 50%, + #07090d 10%, + transparent 75% + ); + z-index: 0; + pointer-events: none; +} + +// Smoke at the bottom so header bleeds into body +header::after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 160px; + background: linear-gradient(to bottom, transparent, #07090d); + z-index: 1; + pointer-events: none; +} + +// ── Hero section ───────────────────────────────────────────────────────────── + +.hero { + position: relative; + z-index: 2; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + min-height: 100vh; + padding: 80px 40px 160px; + gap: 0; +} + +// Decorative glow blobs in opposite corners +.hero::before { + content: ''; + position: absolute; + top: -60px; + left: -60px; + width: 420px; + height: 420px; + border-radius: 50%; + background: radial-gradient(circle, rgba(173, 10, 5, 0.09) 0%, transparent 65%); + pointer-events: none; + z-index: 0; +} + +.hero::after { + content: ''; + position: absolute; + bottom: 100px; + right: -60px; + width: 380px; + height: 380px; + border-radius: 50%; + background: radial-gradient(circle, rgba(35, 111, 135, 0.1) 0%, transparent 65%); + pointer-events: none; + z-index: 0; +} + +// Logo +.hero-logo { + display: block; + margin-bottom: 72px; + position: relative; + z-index: 1; + animation: appear 0.9s cubic-bezier(0.22, 1, 0.36, 1) both; +} + +.hero-logo img { + width: 400px; + max-width: 82vw; + filter: + drop-shadow(0 0 40px rgba(35, 111, 135, 0.35)) + drop-shadow(0 6px 20px rgba(0, 0, 0, 0.8)); +} + +// Body text block +.hero-body { + position: relative; + z-index: 1; + display: flex; + flex-direction: column; + align-items: center; + gap: 0; +} + +.hero-sub { + font: 300 17px 'Rajdhani', sans-serif; + color: rgba(149, 207, 245, 0.9); + letter-spacing: 3px; + text-transform: uppercase; + margin-bottom: 18px; + animation: rise 0.8s 0.15s cubic-bezier(0.22, 1, 0.36, 1) both; +} + +.hero-sub strong { + font-weight: 600; + color: #95cff5; +} + +.hero-avatar { + width: 36px; + height: 36px; + border-radius: 50%; + border: 2px solid rgba(149, 207, 245, 0.25); + vertical-align: middle; + margin-right: 10px; + margin-bottom: 2px; +} + +.hero h1 { + font: 800 58px 'Rajdhani', sans-serif; + color: #ffffff; + line-height: 1.1; + letter-spacing: 1px; + margin-bottom: 56px; + text-shadow: 0 4px 30px rgba(0, 0, 0, 0.7); + animation: rise 0.8s 0.28s cubic-bezier(0.22, 1, 0.36, 1) both; +} + +// ── CTA button ─────────────────────────────────────────────────────────────── + +.hero-cta { + position: relative; + display: inline-block; + font: 800 28px 'Rajdhani', sans-serif; + text-transform: uppercase; + letter-spacing: 6px; + text-decoration: none; + color: #ffffff; + padding: 22px 100px 20px; + border-radius: 4px; + border: 1px solid rgba(246, 125, 82, 0.25); + + background: linear-gradient(to bottom, #b30c06 0%, #d63d15 50%, #f67d52 100%); + + box-shadow: + 0 0 0 1px rgba(173, 10, 5, 0.2), + 0 0 30px rgba(173, 10, 5, 0.35), + 0 6px 24px rgba(0, 0, 0, 0.5), + inset 0 1px 0 rgba(255, 255, 255, 0.12); + + transition: transform 220ms ease, box-shadow 220ms ease, letter-spacing 220ms ease; + animation: rise 0.8s 0.42s cubic-bezier(0.22, 1, 0.36, 1) both; +} + +// Outer glow layer (blurred duplicate, always visible) +.hero-cta::before { + content: ''; + position: absolute; + inset: -4px; + border-radius: 7px; + background: linear-gradient(to bottom, #ad0a05, #f67d52); + filter: blur(18px); + opacity: 0.3; + z-index: -1; + transition: opacity 220ms ease; +} + +.hero-cta:hover { + transform: translateY(-4px); + letter-spacing: 8px; + box-shadow: + 0 0 0 1px rgba(246, 125, 82, 0.3), + 0 0 50px rgba(173, 10, 5, 0.65), + 0 10px 32px rgba(0, 0, 0, 0.45), + inset 0 1px 0 rgba(255, 255, 255, 0.15); +} + +.hero-cta:hover::before { + opacity: 0.55; +} + +.hero-cta:active { + transform: translateY(-1px); +} + +// Version / copyright line +.hero-meta { + position: relative; + z-index: 1; + font: 400 12px 'Rajdhani', sans-serif; + color: rgba(255, 255, 255, 0.5); + letter-spacing: 0.5px; + margin-top: 58px; + animation: rise 0.8s 0.55s cubic-bezier(0.22, 1, 0.36, 1) both; +} + +.hero-meta a { + color: rgba(149, 207, 245, 0.65); + text-decoration: none; + transition: color 180ms; +} + +.hero-meta a:hover { + color: #95cff5; +} + +// ── Compact hero (sub-pages) ───────────────────────────────────────────────── + +.hero--compact { + min-height: unset; + padding: 36px 60px 48px; + flex-direction: row; + align-items: center; + justify-content: center; + text-align: left; + gap: 52px; + + &::before, &::after { display: none; } + + .hero-logo { + flex-shrink: 0; + margin-bottom: 0; + + img { width: 180px; } + } + + .hero-body { + align-items: flex-start; + } + + .hero-sub { + font-size: 14px; + letter-spacing: 2px; + margin-bottom: 10px; + } + + h1 { + font-size: 26px; + margin-bottom: 24px; + letter-spacing: 0; + } + + .hero-cta { + padding: 12px 52px 10px; + font-size: 18px; + letter-spacing: 4px; + } + + .hero-meta { + margin-top: 20px; + } +} + +// Also shrink the bottom fade on sub-pages +header:has(.hero--compact)::after { + height: 60px; +} + +// ── Animations ─────────────────────────────────────────────────────────────── + +@keyframes appear { + from { opacity: 0; transform: scale(0.94); } + to { opacity: 1; transform: scale(1); } +} + +@keyframes rise { + from { opacity: 0; transform: translateY(16px); } + to { opacity: 1; transform: translateY(0); } +} + +// ── Content pages (terms, privacy, contact) ────────────────────────────────── + +main div.txt { + color: rgba(255, 255, 255, 0.85); + max-width: 900px; + margin: 0 auto; + padding: 60px 40px 80px; +} + +main div.txt h2 { + font: bold 28px 'Rajdhani', sans-serif; + color: #ffffff; + margin-bottom: 30px; + letter-spacing: 1px; +} + +main div.txt h3 { + font: bold 17px 'Rajdhani', sans-serif; + color: rgba(149, 207, 245, 0.9); + margin: 28px 0 10px; + letter-spacing: 0.5px; +} + +main div.txt p, +main div.txt li { + font: 400 15px 'Rajdhani', sans-serif; + color: rgba(255, 255, 255, 0.72); + line-height: 1.75; +} + +main div.txt a { + color: #95cff5; + text-decoration: none; + transition: color 180ms; + + &:hover { color: #c5e8ff; } +} + +// ── Technologies strip ──────────────────────────────────────────────────────── + +main { + background: #07090d; +} + +.tech-section { + padding: 48px 20px 72px; + text-align: center; + border-top: 1px solid rgba(255, 255, 255, 0.04); +} + +.tech-label { + font: 600 11px 'Rajdhani', sans-serif; + text-transform: uppercase; + letter-spacing: 6px; + color: rgba(255, 255, 255, 0.14); + margin-bottom: 28px; +} + +.tech-logos img { + display: inline-block; + width: 52px; + height: 52px; + object-fit: contain; + margin: 8px 24px; + // Force all logos to white, then tint with the game's blue + filter: brightness(0) invert(1) opacity(0.35); + transition: filter 220ms ease, transform 220ms ease; +} + +.tech-logos img:hover { + // Bright white → blue-tinted on hover + filter: + brightness(0) invert(1) + sepia(1) saturate(3) hue-rotate(175deg) brightness(1.1) + opacity(0.9); + transform: translateY(-4px); +} + +// ── Footer ─────────────────────────────────────────────────────────────────── + +footer { + background: #040608; + border-top: 1px solid rgba(35, 111, 135, 0.12); + width: 100%; +} + +.footer-inner { display: flex; align-items: flex-start; - justify-content: flex-start; - flex-direction: column; - max-width: 1300px; - width: 100%; - height: 100%; - padding: 20px; + justify-content: space-between; + max-width: 1100px; margin: 0 auto; + padding: 60px 60px 52px; + gap: 40px; } -header section div.logo img { - width: 350px; - margin: 50px 0; +// Left: brand block +.footer-brand { + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 10px; } -header section div.logo a { - display: block; +.footer-logo { + width: 72px; + height: 72px; + opacity: 0.55; + filter: + drop-shadow(0 0 12px rgba(35, 111, 135, 0.4)) + brightness(1.1); + transition: opacity 250ms ease, filter 250ms ease; + + &:hover { + opacity: 0.9; + filter: + drop-shadow(0 0 20px rgba(35, 111, 135, 0.65)) + brightness(1.2); + } } -header section > img { - position: absolute; - width: 1300px; - height: 1300px; - right: -20%; - top: -10%; - - z-index: 1; -} - -header section > div { - z-index: 2; -} - -header section h1 { - font: bold 40px 'Rajdhani', sans-serif; - color: #434242; - margin-bottom: 100px; -} - -header section h2 { - font: normal 32px 'Rajdhani', sans-serif; - color: #434242; - margin-top: 100px; -} - -header section h3 { - display: block; - font: bold 16px 'Rajdhani', sans-serif; - color: #434242; - margin-top: 10px; -} - -header section h3 img { - width: 16px; -} - -header section div.buttons > a { - background: #69788e; - display: table; - font: bold 32px 'Rajdhani', sans-serif; +.footer-name { + font: 700 22px 'Rajdhani', sans-serif; + color: rgba(255, 255, 255, 0.75); + letter-spacing: 2px; text-transform: uppercase; + margin-top: 4px; +} + +.footer-tagline { + font: 400 13px 'Rajdhani', sans-serif; + color: rgba(149, 207, 245, 0.7); + letter-spacing: 0.5px; + max-width: 240px; + line-height: 1.5; +} + +// Right: navigation +.footer-nav-label { + font: 700 11px 'Rajdhani', sans-serif; + text-transform: uppercase; + letter-spacing: 4px; + color: rgba(255, 255, 255, 0.5); + margin-bottom: 18px; + text-align: left; +} + +.footer-nav ul { + list-style: none; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 6px; + min-width: 180px; +} + +.footer-nav ul li a { + display: block; + font: 500 15px 'Rajdhani', sans-serif; + color: rgba(255, 255, 255, 0.7); text-decoration: none; - border: 5px solid #57667b; - color: #FFFFFF; - padding: 25px 150px; - margin-bottom: 20px; + text-transform: uppercase; + letter-spacing: 1.5px; + white-space: nowrap; + padding: 6px 0; + transition: color 180ms ease, letter-spacing 180ms ease; - box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3); - border-radius: 20px; - transition: all 250ms ease-in-out; + &:hover { + color: #95cff5; + letter-spacing: 2px; + } } -header section div.buttons > a:hover { - background: #57667b; +// Bottom copyright bar +.footer-copy { + border-top: 1px solid rgba(255, 255, 255, 0.05); + padding: 16px 60px; + max-width: 1100px; + margin: 0 auto; - -webkit-box-shadow: 0 7px 15px rgba(0, 0, 0, 0.2); - box-shadow: 0 7px 15px rgba(0, 0, 0, 0.2); - -webkit-transition: all 250ms ease-in-out; - -moz-transition: all 250ms ease-in-out; - -o-transition: all 250ms ease-in-out; - transition: all 250ms ease-in-out; -} - -header section div.buttons > a.small { - background: #83aed9; - display: inline-block; - font: bold 22px 'Rajdhani', sans-serif; - border: 1px solid #6890ba; - color: #FFFFFF; - padding: 10px; - - -webkit-box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 10px rgba(0, 0, 0, 0.3); - -webkit-transition: all 250ms ease-in-out; - -moz-transition: all 250ms ease-in-out; - -o-transition: all 250ms ease-in-out; - transition: all 250ms ease-in-out; - -} - -header section div.buttons > a.small:hover { - background: #86b5e1; - border: 1px solid #658fb8; - color: #FFFFFF; - - -webkit-box-shadow: 0 7px 15px rgba(0, 0, 0, 0.2); - box-shadow: 0 7px 15px rgba(0, 0, 0, 0.2); - -webkit-transition: all 250ms ease-in-out; - -moz-transition: all 250ms ease-in-out; - -o-transition: all 250ms ease-in-out; - transition: all 250ms ease-in-out; -} - -@media screen and (max-width: 1100px) { - header section { - align-items: center; - justify-content: center; + p { + font: 400 11px 'Rajdhani', sans-serif; + color: rgba(255, 255, 255, 0.45); + letter-spacing: 0.5px; text-align: center; } - header section div.buttons > a { - margin: 0 auto 20px auto; - } + a { + color: rgba(149, 207, 245, 0.6); + text-decoration: none; + transition: color 180ms; - header section h1 { - margin-bottom: 20px; - } - - header section div.logo img { - margin-bottom: 0; - } - - header section > img { - display: none; + &:hover { color: #95cff5; } } } -@media screen and (max-width: 500px) { - /*header {*/ - /*min-height: 100%;*/ - /*height: auto;*/ - /*}*/ +// ── Responsive ─────────────────────────────────────────────────────────────── - header section { - width: auto; +@media screen and (max-width: 768px) { + .hero--compact { + flex-direction: column; + text-align: center; + padding: 36px 24px 44px; + gap: 28px; + + .hero-body { align-items: center; } } - header section div.logo img { - width: 100%; + .footer-inner { + flex-direction: column; + align-items: center; + text-align: center; + padding: 48px 30px 36px; } - header section div.buttons > a { - display: block; - padding: 25px 5px; + .footer-brand { + align-items: center; + } + + .footer-tagline { + text-align: center; + } + + .footer-nav-label { + text-align: center; + } + + .footer-nav ul { + align-items: center; + } + + .footer-copy { + padding: 16px 30px; } } + +@media screen and (max-width: 900px) { + .hero h1 { + font-size: 44px; + } + + .hero-cta { + padding: 20px 72px 18px; + font-size: 24px; + letter-spacing: 5px; + } +} + +@media screen and (max-width: 550px) { + .hero { + padding: 60px 24px 140px; + } + + .hero-logo img { + width: 260px; + } + + .hero-logo { + margin-bottom: 52px; + } + + .hero h1 { + font-size: 32px; + margin-bottom: 40px; + } + + .hero-sub { + font-size: 14px; + letter-spacing: 2px; + } + + .hero-cta { + padding: 18px 48px 16px; + font-size: 20px; + letter-spacing: 4px; + } + + +} \ No newline at end of file diff --git a/assets/css/style.mineseeker.scss b/assets/css/style.mineseeker.scss index 274fe92..624a0a4 100644 --- a/assets/css/style.mineseeker.scss +++ b/assets/css/style.mineseeker.scss @@ -88,7 +88,7 @@ main { font-family: 'Open Sans', sans-serif; text-align: center; color: #354d6a; - width: 500px; + width: 660px; padding: 10px; -webkit-border-radius: 10px; @@ -109,47 +109,93 @@ main { color: #386e8c; } -#mine-wrapper .game-wrapper .game-overlay .game-overlay-window .clippy { +#mine-wrapper .game-wrapper .game-overlay .game-overlay-window .share-invite { + padding: 0 4px 4px; +} + +#mine-wrapper .game-wrapper .game-overlay .game-overlay-window .share-invite-label { + font-size: 13px; + color: #386e8c; + margin: 0 0 8px; + font-style: italic; +} + +#mine-wrapper .game-wrapper .game-overlay .game-overlay-window .share-url-box { display: flex; align-items: center; - width: 100%; - margin-bottom: 10px; + background: #d0e8f5; + border: 1px solid #7ab8d8; + border-radius: 6px; + padding: 0 12px; + margin-bottom: 12px; + cursor: text; + transition: border-color 200ms ease; + + &:hover { + border-color: #236f87; + } } -#mine-wrapper .game-wrapper .game-overlay .game-overlay-window .clippy input { +#mine-wrapper .game-wrapper .game-overlay .game-overlay-window .share-url-icon { + color: #236f87; + font-size: 13px; + flex-shrink: 0; + margin-right: 8px; + opacity: 0.7; +} + +#mine-wrapper .game-wrapper .game-overlay .game-overlay-window .share-url-input { + flex: 1; + background: transparent; border: 0; + outline: 0; height: 40px; - width: 100%; - padding: 0 20px; + color: #1a4a6a; + font-family: 'Courier New', monospace; + font-size: 13px; + font-weight: bold; + letter-spacing: 0.3px; + text-align: center; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + cursor: text; + min-width: 0; - -webkit-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075); + &::selection { + background: rgba(35, 111, 135, 0.2); + } } -#mine-wrapper .game-wrapper .game-overlay .game-overlay-window a { - background: #d8e3ea; - display: inline-table; - text-decoration: none; - color: #126aa2; - padding: 10px 50px; - margin: 0 2.5px; - +#mine-wrapper .game-wrapper .game-overlay .game-overlay-window .share-copy-btn { + display: inline-flex; + align-items: center; + gap: 7px; + background: linear-gradient(to bottom, #236f87 0%, #1a5068 100%); + border: 1px solid #2e7a9a; + color: #e0f4ff; + font-family: 'Rajdhani', sans-serif; + font-size: 15px; + font-weight: bold; + letter-spacing: 0.5px; + padding: 9px 32px; + border-radius: 5px; cursor: pointer; + transition: all 220ms ease; - -webkit-border-radius: 3px; - border-radius: 3px; - -webkit-transition: all 250ms ease-in-out; - transition: all 250ms ease-in-out; -} + &:hover { + background: linear-gradient(to bottom, #2d8aa8 0%, #236f87 100%); + border-color: #5ba4d4; + color: #fff; + box-shadow: 0 0 10px rgba(35, 111, 135, 0.5); + } -#mine-wrapper .game-wrapper .game-overlay .game-overlay-window a:hover { - background: #a4afb6; - color: #ffffff; - - -webkit-transition: all 250ms ease-in-out; - transition: all 250ms ease-in-out; + &.copied { + background: linear-gradient(to bottom, #1a6844 0%, #135233 100%); + border-color: #2a9e60; + color: #a0f0c0; + box-shadow: 0 0 8px rgba(26, 104, 68, 0.5); + } } #mine-wrapper .game-wrapper .users { diff --git a/assets/js/mine-seeker/hooks/useServerCommunication.jsx b/assets/js/mine-seeker/hooks/useServerCommunication.jsx index 49581b2..b5d66ce 100644 --- a/assets/js/mine-seeker/hooks/useServerCommunication.jsx +++ b/assets/js/mine-seeker/hooks/useServerCommunication.jsx @@ -7,12 +7,42 @@ * file that was distributed with this source code. */ -import React, { useEffect, useRef } from 'react'; +import React, { useEffect, useRef, useState } from 'react'; import { useMutation, useQuery } from '@tanstack/react-query'; import { useGame } from '@mine-contexts'; import { DESC } from '@mine-utils'; import useStepTimer from './useStepTimer'; +const ShareLinkBox = ({ url }) => { + const [copied, setCopied] = useState(false); + + const handleCopy = () => { + navigator.clipboard.writeText(url).then(() => { + setCopied(true); + setTimeout(() => setCopied(false), 2500); + }).catch(() => {}); + }; + + return ( +
Share this link with your opponent
+{`QW;vEaI?FNrsh4DpGZ=OQ zl?1^r-wQ;!D0#*t5SP{x`R=nfv &{mL)PC&drm zO?1S9Qvtr XzFqYh>aq4%e{X27*iIS&tU}A}6h~#LAAaLcNqsJE?s4j#5)P z?&!{4%UO9Pu*8&3SG_8%RSmfW2sa;4IBLJm{HW+sa@?l}-Xf0~*i6^+f}W+XUyN(+ zUQ<#m?=YCe+|@>O)XowcvP!W@*E!XqmlbYaAZc-wL&NgP`fBcx0Axip49_0w{AW zK1=Q%Q^MHGSr-*5+lSH+NK^u&v;HuT6{E1GW22uQG4WqLZorZJjt`7JwyIP)eL@Zv zjz)b#N)v38dziArb^h;+Ui0f~j%zxVb_lHiw&LDNKsuXS^c0m*)dh#PkyDQikP@@c zDFJM1!|EvPWa+uJYQsH6jWy84d}@YMD%?r_5V#}hD7m+2-|+84;V(B1s@!dgSH#y% z*npdlQxZ4BJ0@#kc0 #(7 z03!FrQsd(n1D{yOF3uD2*j+;d_DBuW55f|8wA>>9k)L;$O_2z~3G&fAsIvr}` sYka~7X-B&KW%ll|-^Im@7BbZNDZYo427|sei7 {$3TVHuk_=8G&u>!y>d mHMij5|Y`8W&H^k06qSE5y&p;Z1W zb#a+g9-^{x82=OS2Cp%3!+x6mg54wqm08QA1(P@2sI)%a_Kl?xnY68)SX|d(OR7^b z2PJy-9Ql*0;XY>)Rt`4?UVVHdmMAdcB#(iT2pttb NExtv}+Y8NG-gcUc_SH*39IP+2wi zI(Z*;?0(hZJbp-r39MzK@*vRi=l*T;t9Kx5xlwtasrf!{$E2WWiffP2YywQ-21AqC z&c|fo1^nEw!Sv$tU-72F$>nH%pjZF8IxCoagM1SsPBNy<>$>n?=Zwb_VjCjJHox>_ ziZFf0bZ4TsdFjApBnM2qgsSU75KZolEI%F)LrzkuHiNI6Y;yT$vsNl(xOyl<5f@HM zuzv5H4PoDGJj0GN#F}Jk#10HK@Dvw4_F*f`)9=PdX*JOB&*kSz4)Ca>!WqV|)GNem z>QniIr;nonRx8Nm^~MJb`6cCWpg!+uO}~^Do)@EaFw`3Lc_O81>l8iGd(|0) z1(D3>oU$th~8F!vz$0ifENY+}OXRoF{0w2#Y zNfo904fS4Z_=P52M!9bjIQ!D8s25b4)QxndJf`5R-~aH_o6ljk1|>fw0g)GsVtIXU z@+CKK> $F5!&sBl9p`X&Jjn4OV!Wz5896iiexkU-GoFRnH6`7;eJP(c%mm z>KQvSs}pjYQEFBn>z8zOh fq8sw$TVv>tv7;rUXKp&m}#*$f(G{D LlC^rRm1jR%MB@^>^C z|E7CeYtQ4^lQxlo*#Y&8)WK=}cDzFqh5JDSkqNGidiz`0fxbfPw8?|s8zq$?#sr}{ zDfa%y6=I#OUK{&3*%M>c;!-!&iT=(ah_8z 8PWK7|X zW FcBxt zQ;ki1=yYQ288au-@glB4GJ~u$VHNVnUdq=3GUk@%PGd(a5}r^Z6z=JYiyQI|INtRl z2qK9_Ud-=u7M&q3W-He4j)h6Vp&}>IF=o!Fy_Y6n?Ytx>NOg@aHFZzFyqG8(idx*e zwtn&?!OGp14=!(d?4PlkQu|(tqGIr5)1pyW+yIeHbqd@Ox4bLk^6lej{%Spg(h`x> zmbcQV(gT +QbxpEZ>aUIyvJF=_j$}<)0Hxfo>%^ix2u{wH zLV?$DAiaxFwvs^6nZ*ZW@+TS*Z;2HL7QK%Asy@b)$>8oO_+DxAXp&4P_|a#pdUA_K zpzRs b1)&}d`1D&4P$N@VeJ=y9rfo7oTo!44OK~yYfGdbxMWzeB Y}!I}zkO;!BP#c|GLQx4`IBmw?Z(Z=<<9)3^^>L_*! zweag6ZXG Aa>Bpj`_ C84Ec4#YOl#CDJa5MCTO>RUHlA9hCl|+lW=I&wB?!G%Wn3`NsV6Z1` u$VD+Wo47 g-R5yvw5gf>PB4K1^EvSHPUT@tDZ^PE zO>HPBiFwgp#q3K5atcWcv#bL?RwswsQ3yz+S(;D-8g+^$bjMHNJPFXr(1w-xrv$nn z%CD&cbS}z%@?Eu6Ec8^#_MVESE+W6c@`{;1j#;>Nj!Xq}rjEPbFu5OHo6xD9xVu2% z`reB?^8lo}aaH* QLho(Sl@hxTT;cAlbD2=l0AGQJyAgA^ zO-lF05w9ybZp*i3DC)5Ew&HC~>UXfe{M@R+&_hY)U)l;1)`|^i5%u|n$B4R?`V!lj zn%ZCPJ!#Fa=Vv_qw20fzc1Na1SFxTgU6t@TY7N$Sasy949%y%-2<6P~GYggVdj^;H m4N;5>_@$r!_bu~(71#~6snEGtz`a}gKPCrKma3L83I0FwqV6LA diff --git a/public/images/technologies/lets-encrypt.png b/public/images/technologies/lets-encrypt.png deleted file mode 100644 index e1fae90d893a979b25ca97c0e2dfc5f680ad6f3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14857 zcmdUUWl&tv5+)J|Zh?W|u7g8xcXt>x%;4@2+;#BaPJ%PRg1bX-C%C)2CT!l@Ut3$X zTebi8R^8KGr@C)_{hh8;eY>O8Rpl_zh|%ES;4l^Br8VK;5J3NVQ4s&_L^oTX{}WB> z%Gxsj YuA2(O|gpS!{M~BJ`wYqb3 z8^2`KwxwFl{f-KQi786CeO9%L?f;%w5NzfbPcKda2gg64AT6Q&W%;xx_&;O>75phD zEJyf%=f(8?T!v4B60Q3(Q$kx^T6%zG0bO@>-r!>S=I>;KN7KrDYBmAO=2J575|54i zjTI3QGAdOVjwH%|mUBfOjYmoyJ8^mbe!+lkElOJarP`o3_fc_qqF82f5_NrAj8ool zh6VBAyJb905Urn@JQx=a4cd pWpB|h}fK%VdP@=_tL 42o~tQ*Q-U_}-s^Q&pskYLa(_fxEssFB3J=4Y18j zR*_i(J1lS^C2JQq%tmwoH|e~NeneXGeeMN@U3`42IAlx!=-V+zS#!!3IfN{Oa_;S* z0Yc?Tn$mED`9H-4a5sy8Na|HAh#i<-s)C4%9|r}p0&6w7r!#91@vJK1C-^^6mD&HX z1CJxQ|9ppMmlfw2AgK;PeA*!QzN}f+aql@2)jicYKBVp |tVu6Fa@(nZ=4CZ^w%7URce? zocQj`$HF$YRX9Uucbay1g{Zo` BASaBgUbwJy_Q9*DJVU_U7_-uMNT}ws4O*w2{WC28+QIo7FTrd*v4H!hI%T){jF1oC+xyi{T$4)9u%&?7 zSD|Z=_$vpx+x@%E4TQJlne9y}+>OS*jmAmmhz6@_l6Z-Xmw}&XR`h@VUKVVWTFLw> zB_v_*_PtG2>Cb2E9R8BYr!j9$F4N9xp1EUD;n^wC<``9~PcAZr=(o! CJ){>x$L zmf3u}gmH6mdOzD~K$ lWf9w?eTc3pvq)T zCzvSD@!iH7=lDaQ?xHsGZOmh6da!e=p0?uNc$0h{w AoRvrxxQZ5rs{8nPB<^2L! ScBc@UCLQnBf3fjo3jOkzqc+S^;Za0eWB?a zH;@gKLK{W=pl0#2OAJ&{b8p `^dTXfajf^j9yUQhqdO(#Ik*w9%TaC#Jq zUGzaWRjE>9e)DS#KJlq*hCT{a`%}10h%o&c_sM(oN_ NX0wXo&IQk?L=Bz@6ug!`V@$mYo#ZI?6^E$6;^dS8@{dlA+&ZR8q3b| zGZ`S|h3g^Hj1?0_2|kp$+}S+NL@?m9{HCgEUlJCwPBrb9_+kRt*W;RcJ(fK$oi7PB z<}_bGBo{TO1>jm< TrPek5`^@8yLGT?`2yNGJYc78eBOP3%SEg52? t8)9H`N4;UZR{pSShk zsvshDJ6OXMh!~g%Ay%27^w&}yj;T~0WF1;!S8eqjvKb#*uz{L@MHqp@raBs+##PW` z=$_^5(Yx`2pGVjwW>5 B X*#OfIy%f`Uukh7b?z5SnFDK1!wG{cbk0nS z_?L{-C?A6~niajc>v>}UPm@hj?G8yy(qR9ee5%#=Xq7~<^I2>n`rO{q+muPkyU#OT zBOJvno+j6pl!OE{YP@A_MZ(7l1VxuTLu!Z;_vW7M0Fs2KNXI2zXE@t4)Q^zh?Y$ zuW97{$`Fm?V0+&x=D|#~TYyVI0O;roCqsjxqeC16%2p86G^rFTF}-vEef?V=ZgeY- zUv@DgS*Y&T&RPmd8dprd?6#hdG}@i@p@eel7DT64$W0euh@Jaak{Fia{0dt*1$PaA zkyqtyUb*tZXyccDe8OvxopM$nb^Bz~?h_g1AV=^c0aj(u@>Ds!n&bgUfo?szj|OGXjr}( zzprLAFRrRtR!fSnQCX(1$0(SRn}J$Qk~OoMG;R6tcgUBMm4c==U^`J-?i;z1!yMhU zLbV%!Z}*-|PjXi`>bN1H&~iTU*X)$gt3_W3?B~KT8Dq7!B^w!<8*1eZ6|BL13s>*} zeYwu~B1Ok!B}EkbGI}cb=^MDm)ut@^0h90SZ&dV>*&bOMH_tDD<@MOBC!6>}_cxqY z&u2$UbX9t_hQ}=MmcmByaIShiDJN&>1Ef#Va_*jG> =+9yn`6F2_PTea6A7KdY-> |+wCMjx`)EfG5N{J=!M&L}Y6 zc$)tGu>B;}mvD~{?M>dvEa38XCsRODTjBcPqkDdB%+9_CBZ**oRnb&a_kSQ|%F#rL zNz#&`9Vk!u0!5G0C3F+Z8@-c5O=_w)^+0^ss~SGc@ k}W!rx2N0-;# z2n _2%+8qBu!{2>uL1c5NL3H{$GksfQvm)|UZ9;q_#f`lEA zQ%?J|>%+1K5!^o?X^&-k1*-e@iSF9<5-;*VW}&|&xt`b4d0T$(FARo;J2lV^X_>4$ z8qq{1(Txok#+7WM@4JKkagE4O{$6s#@p+ ~zYNlWCcu-43vDJnd=b)zC zFCCl8{ldAm$@qKd5m+FlIDrZ6P6jDd55#%y`x{rXeqUvjDA2Ej{JX)g$#3{;fAaCc z4JuS&);EN>7R?7ni*yF~M>I(X-WvFHPCXXuW&YPDM46QZc4d#)Iy!@G;4?p2ybf|O z%D*^}6Hb0r)6{#pG?D&XYZTwM$?a+bI(FHA%Feau3VfcvD%yoHwycYhK4(u%UzKi_ z%^qD~=J3L<3kMmn;7*{-zMUGstyP*X4(M!FI1&FH3rTIjwqa1&mQfGKeP?%TX8mYZ z`Ne)EIa5~+W`bI0tbZ9}Y33g*{4w(`jqe*YSBdIQOc?JDh+xVkhWgTh_j&~X!G)$9 zslDB7dAPaDz|D|SJoF>-2gbV;{tvCL7tNeF$-Qw9RU`4LW8aX+Pd66x1OHNQJY^T1 zLUK(bSxrY-PdJ(e(~#d$BXM`$GDWD5nD1-vw>3NxF~Q0Q94gJ`%I<&JVMZS;y**uy zjTyWb=F}y >_0d*B_jz=SwtKQml?6M6TMF(7QatJ1!l6S@K*(dFg@ znrsLH{lay$K_fPTl0Z??P~hd*_iZoCmr-zwdlIa1Hcg7FrE5i^OhP3&`@x0t{d z86>?*tz_;b^NLHFTZAYqXjv;~pDw4waMEg3T4(fxKsenza2yJ4@7?-DcGRs^^r#hr zaoFeE9o{$`YA+8n!G-cBL3|c^C7ppFDN!3DyfInXrN_@tV;i4yl{+3qy{m&M#J;?5 zUdES4j+*(FwRS!^n94P@T^e5e5iVpS w3^OG}2WdcTs1Pb&hR3@N#zBU`L2`(H_8ej*)de4ayx$brDVH96@p3&FYxo`d9 z%V85`mo+o8E=ST-$qrup&J`mcdMi}AKhiy}gUjhe?lxQjQM8E*Zu?u2y&1uum)k!X zU}vw@eS e)70ZkpF7dfXK7@^qh&kRH$xzI@O8bkqfPyW_}H{~Me{LTxN z{da0IG~}qmzpsg~ZMsVd(&7A4>0fuAQs3O^6%0~qUgpC>PiUfN%CTn8`vAE2<(sTX zkDO(GPeHJN?>8v3!4H$or4HX=kJ!Vf0Kkw1TX|Ux)>Rpp{p3NS@AAP FpXL4b5 z>1^S91mpm95~-}!7(&}|k(b1p{mswlcKaffKw7nGY!-D1thoV2T0TjX%&m~n>YA$3 zbEz!9d!$~x8&vcfW5T2rjY{JucrfN=7eM!+GD7A6AE2)I$$xP%VAJ#})QiGT_uPM@ zCMEnOs)o9&j8j)|*i$NRRn_PW<1uy?Q};GbjZc^!IK#pLb3g7)m3AM3I0<0^C>FXr zLT=^4kU& sxLMNwKEr# w3P4Df$k;);!eu|nl0$Dh8gQ)l-ry|-mD zMNF)K@S1gw1;0R)WzR9myQ@iq%zw8-NOJQ&)Ec{jbkx f>1U8Q=zuMM$`kZvDAMT^v3}Y%LKh;XWYn?1y>qwu0dF`F1{jn!gpu`IKI?xY{W= zWK(y=&k_`*0jjdsZVP5905W)&iZR0s&_mj^m;GjbcNimaqG2gvXkX$qw;nbdJew%- zmx(a}mzW%5{zR{a7ZClvDyzl;nBv caCc797L#lybXfBj&rH>?_Rl=Wt7nI`mUTb4U z xH|^dnLT9btSO2%E!kGp@O*esKsN9Ttu>J5 z7VU)nOkMXki}Ps`+N7gzbrP-L?>*Brf%(uH1}7`PS6-O6h>MPyQ@n&Kks}wmT5=ax z8Nbvs!NTYIwp*p*2SQ`4_g(Ie&-;(lVz1BR5eVxa=T%btCcMEt7 qT3qF7Ll- zE}>Bj3bfTJx_~?kTPKfi)@@B0q~r>ckJiBwY%t?6)nd;Ies9sv%iWscL?pSfTXZ0S zLZbXzNB-W$5cc8ME()6ww%Wzjys^@>0c{~JmG!7(A)+22SO+new(tdQ81cpT<#D|= zNjt5TJD&`IN&w^ds|Q-Wr=OV-Bq1xVLQrb?lUCTBA^Cd*_~n5i%5^HYMjtB=S0SX= z5zB&e?@g~ZC1MTry%~0fT@o$Mi|rLSy0z+I%!wqeg>&=iBb}g!H@I!bC_pVk(Z-N_ zdTC3aqJ&%+epk_R*+5bYc@>qoE$i{z-|oeN=qB3#V{wl6o5HBehO{6yI&rZ045j~J z0;_7Ul}5RJ%Y2tJZaUhZ=;Rzg|Bu8X&^QJ_>Jr^tJHDfi2XwEu{d7Cq)9z>EW&6aE zMVo~6?+U^|ubCxKo4M4UJi%xsK t_l4Ja=ze^=a@SFbeIsWt25vCb1GO2f@BUVs*kBnB#(d zuX50z-@1130>V8kKyZ^rN#@ Y0)juC-5~Y$0vDg^yrkLBe^Wf zO#F*@w~W;YX$jBB9>*=7{hj00qx0iN+0UoPQLmEK_y5AhLI;JSB*CVfXycCV$)w^O zl$I`c6&nPGV{7j{s6>5LuvYG#eGHuP385 zU(56NyuYbhAUIdLbOxkD%n^>ix?*3A7+l3=740gil1cs){DlpT>=6Kh7Q|_ur0zrF z#D3L(olXUhi_<51WQpYMMtB)s{_CiK;rX3rk=nHrIe3C~64+^hW%XGiNxO0=^wl*p zsH5m$cnjTh`Od^f$FgV!(nHB!NQDG;(rZ-S_tzQ**gDa|fD3jWwu-cC|H+DgDn u2eW8R7A+Rbwavxkym=so0Wl+d_W|X-P4SBC`8x4vN&R(`i%1w3; zzLsb^b4ixZ*SO!QniTX(3enCARPXpnKC?Tk;XUVi`BPfl;#jD^Tr7lDNfR$tb;y(o z9Cp9syO;{G0xubQ0FtW1 QWp)0sX1yEZqiX;O}i zQE1>pJme@?7#_)Uw z3`I%EfQ)j;urcIUWo!{U~)tqAjG}G HVi{kPe|K=jnk^E(UTcqJ?<>)&eti@^`F|}d4hT+|fx?)* zBhWA${o^VtLD}%~vs^na>eQ_Wr5sP9mPUEzp_n*6OeJv~STe 3s^wYi0Vq3IsMi7_ZY?giQK+@0auFk>GY z)ZJ|N)Lx(dA q>lFEa&Z7*> ;Nwq391&G8(^LEYx&VLF*-U f&CL^Hl0&C&eEst{_Jmc8~~WLa8~^> zHPyf|+xK^UX6C46$(}j>#P|B_&w8J9D-TQiDi3FlZ^KA*#ry*2wlp{q#6)0-bez9W zjq6ev!PT5@+OZY02R81j%}#M1!;MF(_mQ3huERoV j1FXrym>Jp^ zU_=c0yM-TpU+Pa-@cL@%fXN$Cbz^n0MPb>~{8?K1o&lb#?gZcek}!#?RoL8kv000e z`xI8n#{!|-6mAmNgHd&?bU&s@ikVxX>=yaGst9Bv81aj+CoVF3->-j_SX7mzd@M4e zukn!At*1;rvBnYNV1{sC6h&HlFewWCEH7El)^}JodOj*x6dM>#v5)W<(YjV3D3xdW zVM MjBrSHIu#^L%gY a|ZwPUT;Wvv>gcPA&L z^zLpBYrL-H=BMRNeWvOUEwc#`>Hlr)`nde4+P3o&FvMQr_N&X;hr?~tOgFKQg~kk& zDe|X1v?Bz}9>@;ee-7?MK^Da`k^d;Nz0cWIhgi0g?~v7#C0-+5wZr*Q ZzrUb*DO0jiT#vCh`}r(In8 zXE|9m81{s?0G(5pogLZ&JeL)!eP8Oq_FmyspaSYsjLcJq)3i_*pgL~Aa_!Q}uxgMf zpbW*X!;S!I|JSlc8k>1RFQlO|U9xsaq6Y3y3>~&WGkyp*$^uFVQfI9f{c`lRI-F{V zcp^1*HZ?OdV^uSB &=}dRibat@>edvFWD6I!0g^G zR9N^VjuOY5$wkeNAfJZsaJLU5`wvXHUC{?oGK!9Y+(ftUvnAeg1|aaS9#dI=CfB83 zMk%b(+}2alTa<_K|6CJZy#yT8rZyWir2e7e3m6p0Zl995>9@8e?6oASE`uks0DB^fb(k%Au z05w1ze78o{)8~`B)>-`rudh#@x?z*q{)S9HPJd4*?;NV7obcuym}A)}586(>44_Rt zNXo6Kv
h|NGxK7~f)gcAqu*Q6Z;0KYxrfgCVo1E8t88eHt3*U6o&S_b>XaQFQoDcWjB) z$mFzADOM4bVZ$Yx+4EY~Sn1P|?HlwpeZ-dhaA1XDP|@XfWGkit@kJ~if&6otOk6>)e#`B#H$x2~lU|;SPk-_(-l-ehxo|*x>Zx15J*N1wzGWuh zt~&7DppZEg<7xzPno;4Ltw6s`B;zytAK|Zvy^`;~Tg^wZ#tr1JC7;!pd}d2X_u0JL zPEQSwxMFI;I =9XW$3`UhIb0e^X1GUfSHE{#&`c$3YvU$EMeM$8yB9Vu0RZhK2n6u|pe z%87gyOgmLq{cMZX>_h-nP46ajkD>T6BAilC#PU2Zkf7ny?9w#PC=(r}*=A~&f4qG9 znL;W4n5Tpuisigk;q%dDW`%TMnFv>2^oU#}&s#mB494eVpt&OG_q{2Rt-1%4O+;o2 zU7I4L#?f?rkA >aV*g5t(fV)Dey#=|%0YK=#0pha10 z3v! 4SiTwJle8R)%FDdz*51mJGv;{VE3J65qo(J0p<6QlJhbONjn?onIYxiEo}-b6 z$uBckQ;|egTndzZ*dv-uZyu&lh3oS)i`VtK&Cq JWTWPE5C~jG8qE*3}b)Ipc6O orA44)Khy3(xS9JU?$=aPE6NM=#l3cMl>Zt!+e9)%?H2>ZLs17TP#~}}Y(sns) z;7@^Lbvnj~u1o%j44+MHhHIyYJEPYWLj!D*tF`sO3+8bAI8ZRg`e?e-Avc0u5W9zr zqEVWq_7S0$L5J+w`}lYX@(~+P2}&?()VK83O8C71v}@DAuu70*vLgJ!Za^HeMAT|B z{qxAM(` oz8byd?h%=X8J1ETv~ #-tU z9qsvi6jFylrKCHb=2N>GO7vd!dllqU11 C_%^wuO+8+02d92u&Qm->) zOC@#1;#!ZiwXUi6MTWm^N% $`n%- kofmZ%R>& zIcDFKp>Abb7wl6N>RQajk9&$c9U6On`^H!T3+zyB#N(oB+0Whij5hr-<$Nxn02Yx2 zGqMNwcin={6dGl}iKtAqA9b$D$i$?9|1^sQ{8KX#wC|IJB$p)l(huM7Ro+FVrmY@- zcTKTbrIf7Gmxmz;zomS}=S-|6honVNa3<(@r-4Rh2dEcrWjltAl^zw17KuBX*VBdi zZF6kbjZ(G^+^prL%`D~8X~Oat02+j^i2Zo1e*_>cH1|so8RbZ+#i`}Qrx7MSc-hYc z(4)&op2?5ga|FWgzZ-69e5k5p#*Vt9Wd8K02cpx;B?zxQM@VJzF|Z=ZGffOnV6U z+zL9;TDtm8K$Ey0hEV--yOpz?j_V^$fv(z2p H z7BG@Y^VMXG5J3dlEjJ;XI3NX7b1tR_wD~JsyJ@%sGky!v`(|iHkpzwt6+yRMBG_!4 znxA65wZ(F@;=MJmmDdUEuFK441mH?@GQ=P#oOVuDrTZ2Ois0VkAnb-zLwQZv7tn|~ zL$7;(aDYqkB+3i{I4ree0)wU#BbYl~P48ZNzd&_oT%`FUaRz7e=7tdZ(c*Udw|x6_ zeAiHoS!}MGc{-FqrFmRYkKdl}EPo!&)6L_s1q`-co82RitFf`!TFOwe$5B6H@WFY| z-*Jtw0lcr$$B(~p=<69zGNUSR+Qv`AAH$CG7FTy#P1xU46d0J?U{o(L4sT@D%2pP| z;LU+Y$xrAf?S7sY5N}vO=pU)abU3e0$0rIJe$3lWcyb*!<4LWnH2@h8r3bx%)EwSA z6~4OFx4m<@N-C0^`<)kY MHV@HS}Vy_wazmp^?B-CO6m8q-SS z&S@WSwhAF0E$xxVzUo=n&X_w^U?oT*86-^{YYy0HV%VyevES_HO;A-gjM)Y=lMSU< zjGPyu4IO>ZBUry7knw`jr2w0Lt{}J08t~}qo%kI|Q)~3vA9$!~!0jyS)WyhL>qP1? z`o=O@66oji>_F+N-2HssJ;0T~|GuIb$F*SZLHSb@E2B8i7U;cEeetz `^pUoHCPc3d+ry73 zE$cT2HpAWtjB)YVgFc{R<=}W{VTl~{XTck$@rWmO;op%(mLEXB)sQ6z@?{z 26U0cQ&J-09bSys7THjB5wPF0dYwsJ%H& %n919+9on1sd%>7Q+LJ0m_5U5);x=lhCh=x)EVz|_jB%jN as%*r0 zzp3c~wy?w-wYID6B;4GxWy82kz^@!Hgh5cdIm`HIYq}{QN0mm(Q6z!^?V#Petqz_k z1tyQPStfpDZ+$oYerhG5&MD4OZKO$XU=e6N))HSS$nlPbEljJ?P #33v@6KpM27=$hu5 zb>0d8^OY?tOmY5dqWmX6QgMk5wVe$I5d!~&PZQK1Y?5L)dgKNAGoi6XYj>~)$`B{r zRYj|Plrg#(FHyr8t>aWwnhw{}UDKU7Zk mib@qjMVDw&g3pOzMSzI#n R{4}^8=C62 zDQv>^thv6`m;<{nlb0`TsvIZy>u#GlAIm2%`EG0bEt;&e2EKW#Tn!J1or)>P)WujJ z6@b>z6!7i#2Zh=9Hiw`xY(px)T7nfC^2fepT1+gR9%$9War{n0;V&vW;$EQGP |!2@_%#EfaVlCX@@PDLnn>sMT$uH$!M=BJO92@FP7eWdPQ`+l$a!YuY-mK6vg z*t`m?PllgxP%gg?xOUM3a{I=MTetoNdqv@EwVYRmg|tbVh$Aioa9L~(eOa$~dh0r= z=y1Dm9~AGlAkBV|vdSy{;o<$umH)t86`mp FDW zFmv0H1`yXQf;;w$te*>+h&Fh^$L}ui6!EZUZ$myDwO?{83J(6-Kh&6hRiPF#!}AmI z1q%|c;PuXY7#r(>*LiS%Pq=U$FN79?^d22W-RMRcOKw>y%EI%4Vc{=11Zgx3vL*7y z^tTc-$K7MyK@yV|k7WgbKbiz7CSYkEjY?Gk>Xugw){juH>LukGdf~FXowq+~m&MOU zr@qw=ZnLlV<=kOF;0;*h>XTlS2e`g$jZ79~I`5Jp3AyS(WdNPS+s0%Ev(W?;jwma; zO#KMUk-g0wu3}#)wLNhgzP^v{hYY?nwDmU94Isc>Jke>Lmpzg~md@Z@Se`bIWSlz_ z>U^`*fei-l5XK%|V5^l;1iS>tezn^)7nzpuqT!&FH`;M6*Rn?4M~C|lG2zUTlTOQ1 zEiJ3}W(Y-r?pIYqvg;?tyx(-*-2T;C0TKCM6ME{yzqqg^YXkT9?QzstH)C1~dLeh8 z^?>|jm9O8*eQaw*UrAz+E<;`va|$sZ^gT0G;OPOQgukwvu#tD12u&n`9Ui$LTr+g; zWzS<813YLd*QgO0VRJc};t+E50N0Qf3M2^E;--V?HG2W1(h1TFCovWM#*RTex#<=q z^IktdcdVe;t@PI}go^L4YuyuH@6_)Ps<*S*?7*~7Jk*BvVv(Q%4%t=ru#(Z0&2iIf zp%vwXuAJ-fs2ne9Bjv)b%P6E%Bb@o43%+=@u)@jlkrC$Ckv@D#EeG2p)&{diZfw8S zSE0aH{Fj$#q*9UoZzFN}Qb2 &rDqF$OzuABW zr)mO!*0STBp*)2EP^s`mRe^^N8tw<)>+RwlGxaDGbZNZUAiP^Lr1AmR=J7V?@*T=S zI#}O3i`lK zuXcF9eU 0{m;QK18JUc~c% z%hntzB2FG0^y9c|jSvYl?%f9mD5@37Ys(#Q$Fmo19`hjOd>@nu@zC>IuloxtV=i7k zZs_3?{BfP`*%%mEH3244a7(CvvVuYf-e<<-bH?YGG)+J_*d9JGNqh9k*#3U}jd>rs z3Vy6DKOJU?MjGz1K!~FFa=a!3v`fJ?X=SgC0v+L2gWnAllKh-PVaZnf Up;4WNZh(?HT2i%TBMP?&9e2rk3u@6 zG^H*pU3!{^Wa>;%3^ZVV*ddSwUZfjd+JzR&t&J%p^Xl57<*c~pnAl+xuox|Ea{Wwu zWO#!>;D>){684|69{%aYe2qwa#e+pc_iltt0ZoBh+8M1G+Yfzz@zcnE8iruwj2fWs z@>3Qc^~gbsWu>3bLPMqdoai3Yp{Z|wN)73i62xe+anMyox9{Y@@geV_#qKoBS*GO` zXfg9yojIVO^HHEkS QZR@ zAOuA^bj=3axSTVmeKAPm$`emC0XAryS>Pc@MSA0W=D1Ifw(xXf1auddKtY1cKYiE3 z0BWOX*q=5jbs=KLw|L&EYkLyFy9hSgg=_tO&5EZKI~df|Nn2N|eDAhlF6m)6ZsX~& zgRWB+XeMLBHkZlh^TcyA2&o?VHIRiKlgg~@S#r7M_WmzQt&c`q@2I##3l<1+dtDV2 zUea3-kPEu~QHjzoG6Uu94uXZbp~dZ!z*8q0JtZW7x)`2S`k&3B^OarZl9aBdIPl^O z7`3YQd4_Gw+|6oD15)Nc=DT8=(CO04!Ph*nN{O@XroZGps<-_r0M#CgK^t6ut8fOA z)V6nih4e4G_05%Kz4wD1m03`_RIl!5TQb<2rH~8%c#ef$Yrri=d&HAY&9uVmh;A>x zmq<{?bez6FOo#`ivKOaKlL2r(13`x@8c;7$^-65tsu5}R-gWDcK$3@_d<06bC_Ywl zRrn`A-4KCQjryrFrV(pv7z`x#2WyAu0N&212DBufL7w>&iR18ga;Fob38Yy2{$zv+ z;!d~BPULSviF0ym9N#mdt|UsbemSmqV45(p>xgo*a}N^wl^Ve5Nn%m$B(Ke8M mI6=#zWXn3S`q{QO7}Cpm(|n@Y-=rGn98>UfbUqr@7retGyR)8W}&hSxwqm 1kbU1+f79<>mk_bo-H7+&uj8ooEISJTLK{{{V zDiI_FJ_Sf(B$$r9%pUbL _^P2 zd_w6}3$ZW0;AcQJ$4cKQ7{gyHCSc0Z1a{jD(}r2BLuJw%kWQnQA-$v$q+ZS1Ax#_tC#D zx$BG7=A_Y^n9u;;1->&lInprJ+Hx2WM0EJ^xFc>9(xcMd=wP_pKV9xrIu|HB8D%Sz z^EZ^44z3D+G^)bqtrMYL)Icj*K7+}GHLWe>-cQb2`c180;DlwmiUSDui?9FW1^465 zsw~R33(OgTb|YaJL(@W~`wlW5wEF@kTP+(A1r8(^#qwrotd$qwD E^OG~ z2BiyTsNwq^N25fVa)zN)OM3;1R7rHu_JTGwH7!^CbeTWIdrQSkj-sQv*dUnE{wUR% zEwc422$e1ebUXAj!~atHu7fKSGJ&Gq@^vL@@02OAoy&klLn&DhnKb#JUCAU95*q!1 z+#?a9@UHtV$R*0A#KqsZa5ubmAM3*)5g-^}i5fv53R b&@ P){l`#2Mpe2>(lq3M05i@7 AQ2+n{ diff --git a/public/images/technologies/mercure.svg b/public/images/technologies/mercure.svg new file mode 100644 index 0000000..dbd2da3 --- /dev/null +++ b/public/images/technologies/mercure.svg @@ -0,0 +1,18 @@ + diff --git a/public/images/technologies/phpstorm.svg b/public/images/technologies/phpstorm.svg new file mode 100644 index 0000000..39e48b8 --- /dev/null +++ b/public/images/technologies/phpstorm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/technologies/react.png b/public/images/technologies/react.png deleted file mode 100644 index c27bd6ba52a1bdd9626b51669719ce240fa3141a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12988 zcmdU0Q*$K@kd1BIwli^ZW81cE+qRt>+nCt4HPK{ZTl?)#*vIXv?o-uI{n&L7t)w7{ z2!{s;0s?|4EhVM`0s^M>zYPQa-zK`#>iR!uQj${>{}2Cv6~#8#(tj88x~V9rf;_-o zqkp{Mc*+KZQbqmJvurYEM|Q3);MeE_FiF@cZ=ancLkxAb5mZc#&5<1v?{B2XWtTwF ztu9R%fYE?}um(wsiKuyPUG7GDln7%${fULy@EvcKu+u6TtGx^Sf!;Qla~J^41|9w? z7&rc%6x16*dL#8%o>M<=MfoJP%9h|jE#2!}n7 zmW}!7T#=WQJ=`s5f}*nbh{_b$iAb(gkMQS{h)`SSGS*azgmAGU+fFpesaV-QnE(>N znmpZa$0hw+n*$p(KFw(F;IcC?V+^S(M9W#5e)32*d7r)f?2#v_M!u6n{dO&57DvMU zr1` 5wsJOd?E{^Z<}w;Auc{Ye?~D&KOZ!DDl4|-}g}Fdbw%%ip6rt8;+KhkKJTI zI{eDCup>u6Tv0{_xgqj9=BKsdCA1~n>YhZI)Dvv=Y?S}HI6}9!%Ac+T-?NVk3&DN8 z7d)|1qDI*Ws*!)!J{dKfc=0+tUe}$9o%5|COYxjx75eL=)xEYnkNK(g3UIQ7U y8LL*ZeFFSqU`Y4k&yyTu@R z0fd9uoG}|_F#~Jla3k*!hSFDLcg0STtHni3;fgS|sX!Q>3Y1+jN;o>-Ka}*Blhz`n zzg9s*aujITX6eCPY;oa?frF9R*P#anGI 2S=zc2kZ*nz8RK1A-G8f#hH{A5A?p=8b{WG6qH zbaX;F?huQ>q-v;qR!AVI&ewb-2Tc5*7*qmQaQX+GnQ=a z*zrK9K&)c9>W7F()} pKN>}@GiwcIL6`S+Us$!wW@;U4>p)^tfLS?*(pHzm zf!QBsdwzU`2h rkmI=od$s`NT_d=Z0ty@@qr zl1s~YlKlJ3KCZsKec5Nz$%~HKLk*caE^Z6PsZ(5%_fDm}P1&T_KV^dGUFz|Gj>6?n z_0umr5i;L$o+qrdL17QPd3k&kyW9$_a%tPY^0X7Nxr9P_um~@><0ni;qxU*j?e2u_ z>?lQGRUA&zJ~hw4=yK`4{kykIWqz*;!)o`g%cop8cw=#^QlVBg5SvZuUduBg7sBkO zQ?OFy;(uQ!G(-uULRr4mBH*_#kS<2!2VSV`yO>01%gMn^LgtS6QnfwbrquKK^G!~U zXSR!Y$mNIa-DoJzDMqhi8u*muEMpQE_JzUhQmw}DKkfb~S?QD+AOQ?&LB;Ge%k+p1 zGSbL0!{TX(tx<|aN47|xnDSQM#uTZ^Qkbx zLA}7|VjhC5Fc6)iz`1NzzP^#yTCH<(us|{A6nXZ|H60HDJC=&$4iElnQgOiFZcp;4 zw+JmKd >KVoR{G#Ug0j><+ z+%tAP^AAdqDZ^ll*<7<5gwR5di%45!9Go6a6oY^La4+qwWP-osN?X9bJ?u9L9}`Su zEu^Y~36K$9;bKHe7&pT+@(`*({X?ppjE>M?xziso(x9!p`in9Tj2Oad+If>`^Q_dB z$p09=lOrAC9(G7TpNpZH2MN};>O2?*ArlB;qSWA`P7kiPHA@Oc_S06zeA~whqyE&@ zF})((^KcQ}iDNwes(s5p%yd3 U*Ke-xjM`{vi->En`#`+B6a}@!T>tQEBrp$MO;1b}0*+^V z!yDX-=qFSU^skJV9XMWXbTYtFkk@(znsd=$+oo=x5-{@QlJ-`yT5k;XAF{Q8EgG!< zaN%`PTNiJ#{ReBGpHHw<=t%TrQ5k|EyBXe)&HowCTD6iuuev`YI+I9ny`!!kU@^XL z^>}>#wgb6+Tuc?XS%D;=Vcm#5e0^0sqJmAyTz?@$O8bTTyhL5X *|~#(30^O- zz1NsY^raMj<(33qBZk CtJQM@Nxdfs!i1atn`nV2YNFDbz#kR>OPg{Utfv$3z ztS*RM7sO409ZFbbR_uImp3{6HRmHdf-kW2VplmX2TOyUGdi}uMMmicD&e4w`EinPX z0%fv~9ZY)m<6pw9MaK)qeP`a!OFi|R0d}foGMD8NldQs3wmfIH Ue_`!Na(x7`ZB3T1{^!Pho&a`x3?xk;D4x;#RW z93dFfJ2A{3Pcy((Qu~qEjX7|oF{op;Z!`{M0tw-&DS2nkS*3KdoREje(8#?gPoF{d z%KE>k_f=UED)ri`!%{qXV`eSRylgcfn#Mz*+~wv6zUVev7vR}#*|u*7F&>nUUz_E% zRB^ZH!~fBoUI<-={r)|DY3yzbUy)>-t(K#2#=>+SyC5v)xpP4?!m|u(r~zESL1;q| zt%OEJ?6vQ+ljT;D9J0`=ff1-BA@E2CCanzD^`;4+HyC@HB{}m# Uj3-y@f7GUPec-&;|Yx6Yb#DJc~TcgtGb0_DS* zWgMU8esg*25OH5Lm76VH%JP<4l|F6h2+G?$%rSMKup(=uA>IUft&+v>QO6aFy>N@` zA~I#*?v5wB#2^gua-8k0;rL1`@ki)?S=Gl)6?GOeF;LF_!mwq%!hpgwT`lX;V!c$K z0IY1zW;xuQb3}mm+81y@RWQzW3F15x<~l5 =U2$#S zH>NTTCW&=Zn?88HB4mG>CH%Jqha{CdaF}_+jZ38s@Yp Q(HhpMj+*GPwt;cf4rZPV4;PTJ> zqnG`=+n@76yS5b>BZ%Ad$mGA%F}J7B-ipryim(xH^7DR0udvSGpRVmuZNAE`BEPW( zW!U@MeB0_Ok)aDe+s9M9Y`P$ugm$UTPx;Md$NrCl19Z^R^nIX=QU6CIn5?03N5H69 zB5)y&wrd4Jb{(wS5pq5csK_?bohcd*#Ge#kH>`ZSiU!_l jR(A3n+80~tiOlw#qQr8V5-jKRi3MiHdUoOFNLw00NKU-7opW;U`{pKXl zFU3)hu_eZu^vx%uV~?K`2^9avJomi#oLo2Fa~nT-o)b3DC|uq*CUQ_tHr>60rb;5< z*hc-n6(%E=x^!?#U{E{K{*EGx3Uw8OgsbpyzXWtcNGl}aL&I9VTja(&VaY3l9@Y9^ zX^4*EdDUvtLl+&9FM{8 mX@45jXOml+Xu>uJuzR^&ijUh&&m@V zoc){toO(vAA}Q?0wTWW%MyvqLxEzJVwSQsNX(#dSxq$06H0Ude$_Qn?Afgc1>K60d zIJpv$Y~2OQVG%4_u#drO(t5< zF6+-d{n~^WW#FIC!6}V8>T-z;#DQ-JmlcS`(@O2cx{#4VqUveGhU3X3k==!Wl=}`G zymEl45BJZXchQO{Fci}qqWsLIezwzQoRE8n`#iir2`FLg#3D)-tGR}BmGxURU}+n@ zx1m1nxBw3(sxfNXW!FAEHzFfI^Ax5RppgCrF5}|*a=;_u(1BL@qD9g`qczAk3)a_$ zHq(XQy^9+q_HaX B!S@1dNTLZ znz(f-^VJ%J_Eiswtn1)sVTWB;sQY`KaU=NFIoTw_UU%`#+2J==2hQF$d9JDxG?8tA z@6b4M+|G~EsrPEi{Dtp;F#&1mGXVt-X|5(r-WWk0Vu)hgj`iUS bPwr{DQ-_Q`qR_!% zeNK@A0kpi0MAwLchW?5Bu+xh$glF>bw||(v0`~|MSv^Ph_Rh^QLJ=hdrR_)Da!E!L ztd5P<3?&2-6DEkC{IO?4Nw6g*V~SGx&TVp~tAdA$+Oal2_3Z&;IqVrTg(3@Hkq9YN zfh@B|8eq=Y?PhMGXJL!iCutspX8fAkLaL^6DjdREUSdAz*qsnk4FVvzP >`O@Q$td+=Uo0^=8 z8tN?a %F)!o+#bWt8KzzV9&ec9qQ+U^`*Lc{mq0J z8k$7##IaS<5z3q{L+H$NTp*b#O=quTR4(l{QwP`73{7A$oRh{{rE@>1baRX3qRYqU z6+F~M@hN%g%`|CyFp59G($2=EjLA=+cfiuI&JKLVJ=BNMfYF*MHEHBAm@Q!E8?t4M zScz+gOf;Md$ote%ENJheF|o1(HsURq-X|K{hFAgHURg}d!I`gvb}4&C=QLS|D4uL5 zR0|$exz%`;oE#(V5#`}kb45FpjDMm|42mj?&2){-@v8Qhc<1}54f*8EImF50u_{l? z`PV_;j%KGM&m3H0)2L|k&(M?{ 2?qM=D Vv70y(TQ!cZbU^78kx#gf*!X*6(1J%kk8HK@qi_-cJDGYZ0aMOuBFm1v%Y0gil zbl1kxZKD>HXh3g;6jJgk4vxK2Q%Kz>&L2pgO47+>kJ6qnz02g;Q~~lTJ@q$-Ut# RX#g>YFU=(b4So#SeRyr&r!vA>K%ihsLgTcEDu$2h9B5n!wo z@y1@Cy#m4ARtk#3vVyr9eORygTvdQwvntdQCSBf@j9Yp|V29Xz-4jJfUEV-yj9f@W z?4f--^);bQ$eAG=ElQtLyvlQk_bR?*&g068`>_7V>`t(n;J;lF#7tHD?zve}ld5s8 zP=2U+KE8u1jeW!Q(z<>ATZWy&^;1&Tpfd?sh?;iEi(V>9S!mf_uNuX$1TGW5_`T-I zR^fxR_2;{xG9ZEC3StGMmYQYF5c;AFBS=9?qlN9xaKge0Ew!8lKiAbh#=)Vun{*dS zOTl@wh$cx-6rXY~*t9;zB82QFyXvb5T}d6dXZdP$DBZTl_4ECd6nw@SPy_X)>x6I# zGZR^E=c*x}`Du2rgRLy|qDGn}yu(xbVM>(O=swog0~NlMR?ZFIr(m2t8R%9<5*sgV zZt^By*42mMkoq%m-~@JZ%ixG{uoYRH0uSARRVw*tHXiYS&j;_d^CfIw6N=!LwOFrr zV`s4b#byf$3VI{k1qHfYzxTd^myAGJkmi;c@NW?I7L7Z5d@3vBP)CA&YBvP@)MK&pXK!(=EVyI3!~$cQec>es%Ol4wZqvtupS z?dBP=3F^KUx4$Bsb;%1%pLN^`d9*V$ #OQY(+dAniH zQ`0ZFbW>kyEdUDsHN(4hPx81)4}et(bmYX+=ipf2fB1&?eHkpHLxTY6ge{?gnn4vG z336WNeERt@*3{H&I6nuI3-j0y2>eqgXlCKVt0ppX$VhfmnnpfN1B6HmNlhrjy=CFH zM`7`K=^29Ig{UEY;~nBR @I+$ol1KX^*ea zG?sPh*KUvYW+vaKp#pZy%2JldZFJY`g7>Z(DC05qrTJgzw-7SMq}9-KpaKONT0rby z#JZXBa$PbVOdb&n+dt;KS&`XNYma=bxvcq@MU9D4_Xd{nm*pI`#f*Qj&Mz_Y6-j8! zczimFXe5tOmhIs0DO0y)x@=a>b$%FAzEsJN7fHSKH _k+ zc2+3?SArB%G}6%0>sf~bo&Q#fP#BNd$+LLTgKkGOmqeD}Y^yhNj6%lH-}uiskN-A& z*N{_>hkeSk$WP>n{YfJYL_FrC&Xmy6RQ?5Mpzyh9{1Nwc*^Kf3GCeU$)JgB=X>}14 z*}KM;Gp+sO7_ovx%yn;zmiwcwx-gk&L}fkm1Q#EDg<3PgT-G+-e0}d|9g_d$;r9be zL{?RLfCl*(w2Z}RGfk`t`%Ff7tATtaWshb#0q7I#OxPj_<9ky{_$9VexW%OG)4aw* zIBXQ%?FENiWu}8C4u(x4AjYP?t9w8?WA=Qb4h-GOgN(k|Q7jGsQ{*L0)tS=tlln0d z!y3-qV(<%;CB@@F;cMXkXU0&@pcHLi)ywBwjHKHJJ1M$>A=K_fj`v +Gv?E6ZrGF#HLjQ;j8+K?nS9sT{$~O0tZ)^jwiH=S8BSNsRY_`J(Bnc|u~X z=N2pnyqRr;N7f`>h($&1PFDGOh8ZfIo07lc()>5MWzj0O#luM~rEbwG#YbUZWkQT! zF&i^_r#FLk$#{te&313d4jMA9Sdpp_U)`*F!3S0`nJ@b5s2p^;GwWBEJ~%ExI)=-b z<-!;f>xdBgNv5T`S_v|kg`Kv33xEo4B`Lhd%I!BNv_4qIeIiu(Cf1tN8@iYtjwp8K zXU9z 7+WWU969Zw+Gfv%HuyZa7d|fCc5tm2XWL!#SNQ{4?@`@sx+nEr*;# zvwzzCB5M9-e#vO3?5&7^Z^bW%4oNH^krfK-^^_y8%zP+X41O&~SxKH&DH SuXT{!Rii^cuvN+3W^{^Q t{{qD~_`x z8*1>U7Xe%fAW4cS^nbehw?Z0Sj!6;&z(@R@+P>KG_1F~Y@NUEtN!eofisS}b`1EaL zhiNnwCnj*@L;$($jsZ!-l{_!uwQB=6ej*ylurU<;tXExQYsxjrH%9FgjUo}&P8R*{ zt@HNxe!HTASJchCZ6dIV%wSnYF_2Pp9bYJ_Y0s;)Qt!u1i-G5i`kc0uU*VR2iL&GI zb8diu>tGsCsf+HmrtqIZ>5{)#Wdg70d0=b)z;AYE#IU!C>kEV>ro0X)f3d6Hk)CA> z_eKS#3}rf=wKLAWRh@V?nx=6K(wDn(Fqa(&9tiI?TMirjc=Bxi?~!TH%9XZ`ZI>4$ zxLI)t{b%>O?^Hw=77HG(Q>}L4DQZuhzv-`j4AD@N(82r@NHDqAN#iG=DH0P$s}QhQ zo@?j3fRf%3+?5d-bOk&%mJ06U=IfBwIW%tyrl=g)M;2RE`$lG8>3^{dWCt=Qra<4Z z6hiXMCU_GEGQ$T+i4WZFwXAZ6N8#=PM_v>;zEo^uqQtdbl(!)~2spcNgz$aXrl}}% z)5yF6LZxzTfZ(0f8SW$+QZ#>1b?j|rT6s4hWmAIgN^b8cIuFVI&kDBhUD_Sv%MIq; zY_T=XmO9tVM9m6V+co&{({YdF1#bv0=~LVnh;+LgdRcHxk7v)ln8PG^nl0}HeXXxd zwHXtxbcNdcuJf%q6gc7udm3MI_~&_1XeLR&h^R=6p*+ bLJY2dI zMjnAX6W^D=MN!iTtuabsRYIA+&^1V=gQRZMBy`Uf8KIjLd#(tTW{Ti*5Rqw)OaDeE z;0R73c`<=A+RCvf=MHx(O2;r3XRRZ+C`pQZPhe=nqMsc^*piH<-(+{5D7;*(Fue*@ zwibks5kWGRLjA~Wq!v2-1EVYsS-;4-__(L@#b_@8IDmnRQ>H_o3LI!~Nun%*0nX_F z;`YyNjXPUKowDfnYJJ6>&Nnknyd!iGD&oQs701*Ij7_}{m+g*4VcoDiu7)&oXWaH{ zruqZ#^8L~*7e(bFpAiT6ExCN~=C7(W!lS~l68-uSh8o46$@Nb}gSG7?5-_v1Y>oCk zjzwvq@S`+=#Tb_81ndu;rbbU?to7pOqds96GpJZWl8*WS9%GPEYda+sJ^QkCF^B=1 zn5sEp5#nXNRXtP3F`DU0k7A_<2y;fkU1Un}EO0q=a8Pvj$aU2JG()r~+7715#ey1C zu(zogVE3Xzd1yBRf6<>k-4ZTLcYM Tdeb22qsB6&PWr&v~tTmM73)P>b;lPx|2HfgFYrwJqw(otpgQ*wduDq z?d6rah{`SPt7|W4NIKJM+}mFXCBMYd<1Vl&*?h6pYza6k=);dxES2(_N?=P*w9Pw& zM-|lZX>{9=E4N%!iM &WqAW7`{Gk+qX7+mxTFfx%)s5{+zC6RL+{X z+9P(9qy}XuMd8A=MqLO>r0?zl{E-B x41`{gRlv%MS zHGzmb64} ZP;GLwY!TI!~0JRN&yQM|saZmE48hP<1S4bR!(o zHb0Fc1XrP++uC2)J(#9*8AvJBP#*vQlQMW;til&KZPRs91!;;g;+{Y3XT|0KfY+~K zC!D~o!@zV6AvwzZf{!8iXT|=5l47_CtKn;_-+zt1cWojck#DcbE|(s~o%^bV+g@%* znXhuC9z2k+9}BBkk^h?Tpl1up7O?-=|4YJ4hd BPR$7Qipy z0yP}=B^RwhjSV|zra7Z2Zeey!nqen-{B5!Ea!QRJ_l3ouF!fgL6lw!+QbpFM;-2AC zsYufXM|VnSn+-Sxu}r(Mhp)5~k2{PzK *%;&{T4*iO10p> zmpxHg!wG29u6+B_Ho5C3uCuMd__8n)`D|bKMdhQ3flJZ+X2JTUmt#k}JK$r9n6d2B zy)hpN`-(-6-W%Ages7~z$h!+zY#_%Ro!UMsJND}h-H?W3!v389OMNUHQZU&Y_>YdL zjzzeAtCGuJ9&3D-7l$|Fv;=0o tm}*?LOY2XII|;{$W1e54hw#8_{A`Vv{(2E4e9NjzVE1{|M|t7cTEQ z&+$XvJinKWH$gtu%AU&>(wKVbmrt%k=#cT6SOJs%i$jUXs``{>$kar**`Y% j0%&g? z0kK6ytDCJ` k1C5@S_@@#+mm%j-u RRBybuc6^h>fHdG$1 Mx+}%)$#T04-GHIJ^9u4OQ<@bgS&1YhpC=OoS8Zy+}mdDb|9`S+`~Lv+$)nr zH;y?RU0hP>hkxKYh?*5k!X~TAf1U~*vfK}fZ{@*cNKC+(c{k4FSprNoR l+kUL1iVlpx Y-QxZDH1!U zQ%rU5)*!RP$3@dV0;Avul}yAsbPG~_avMW;pBmYp{Pxd$)Q@yzGy)LtxQoFP0sA^` zEKkG!eytstEr%U&=nspBaJ%HU5_SmomVD-eY|ROr }Y-_p?W{2(ppjOj4Y28^O5*TCwr-; z(=2k!LaV(pdMF%2aAE)0{yXSXgpC--Z4$kd9onC4_4y_nD&s6&h%jg|POVAd*33PD zx>58WzdC!2^YE+Hnmo~b7|mMmnU`AjvbJt8!7QOOia!>wulN^@@!zpN(i(*ds4s0K z@#IS|1)Z&iqBAaP-f8Ou6DtmlA9~~DYRi90CF#xIjl!g5bopSSjxs3di8#hqp&F|o zxc`V?cru$SP|z9U8i_&;ier;uh+zVoz+I|1SFzlno7$5j?T`lt`L*DOb~oku6K%q8 zLkW|t``68bQQM0Q@fw;VZL@GLbn9q@v>HXBhM<`rj8Fp`iy{n@>~J}e*YX9lSO($k z?H1;bn R?Wr_BgI-f}f~l>$P>dC^u8)B3A_5rapltyi$``#r=D)B);y4HSK5K%)6s{X?^aR z^O$b4jQMzr68-&@grA{Xh}*6?I3Hhz%r7iX6~>E>c$k-)%))YUQThs&k_>7dIk#n1 zr=rKxO25BH^TC9B(YQ-~s;4rjwi#aP F2m5f`24Qbf1qIQ@dq41E zMim;ec@=Ypi;hRn<>~8pw<_N7{mv@=*|s29U{0INpw4$>IKbS&u*z_w^(3uMrt}-C zR!EAr^U^Bj+)$4V6Zhbg{3VQ3eP=wiQUuEN&b?cZ>6sM!k9nbDKag}k fAV_l{c#xb0%oU8K1 zj(0B*j%A9z(sEr%3cQ@gWE=DZ>oJ4v-$KbFn_D~0kUcyyg7ZgFmi?}XW z+}(ZQ_E}V2qor7#hFy+D!1Z_v-pe zmN3I!&kz0`HkvX;6(3i@4(@Gbk8L>Hj8OQQG@^2*axs1j0;ba0-B8vAxmY7JAxM$> zd}R^wy3Nc_mkMc$-;86kWKP$Ty0@0>lqx1AXLwjo-BO*?M_=S9B`yoNfEga~yJ_=B zB1L7IeEDa?17ZLX-6;}E%L}cC`PC8Bsy6AQH4scp+fCF4PQ*JVH!|04>PGo6>X>SX zo*o8I?O!_-ggg^QjZMaMY5#9ZPXZIs6<+LF=BY;-g_DYj8x@Lt>3;@V+9GM( D21ltw9X^79F;rt@qh6Ev!NTvB}=rKo(-X}_O&53}qmkd>bZM~^C>u4zsL zg}vK;afYxgQ aQhT^)3F QpslwB&Ee9$evmyl?a@3A+j?D zgIUwp5VYoSl>$LwK=EXnpqkPY^;;fs63rQaM89b8iB1yh!%;pVh{9vFOQ)%LF)$XY zEN`DSj;w4&NQ~{Lc2%j1>i4hhEDuRlcO^O1XTWus ;g; z$9eP^c|Qm>)v1f)gc1oMHtVDp ad<&bmqF-5990AkxcJ zkoVHL&f18G&hz*AWjr3l+?8j;vc5^~bth6=5HDGeTRxo^IpnlQ+{oNCmjv}9InMXs z_6rLpMS7A)px1cs6m!H^r~}oas5K0vj`{n^AWcxB58-I`KeO@G%L770C{hI`N@5_m z^YW=lE*ho6X!2Kg16w7MOO6$SA=>IRSXba7EaxXY0xowTL58q5Ew>9JbxZQA?E;)2 zR*&vav#(J`Z0J3@z-?Yc{ *>tS%?+$4r}1LU}oe^=_rOtwNMEo|Zbouh8Y( zL+I;FZzCku$kC?9wQIdR+0l-jt;zsS)EMQGEJ9R(g%JMJo}k?lEg7DsD`t&HA7CP3 z1Dgx2DNFTIkO4J^b%Xd_ls#6+x|3Ui9lFx9Q7YOGs@k9IIUoGwl9l$*OKFDmS(M0T zmAOo*B@v{+J-pGNT*=BlS?36htm3ZEBmXyY(NvM-x&FD5+3UR}PydB*yj+t^bYq56 ziRdM_qtZcZ@yKIDRGb1|z1zCzKT8d-3mTlc4+=kO(;dv1~7K5SNkB!Z~e33L4St9o}qJeaVS z#*p_$@v`=Co--QF4Kf+1j%NX-CzO0?>3!ZuU+?${hA!}nCIhHs7NPS#@Fg9y*Cu^Z z%a~h@UXC+I(?Ea~w7-G3`{_06RPimpq{SLftP m! zo>f0$(Aq?w)mn%vFazDw(>IGXDOV`kvDW7iQjdpw6A;=^vOrzP;| O|`Q?4fk%KPSe4xPR**# qQqHQRM^(?k2l4+c8WCrG$PVf?# t{7k76ri@PuG?(R;3;!?CwDDVCJj5nEl$TgEp zCOIehki@8~%Auo>pg=)Ep)1HsYeGT6=>1QSVE;p6I&5yBprEVOm9=I5Q~w{)=jSIP zA|eb73@R!r78cg(>M9i#)y>Tf5D3)N)D#yNCm CRX=!N&1_p zZkwB%iHV7Retz%o@3OM8A|fJOTwEL+9M8|skB^U4RaJq3fu*ITk&%(Syu5dJcg@Ys z5D28aygVl-$J*NZ$B!Rzad93V9;2h9y}iBO-rjqAd&$Yk S1tKu$Kk;ooin=@wF~Xq3^!eAhTfVZ-sC@XNeB$ zzmDzJDIpB~Vn_U*+tFp*5TM`uO=I#g;xwr1^&nyZ>94V$qiZ Nu9|U@|VZ#EU8>_pae;Dt= zW}stUeRSsD3aa<7@Fk4`>Iw&55NumFN2ukI=hy>O9QEj;wc9G6Ku_yzNyh+>YNxz} z6v0R2;)D2bylg3V3?#8{13~@zBxNH}C NNJH!U7rCe(T{kgQ zMyn!;t7^>geUVj#0@qS^&3K9{z}L(n$EVC|teu7wYahl4kN4ej8vhMScGm%$dC}%` z;$d<6_R7bd8G%YVpI+(Q0|NS_!+wH!xOG2b?trPW#jd&K=tCtDk8x9Kb*q95D6P oVOmnR@{R^|)q)O`pgE8M??9)F|B+AGUSNSPiBBfuG`AvKt*uk}G5 zN!N@=r5+^gWA9kL7%mYF)e!MLvEP~bhymbLr2Y_EHkfDbBuD1!Mj8Sae$qrqLT?q+ z!iM3j`F+^<%@!fW@rLq-eM8yW(GRQ*(w bo5~JE$=BLoc3z+8j z*R95ENsXbrPXJmhPGEB^+7wRDAnB*9&Q@-?8*#c9LyAj%I^+G^P|_h>qXOB8E{zWz z+FS |+rZiq zi`zt=AVT?YDCm(&EUp-6i#Ud73YDv|n@ Nu8cy{U)yh0Trg#o7vN{vTE&FUo_QEn;T13;otF)x~tchEq@vz zvgy|t$WdUl*LZXn#G^kA$13b#^jz6QS1my*EJr(!8i8SUDIlDTCMNF>=1n(lSa){T zmR}B`jb(nnsW(^FkuBZ=HJKaDt34J!vFvW`d-`^DZn{3+hV<{fD`4E+A=7NcqT?D2 zDuwq6^$r;Qf&sOe4B`!DPTjFP!kzhc3a_}n9a|H4X@3lvA2I_1!aL8VYoD ~ofAXos?W)hHs92A4Tsi6WYqSv38r*qA8Fe(jNmB}rqxo`p6guqdVu zHXqXRc~`-F7nqn2B)TWQp1=gYANy5x5;EI#s0A%?wwcISp@uhE*d{?KBN(VAH GE@OhJL*_BeG zT9E3%VaS&cu2|f2A~|+CEx927dS>Qm#^ffznV%dcKJ!;FVBzF%->etU5gnH;E)dxX z>%%!ekElZW_PvEV-tyrX42!m|unf#b5zqBR8j?ozoeZXaP3G+l>72dzVM%Q%l26S6 z?_$JgJP#c7z%Le3qDJds mj$fn0lsU~7 z6_GVL9dbhK>M >GcGuB>xdE=##9E%Y2X(}S*h>Y_HjxMk z#!;KpC5Mi`M-a}u*7Z`3LbA#Zc%qJG<4QN%WZTqVG2oE0=b~ROy{51IO2t(R5SIBj zhBafclo{$-b24BD-a&e;p~)7mhym@Zf}AL%sbIl3IzDo_H?(l9=}jQ4kjDuBjMj-5 z^G$Dcw-WXxNnsqMD-;Xou)w% *f~u9;cz`%@`aYJ?^bBK`Hea#-S?`?Z>e zY)oejVB3YLNlSieb}aaM))#fhmJZA6_aZ;doZb07rsvUvM*87|1NeAfN{gN1oEaA5DMYi3xp+ui6i&A=mfAXy_8l<3x!0&N#?yT!vhSfECpY2n6fvKP*49$vD zvDg1qp`WOdoRu0T>R4q+UX(_Z5~%jY|IOgY*Yq~RFk(=+7+d7H5i|6b)0V}&c$*aw z5WWS09mX}e52o9t<*DzV^7)Ah0I7tSv8L7wlW`jIJIft2*ph^z5-|1kVmW-2)*ui% zXa%rRccjvmUgGBuP|C~)n~~Bw3JC(Mk3lpp@vTpT*gLfL=y2OwOMpmPFNFqbj|%yH z 6R)w1_|{~ OY=22x|^pq9d=rLFfsTVK?Ub{?qG4Bq0 zL=x2x(!aqDe_$ES$NU?%8W!OBmlmb1G@3{nVNci)pCm9wqH9OluzS s1$%(d8cka~b4Xjt;PlKA|;A%fHrM6Xo&?pD`l$hjNc``tO4XEt4C- zrFIlBqK^F-&<@eNX&n^0+}-RmewD}+xd=~LK?;2MzB~Uqta@TCz!188ZMo 27-)4XmS5ae%o*IDoXyW%f=t4<7|)fsn4KM?@ZQJn zL7*qBWaxLhR2D-+GkP!17(5o?c)RCKna}$E4<>te(|f=3G~jd^^;S~x9zZ*r7hLYg z5_=Gsey#t9tF(r)jN^>~42rhP{N_UmvUlx3I5b%l*hN bJA!U!um8`CgD!fOW z_Ep-^Y2*>bbiL8<5wb2&G|8G>JuFZ!wR*B;ZpjWw6}gw6DtYP^DS|)`<+t!7(-BpK zF4ZBFVzKSV@|5^M-9%KeV3JVW+%;x*JpWS8D|VKuANTcWs1}WG6-LSP%Qi6)H6ksl zW?({{;mlA4>PoHWKlVlGd3rQ-qi*ufq?7!)8`cKE>ZAb6*AO+_c%)}00&&)4RQ7Y= z?B8 dX~a!)QWGDtE|a()Qatet;2QqbJXQ+ &aP8Um5p8?d6goP 2~&c~7b04VOXodbylz^4jdDIU&Z#BaT%9e=@TU`m3TR1DYmYcy z-oDK#oY*7bf$cF5SB+59AhZy2mW4M`*dvca`r|)Ts|Oc4^1Obf)3%D`#<$;ViXua) z@Y0tPvP G& zDPA)9xIo34dS2MrFiH}$*_1#O97$bSRZLodb*x1iDmSb&p3&DaO1Dc*XH%ZYQh8oX znnX2m%5TYEyWAT r2KuxpSU4Te2<|H36VfuTYOJ6 zDSg &kAwXk{&Yqeo$$$Y2jPI@`hK3cxHW?);jph1d5vCA{T~zqR z2I&iT3;e`AIPL69Y0R{qzxEiN+IVFJhOo)Taw6n3@hWBrhZ%c4jEjUDjeXG7N)s07 zG-2YdDG%S5h$l^8JI4K33#vzpbLVqC)WsUA)tZF~(4r{81}*T|sCjy*nG>E %CVB62D&3!eM%!b$3ANk-d!pMEg27EmhqV?_ep~jz$Jg5*9WsRse z>E@?o@JiVW=2TIpGjnoJGpUo*6 d+Ra>WYXx#H{XRX5d_h`(H(cthT!@GC3G z>^kR34sL;LUZpODbSDM-(9%`5xFoq14(}$1T20J5qdT-U?|t@#UHnD0<~ipclFf#5 zeg4Viag)-@-|95iMYJLKoCW65Uix-C1YMQ3`2YMA=-*KN?HMC;RNDs}BM<`^_@^4O zyI2k@;4dyhVmm?Qy71@qO4s*NT#$@mIi8g#vieokzBYzxYDk=^e8S Ms{Ta~ZU}fK2SJ&m} zW?$}bpwZJ%mQs%v-AgWVRX@{b2_^Mt&H^PK?we1sIz(a}j!^?s@@R<|6n*!{1J&_D z$+18AN$A*D+8J;V=0%aUjuXYeJ<)mae#$e!qmYzqwnvgQdiCJ8@oUOyIevibW@Org zYdvz%l_D&&JYd6Gfb(7i4ux;2#+- G}`B|#kE zFP5S|_RYMxF57;XnF5?SM`B+MVBW#+%16#F@os`bt3J|*c@kmDY)#f3CQoq;>JDXp ztmi;;uRibJJp9)@)rq6$?7e!y9?dHYdvB(izlBm><5w}3GwHLpeBSmYhxUO)499>H zUR@g352$z-GaeVL9^|V5+Mc?Qu>OAeJTW0}x<7HI+GFS7Ue;wJwm+BE-|FV9ctyF3 zYfy^ZU?$IwDg3X|Wis@X{8ZTT0$6Nut5a`Hvc^s?gkxRceBx-m)jlMuiBbkydBI|w z8;7Bd-(vz3Hz6q#f!kcC?Gc58(l*53WbtRChk|jiow1((=$|Fb)w_{2Bi!1Bdm6~U z#JH21doCy2`aH+K@w?o=({gqket+Nv;hSU>7Vc&QFg;eg>~pG|2MeIDwEMu!-*nKr zrT?r$&gDjPM#+(%Dx@5o6I`d#?MNwq97sD^Zt2dw&BvtPKuNF-CDdTRYE6)-Z7BGQ z#kL@CaS!Gg3e?19J9(8c69g2~kSybbwn=uG>Cg1{i{W @hBPXuWDeB(g@l82Yv3+{=qf9v`pjFH#3Ax9R3> zRC!iTmcuFpQ``!alAUA6jwN@g6cmkZskH0UP+y0Rc+1hI3Jd &P{WvTefHqm+iAY#_U2zC0oOt2sDh%tKOT@qE*GSLQ241eD2AI;hfD z0+Ydo`$W&xXMa@^UiMUO+(+2Bfo(k2ZMd-b$c|w*rE^2Bjf@nf)LDBe{rhJ3Z5u-< z721J??p5#0-n4~3V*~?oB^`D=o`!UFaqxd!#6+-i>o6Fa9p2lyt>W_X0zE-_+_^n7 zGe;VNc&M?y@Z0Hw&F1`lZ5p~0853b6>hXKqi{j>+2ru}DNY6)CSwqVosiSMT7(tP< zLo*{}$z2sM-Tt0!b3X?LVbRMDNCm-^Q)BwOyz#79Pe@rC5yhj@%0vH{J=kvM{r5*& ze^!0j+5#{e_j4i#A_uNa2y;Q4QbYk>ZeO_v^ABc|%&~YO$BMaNArw{56ztM_5%>Jl z8SbP5GXzAzA2+#Q|0|4d%XPjPveS`Z?~%`1{2EzzHH^AphkPALe7IONN4u!`+yG<8 zvhklW1}SQJ<*yv0BncIk**<#kub6pB6vH~+45SabiI?RGCe-M142l-YPf3=<1%@qD z+;8Vpl(h0qrs(R+dQ2K(Ei(WEG+YLle{$)0TZ@6?`^Q<3wndig1^ma8T5c&_-3C0P z%zsxdBQwG`1_0c!W?@ i!9lQoUd6i2n4;>g>wF%TstZde3r^pbog!Q_{So28)X!k-XJHkF z$URe33OdCb`?+;uGx058!>Xk@73 TLIH8rEOnO=v72>9xSKN4ghhs_tB|1*lgylf8J4$Q&deD_8raz( z?z(QWAD2oMY#h<=@0&KHDIs(-H3t29hnkKVFN#)K- {t48bc=}&OgfM$UleV0K&03_$`=@jT^``25rQ-o;IraYG<)V37yg?;E2cB0GsFV z)!j&MpybgBtrdYvx34$YLK=akl(w0muuD-?^i1h$7?zZF?E7X 80Zm$_wC`V8?xZ2 zcbkXRQA+=#c#mEaiM{xiKOC$t#Cm}#NmqZwB7@vbX9ISB+y%2Qu-!{M03HoLt`w|^ zcxv3eb;{ Am{I &1;{kZlqsjcx zt4HA9mi|r_fvu81%Q!)=xA}yJm(jSB3<0`{8x@K355)7M+unjT$&*q`4Y8R$L(4Z1 zd4z@HUXn?cQx|rQZX}cnz|65`V|9AZX1+N!ekAPZY=lv>ZDhsFzXp>9tu@e7tN_n! zC?GImy#|xEv{qd(GkN|f5}kQ|*gGtO{tZH{S9rMrlEsu@%bTD`+}^r2ER#hiTy0xu z`Bn$nn9)x*;e*9G)-KuGuH9VXs))xd6;4Lt1@(ct>^6^I{%o0T-LZVu wjl5niR;0VCetZ)`K6?P-i_ zR=#*~L_>J%HZ>=lU`agIY!7nCdwO35ymCJ|s+la8c0NhiZuq)ca)B+s(s8H(o+Uk} zj7!F>l3lAn;~r*v#sh52er_ecGxZPq?T`nnLkvynTBHAYqP^b#6GLqH!#-lpwu;zY zP=fZ0);U+)rBTtJI?HXiM3a;$OlzW~OBQ1xk10UD%RFoWXX=>u{$f&(5wW=MD~2gW zrvP{Xe(HF^>R8{H@2}UbBb?Z-Mb%5=w!vFDCyV~_PA-#`ILXC<;jyq%#( `$RX&wt!ykce-a(6)~TU)Wq2(E>3 zZDm7u4@}6p*Q!R25Gixq2NPSEv-m#cNq!-uhq*?kXiJX?p&MU=-&);=hCXaoMU;cY zz f6`Qb$qy8B4_SRdKX&{EKLZ^;?(8nIP<}`~G<$29 z4L@1)eOXw<1+e{u)K(K(MG!AlfK3~@+n6r5;P#tT?Cuj;PDJ`J%*IXgwhe1bj++qT zc1E`mLym8{)*k8N>)IT5NyJjyMAmBhvXfqY1juCA$&jhNq;dP?(up;5LVwDU`6|;g z#{ 5imn~qajgvS7E&r%@e44PK==B7kmf!(g>L;V0%WXIb$t-Ml~v?C*Z zw^@xFp}}WH?_UQy7L*~Vo(+vya@OZW^L6hkuskjv7Ic|Bww$y!9&<@3=t_J`gJ%(L zg1J+mQ^5KMWwM&L>hw)F|9zbNG^pd^%eG$d(KF7ZN%jh?!ta)*oS*XN{>5Hxi>qku z*K@Qgmj~r}4oB2v-U+SO!D$GVR=o-4OKs4qBtTU5dcv7ndf1wSVtC>yOCT!o1|lL~ zV+69G6FNJ6L5*vlyhlpJu%#vD4i6nN4}s!@JaoPmGb0;nH&Y0&4qY_}HN(Y-nOGQY zy$9$H>tggJg-ss?8ySYnI}%6!+P|2XUjTF5v8*&yu#)DQ1T@IqUTA)dIgB6Q*fj65 z3$2MVWjUi bJST+HnI{X31x?@SZx0HtdPW%=h&$)bM`A>;k6DhLG$|U)F?V zszTc_1U9HK$F9RkwCqZ_d9SD^fkarfYCEx3U_dtVKx7nI$!+6bt{H9nVVBYU(4+$; zvrAk;Pw<1{1nz0duHWVe`T8;lVANQO%VxqudLH(mXiKd5QD_sd!ZzgVuMh_3QKCb$ zJL^C*ZzS_v?ZeE&6mP_UiBDs{YYnU8vR9oZ-E3)V1B9(-be8%%pWi6cpCy3y3|W2j z?5T+oxHy)zF&hm%R)5jq6$mu#8PqVQrL-qW?s{1Q+Z~hDF_rGt>^`{XpN%hjmHy(t z%nRF)EBu OP2cbS34UwfU_`mLv3W1zU2ezb z5gB)xn5X-+vkl Srgby&^?`o8e(~;(dhD6n#GKbG0#V(YFvo$ucoUvMnQc|Ukev7Q1 zITSPWL3DIJ`Br)R-!nbvIfHLoKr)`KJpl>9sY}~xpnQ5ZCYYSrf!IB kAKkXt>}o=-Uk+%N<3-F&L1OSWiBX4kFWL+d&K!tUQMuCfplZM zuCb6$Bx~ead@Zdo`JL2wJoBPxZQ4#J74dcai(-Fq-Q6r}n>Kox7$8ni{D)X|Hg^#n zV$iwOSAn9(+*JcBDyTHEp=7cayUjVoN?z}#r4qmB{lw&^;8TyJS1)EVP#I}z{j)AL zG153!O