From 74e9056c49b139c0f271fcc257fef3c0fbc22733 Mon Sep 17 00:00:00 2001 From: itwrx Date: Thu, 15 May 2025 08:01:35 -0500 Subject: [PATCH] initial commit --- assets/css/fmn.css | 1 + assets/img/AGPLv3_logo.png | Bin 0 -> 12938 bytes assets/img/favicon.ico | Bin 0 -> 95518 bytes assets/img/fmn_logo_125x117.png | Bin 0 -> 31493 bytes assets/img/itwrx_logo.png | Bin 0 -> 24509 bytes assets/img/itwrx_logo_250x250.png | Bin 0 -> 61135 bytes assets/img/keyhole.svg | 208 ++++++++++ assets/img/keyhole_light.svg | 208 ++++++++++ assets/img/no_image_found.jpg | Bin 0 -> 20245 bytes assets/img/touch-icon.png | Bin 0 -> 20413 bytes assets/js/jquery-3.7.1.min.js | 2 + assets/js/jquery-3.7.1.min.js.gz | Bin 0 -> 30215 bytes assets/js/lightSlider.min.js | 4 + assets/js/lightSlider.min.js.gz | Bin 0 -> 4949 bytes assets/js/lightSlider_start.js | 40 ++ assets/js/pjax-0.2.8.min.js | 1 + assets/js/pjax-0.2.8.min.js.gz | Bin 0 -> 6602 bytes assets/uploads/img/ITwrx_firewall.jpg | Bin 0 -> 22211 bytes assets/uploads/img/ITwrx_software.jpg | Bin 0 -> 34766 bytes assets/uploads/img/Passwords-GTK.jpg | Bin 0 -> 62876 bytes .../img/SSM_edit_section_screenshot.avif | Bin 0 -> 5071 bytes assets/uploads/img/ez-bkup.jpg | Bin 0 -> 28879 bytes assets/uploads/img/flowlog.net.jpg | Bin 0 -> 48888 bytes assets/uploads/img/goaccess_reporter.jpg | Bin 0 -> 63216 bytes assets/uploads/img/intranet_hosting.jpg | Bin 0 -> 65176 bytes assets/uploads/img/luciusrafi.com.jpg | Bin 0 -> 64857 bytes .../uploads/img/posters/my-custom-name.avif | Bin 0 -> 16751 bytes assets/uploads/img/ss_1/2TB4life_dawg.avif | Bin 0 -> 19426 bytes .../uploads/img/ss_1/biden_campaign_logo.avif | Bin 0 -> 4782 bytes assets/uploads/img/ss_1/blonde_cat1.avif | Bin 0 -> 10029 bytes assets/uploads/img/thumbs/ITwrx_firewall.jpg | Bin 0 -> 12202 bytes assets/uploads/img/thumbs/ITwrx_software.jpg | Bin 0 -> 17169 bytes assets/uploads/img/thumbs/Passwords-GTK.jpg | Bin 0 -> 21009 bytes .../thumbs/SSM_edit_section_screenshot.avif | Bin 0 -> 2029 bytes assets/uploads/img/thumbs/ez-bkup.jpg | Bin 0 -> 12465 bytes assets/uploads/img/thumbs/flowlog.net.jpg | Bin 0 -> 18819 bytes .../uploads/img/thumbs/goaccess_reporter.jpg | Bin 0 -> 21089 bytes .../uploads/img/thumbs/intranet_hosting.jpg | Bin 0 -> 27207 bytes assets/uploads/img/thumbs/luciusrafi.com.jpg | Bin 0 -> 18500 bytes .../uploads/img/thumbs/watts_to_dollars.jpg | Bin 0 -> 10304 bytes assets/uploads/img/thumbs/web_hosting.jpg | Bin 0 -> 33638 bytes assets/uploads/img/watts_to_dollars.jpg | Bin 0 -> 58943 bytes assets/uploads/img/web_hosting.jpg | Bin 0 -> 240678 bytes fmn_gs.nim | 91 +++++ helpers/auth.nim | 148 +++++++ helpers/datetime.nim | 152 ++++++++ helpers/db.nim | 35 ++ helpers/form.nim | 211 ++++++++++ helpers/global.nim | 90 +++++ helpers/reminder.nim | 90 +++++ helpers/validation.nim | 226 +++++++++++ models/human_checker.nim | 66 ++++ models/reminder.nim | 52 +++ models/session.nim | 33 ++ models/user.nim | 33 ++ post_handlers/login_post_handler.nim | 106 +++++ post_handlers/reminder_post_handler.nim | 196 ++++++++++ post_handlers/send_reminders_post_handler.nim | 18 + post_handlers/user_session_post_handler.nim | 18 + templates/error403.nimf | 14 + templates/error404.nimf | 14 + templates/error500.nimf | 17 + templates/login.nimf | 45 +++ templates/main_template_bottom.nimf | 35 ++ templates/main_template_top.nimf | 32 ++ templates/reminder_create.nimf | 351 +++++++++++++++++ templates/reminder_update.nimf | 361 ++++++++++++++++++ templates/reminders.nimf | 44 +++ 68 files changed, 2942 insertions(+) create mode 100644 assets/css/fmn.css create mode 100644 assets/img/AGPLv3_logo.png create mode 100644 assets/img/favicon.ico create mode 100644 assets/img/fmn_logo_125x117.png create mode 100644 assets/img/itwrx_logo.png create mode 100644 assets/img/itwrx_logo_250x250.png create mode 100644 assets/img/keyhole.svg create mode 100644 assets/img/keyhole_light.svg create mode 100644 assets/img/no_image_found.jpg create mode 100644 assets/img/touch-icon.png create mode 100644 assets/js/jquery-3.7.1.min.js create mode 100644 assets/js/jquery-3.7.1.min.js.gz create mode 100644 assets/js/lightSlider.min.js create mode 100644 assets/js/lightSlider.min.js.gz create mode 100644 assets/js/lightSlider_start.js create mode 100644 assets/js/pjax-0.2.8.min.js create mode 100644 assets/js/pjax-0.2.8.min.js.gz create mode 100644 assets/uploads/img/ITwrx_firewall.jpg create mode 100644 assets/uploads/img/ITwrx_software.jpg create mode 100644 assets/uploads/img/Passwords-GTK.jpg create mode 100644 assets/uploads/img/SSM_edit_section_screenshot.avif create mode 100644 assets/uploads/img/ez-bkup.jpg create mode 100644 assets/uploads/img/flowlog.net.jpg create mode 100644 assets/uploads/img/goaccess_reporter.jpg create mode 100644 assets/uploads/img/intranet_hosting.jpg create mode 100644 assets/uploads/img/luciusrafi.com.jpg create mode 100644 assets/uploads/img/posters/my-custom-name.avif create mode 100644 assets/uploads/img/ss_1/2TB4life_dawg.avif create mode 100644 assets/uploads/img/ss_1/biden_campaign_logo.avif create mode 100644 assets/uploads/img/ss_1/blonde_cat1.avif create mode 100644 assets/uploads/img/thumbs/ITwrx_firewall.jpg create mode 100644 assets/uploads/img/thumbs/ITwrx_software.jpg create mode 100644 assets/uploads/img/thumbs/Passwords-GTK.jpg create mode 100644 assets/uploads/img/thumbs/SSM_edit_section_screenshot.avif create mode 100644 assets/uploads/img/thumbs/ez-bkup.jpg create mode 100644 assets/uploads/img/thumbs/flowlog.net.jpg create mode 100644 assets/uploads/img/thumbs/goaccess_reporter.jpg create mode 100644 assets/uploads/img/thumbs/intranet_hosting.jpg create mode 100644 assets/uploads/img/thumbs/luciusrafi.com.jpg create mode 100644 assets/uploads/img/thumbs/watts_to_dollars.jpg create mode 100644 assets/uploads/img/thumbs/web_hosting.jpg create mode 100644 assets/uploads/img/watts_to_dollars.jpg create mode 100644 assets/uploads/img/web_hosting.jpg create mode 100644 fmn_gs.nim create mode 100644 helpers/auth.nim create mode 100644 helpers/datetime.nim create mode 100644 helpers/db.nim create mode 100644 helpers/form.nim create mode 100644 helpers/global.nim create mode 100644 helpers/reminder.nim create mode 100644 helpers/validation.nim create mode 100644 models/human_checker.nim create mode 100644 models/reminder.nim create mode 100644 models/session.nim create mode 100644 models/user.nim create mode 100644 post_handlers/login_post_handler.nim create mode 100644 post_handlers/reminder_post_handler.nim create mode 100644 post_handlers/send_reminders_post_handler.nim create mode 100644 post_handlers/user_session_post_handler.nim create mode 100644 templates/error403.nimf create mode 100644 templates/error404.nimf create mode 100644 templates/error500.nimf create mode 100644 templates/login.nimf create mode 100644 templates/main_template_bottom.nimf create mode 100644 templates/main_template_top.nimf create mode 100644 templates/reminder_create.nimf create mode 100644 templates/reminder_update.nimf create mode 100644 templates/reminders.nimf diff --git a/assets/css/fmn.css b/assets/css/fmn.css new file mode 100644 index 0000000..cfdde11 --- /dev/null +++ b/assets/css/fmn.css @@ -0,0 +1 @@ +/*! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.-mt-3{margin-top:-.75rem}.ml-1{margin-left:.25rem}.ml-8{margin-left:2rem}.mr-4{margin-right:1rem}.mt-3{margin-top:.75rem}.mt-3\.5{margin-top:.875rem}.mt-4{margin-top:1rem}.mt-8{margin-top:2rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-2\/5{width:40%}.w-3\/4{width:75%}.flex-1{flex:1 1 0%}.basis-1\/4{flex-basis:25%}.basis-1\/5{flex-basis:20%}.basis-3\/5{flex-basis:60%}.basis-1\/12{flex-basis:8.333333%}.basis-2\/4{flex-basis:50%}.flex-row{flex-direction:row}.rounded-lg{border-radius:.5rem}.border-b{border-bottom-width:1px}.border-indigo-400{--tw-border-opacity:1;border-color:rgb(129 140 248/var(--tw-border-opacity))}.bg-green-800{--tw-bg-opacity:1;background-color:rgb(22 101 52/var(--tw-bg-opacity))}.bg-slate-400{--tw-bg-opacity:1;background-color:rgb(148 163 184/var(--tw-bg-opacity))}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.px-12{padding-left:3rem;padding-right:3rem}.py-8{padding-bottom:2rem;padding-top:2rem}.text-center{text-align:center}.text-end{text-align:end}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-xl{font-size:1.25rem}.text-lg,.text-xl{line-height:1.75rem}.text-lg{font-size:1.125rem}.font-semibold{font-weight:600}.text-indigo-300{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.text-slate-950{--tw-text-opacity:1;color:rgb(2 6 23/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-orange-400{--tw-text-opacity:1;color:rgb(251 146 60/var(--tw-text-opacity))}.shadow-md{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}body,html{height:100%}body{--tw-text-opacity:1;color:rgb(165 180 252/var(--tw-text-opacity))}main{line-height:1.625}h1,header{font-size:1.25rem;line-height:1.75rem}.main-bg{background:#14151b}a{color:rgb(199 210 254/var(--tw-text-opacity));cursor:pointer}a,a:hover{--tw-text-opacity:1}a:hover{color:rgb(224 231 255/var(--tw-text-opacity))}input[type=email],input[type=password],input[type=text],select,textarea{--tw-bg-opacity:1;background-color:rgb(38 38 38/var(--tw-bg-opacity));border:2px solid #6c78b1;border-radius:5px;color:#fff;margin:1em 0 0 .5em;padding:.15em .35em}input[type=radio]{-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:50%;border-width:2px;height:14px;width:14px}input:focus,textarea:focus{border-color:#a5b4fc;box-shadow:inset 0 0 6px #a5b4fc;outline:none}input:checked{--tw-bg-opacity:1;background-color:rgb(129 140 248/var(--tw-bg-opacity))}.btn-grn{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgb(22 101 52/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);font-weight:600;padding:3px .5rem}.btn-grn,.btn-grn:hover{color:rgb(255 255 255/var(--tw-text-opacity))}.btn-grn:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.btn-orange{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgb(217 119 6/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(255 255 255/var(--tw-text-opacity));font-weight:600;padding:3px .5rem}.btn-orange:hover{background-color:rgb(245 158 11/var(--tw-bg-opacity))}.btn-orange:hover,.btn-red{--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.btn-red{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgb(159 18 57/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);font-weight:600;padding:3px .5rem}.btn-red:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.btn-blu{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgb(96 165 250/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(12 74 110/var(--tw-text-opacity));font-weight:600;padding:2px .5rem}.btn-blu:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(147 197 253/var(--tw-bg-opacity));color:rgb(12 74 110/var(--tw-text-opacity))}.btn-disabled{--tw-bg-opacity:1;--tw-text-opacity:1;--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgb(82 82 82/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:rgb(255 255 255/var(--tw-text-opacity));font-weight:600;padding:3px .5rem}.btn-disabled:hover{background-color:rgb(115 115 115/var(--tw-bg-opacity))}.a-btn-grn,.btn-disabled:hover{--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.a-btn-grn{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgb(22 101 52/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);font-weight:600;padding:5px .5rem}.a-btn-grn:hover{background-color:rgb(21 128 61/var(--tw-bg-opacity))}.a-btn-grn:hover,.a-btn-red{--tw-bg-opacity:1;--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.a-btn-red{--tw-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);background-color:rgb(159 18 57/var(--tw-bg-opacity));border-radius:.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);font-weight:600;padding:5px .5rem}.a-btn-red:hover{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgb(190 18 60/var(--tw-bg-opacity));color:rgb(255 255 255/var(--tw-text-opacity))}.form-success{--tw-text-opacity:1;color:rgb(190 242 100/var(--tw-text-opacity))}.form-error{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}.hide{display:none}.drop-btn{border:none;cursor:pointer}.drop-down{display:inline-block}.drop-content{display:none}.drop-content a{display:block;text-decoration:none}.show{display:block}.help-text{--tw-text-opacity:1;color:rgb(250 204 21/var(--tw-text-opacity));cursor:help}.hover\:bg-green-700:hover{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.focus\:ring-yellow-300:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(253 224 71/var(--tw-ring-opacity))}@media (min-width:1024px){.lg\:ml-4{margin-left:1rem}.lg\:ml-44{margin-left:11rem}.lg\:mt-0{margin-top:0}.lg\:mt-12{margin-top:3rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:w-2\/5{width:40%}.lg\:max-w-\[1600px\]{max-width:1600px}.lg\:basis-1\/12{flex-basis:8.333333%}.lg\:basis-1\/3{flex-basis:33.333333%}.lg\:basis-10\/12{flex-basis:83.333333%}.lg\:basis-2\/3{flex-basis:66.666667%}.lg\:basis-2\/4{flex-basis:50%}.lg\:flex-row{flex-direction:row}.lg\:flex-col{flex-direction:column}.lg\:py-2{padding-bottom:.5rem;padding-top:.5rem}} \ No newline at end of file diff --git a/assets/img/AGPLv3_logo.png b/assets/img/AGPLv3_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..06143aa7ae7fd13e0ccb2302e2af210a56b07313 GIT binary patch literal 12938 zcmV;5GIh;~P)%z00158dQ@0+Qek%> zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3;uk|Z~Bh5zFeIs$eFj)T=qH_-9*Jw$br;?Ojd znYxBu)mfPl2w&dfz_{~Y|9Rbi@TaztT`tyYuhsJ>_uS*)hvxtIbAG;muLYmq-@pEZ zpTC3q^DpZB`E}%##P{_5)AG;j>F4!d7plL%bD_WaMJRvyK>B_E_~#qj_!nro@GT2;>tOO~xzHM3^jMoTTX(rUBTT5qGro@mL^ zYq#Ed?_+S!k=-bRPY>QP#*8z~Jj<-pW}AJEMft3}%Bss&TYZfkciMTEUAOJF`yMA8 zO39sk%BjarJN=AHt=)9?&DA?K*fDQCV%x}roDS(KX{{BWU?!hAw3H~h}sADR2dd2_`2 z-{md-lgv4#?*Ack(Vg^{y!}nqw%~5PjD20GnEFKb@%z(8?5nx9V`613mfpa>u-6ub zZX>3bxALlRX6om&^SEV=lkN#bE#4N+ssLTEK7?+dS~lY7X8b%N$yZwUfxRyPM@)Za|$@m1K+U*$f1QbCtqi__ff zEuP~`KYP@6YU^aJ=C%RZ4q}_n+&>R%i|=W-Ft~Sbg;mB{S>DY0*?sH&wf@|Ho~s8- zJoPoQO2Kp^d;3++rp7w8JI|dd_fvS*-K!&8KCvV}&R&;LES|ZQM1CfnLM5dcX@{nU zz5?dkNNL_+b2cuXY8dl$Hv_OX+uoHT^5C66G$d(-4;LTlncm~-gLi~Isd#P|SqM)a zPqkR;r8b76!SC2q)$J!ybSIQe_o(yq7(0|XSD}4wiiPT+BSNnvtHex6jadQUz0I{- z6@{DAt|d_wbCz`?pA83q)_aRl{nRL>e1HJ{6)EHDA#JW0Z>1=L(*sRNdZsw(hE{ok zTh9%av#q&L-JM(eFq2uFu)!%?m2YViFCc)MO<&z%MSI^&iH((VwZ6}S#v|1}jlVig zVzi>FN1q!d)2M9@Un4(vdZh2NTo5FrIaz(A_>D&=kOr*1svx)GqO>g(!3Bh|3pKbx zO=FJJFX-4T9#?q-Fm*Dp)YGBU(%J8}7qCzh(uIdk+k3OLaJXD$J)o8+TyftW(p|xw zR&90SPQ*v{)u{Ql7vXC?Qsy9ci3v_W^vCEx)m)v1*);#8Ew@^NXu1P51FW;f42C0B z_#dq>OPVcJ8>O7G8d|5uR%r0X74_VGm6Azgx$|(n;P%`Xjk7&%V0KtJy=H!aw#(nV zZXVM}gDNub4N$_FLy!c7ULvr^R>jk6Lkj^gH)!fwCM}_2t&8wbiT(BrVnHk&WRtApad|NE zeyTH@z8C5v%~a;yiD+y92>5~2s?o(2fV;cu*($#$o(~0kY6~qGd2JFSAO}#TyU%Is zZlB2eS$)&WpigNaMm>ZG60t~M=5)&d8vzXx9P9OI&;iY@Lbix6F>7UQJ>Gl|5KH)bjx5@1zTBb)f8}@rw#v<@l8Vn3L+J**oa? zK`D#;CW0L6`!<@nmC4em5z$^l zZr4K+hARJ%@wIr?RY{&SNfkuxd1z`1Lz5_m8OpsLI^byI+FcN297ZPygZ$}-mEPn;QA3#kf7*C0=QH>3t6lBz<4 zH{fxpLq&m4?B%#LYInCL(7N;^waUGKZQy3277#zDQ6H$6n)v;!U<)oPva(56BPlvy zR^2Xtbp4SO_~CQ4$&ZsKzK5Ed{_zqR09cY_3cDxfyo{<1Zn0( zp$-zi(C)Z5Sc5OGhXp%X#)i&&2Dbq|tWrsS=aBa8v$~?o-F=O!!QG&_*Gl|jyIcIT1Am!UysT(1QMzd*+TgOSggEoriBn9$w$W;KA zPF<~{-B37%-yEu=W`{TeGRYrm>4rrLdtR&2!B`NX2laydR3bc*2x!}AtpvjHW1bdJ zF^JCY;_NJPq3nQS@DK?RGIu}cMqWgj(LVKv4T_26JggQ$`}Xu4o)ATMCUkW5f<$jQ zVrrBYz`GOV2D9b^Z6lV52@QZd9RvQEsAvkElmhh|eachA{R&S(nUV|0a0@2khyz%G z=kyDVp`PKP35UO64vicDN#tN#yDyf|xDcwCa7%mzZb80)Z&`8h;__6R@BlxX4yvHj z+#MlFK5l?DkmbDEJamO$1BD<|By&)4QH_RCtf&AW76b8`1o)S0r+U!@2*L};Aa@f@ zSBV4>LHdDMyJHtZ%RBU#8=C72c#GU@$gFc|R`7?b1{Qn z8DCK7!EQcE|4N%Z!061${gPZ zIa4ATDS@yAcZY!ZQfU)Sl+h|PXz-CnEmF${jNngM8f*?p1gSuJ5|V*T2K^bKIiQ6{ zD=kA`4dx(plouLqQj*9%QU)8ih|nznHUtd8#pBn3eCPry6IeiI%F;?mKnaj7$j>@A zjIOq7h~$V)$34crI3m zOo>fHgmRIX;4*I2@HuZ~jrC`K#JHUPy#gj)hxf1wi-1rO4ij>}vN8yiQ2Q}NThBBi zkStHEsnPa)9A#aN!o%GrEJS(SKq(@!{?@Hvk@yV7Yp4rI3FGLI0h9W?g%YKA z02ETPXzbgtStup-GT4tw9VDB^LTM*2`O}W-8(4v`0^Ja~k)4TnN`~JgXS5OWusC!M zdI0!BJc8^njpxIpeCb;#2{wXPQje=BVJ>-;bDOsf2FmgL? z2ZC>Ty^7Tu)IK4b$_s7_;0mlAwBuq^c-o$;81Ol!3}1n)UxZM1aR?A@gsemj9Z#dB zRT3}`d@me=LDjhm9;?O+a1O{&7p%)d5+6)T5XIvli8!~)LsS;QwVV)JZ#pAP8%X}4 zz9CC$oE4*g6PL=xkr80eATb{92V#)&@M5izXl)4_U@j6|s%nge_8aSN84 zyyhzsjWC>`7b`qy(u-1B7-w={Y#YFKGj&OwWKBGvakL|Mlo^ECkmocaO86v#h~S+- zyCiVH1IJ8r!de0FP7cL-0se;i>`yjie5m}rqy~zehY`H~8Ygr#2MYLruNr?PLTCKD zU1ypTQVDt^y0OMitpa+dS;8?4$Qf0Tu%X5RQ10Lfi3Lp%i}(<5gUccq2IfesxyC0As-giWVuxoz%1s|N-bQU&T3ZbP`0q=64_(mdUi2+( z4KMHl=$);iceEMODQ^`;qsTzuLRHhwR1)Psl7T*M1JDaT!!!@6CltyAuoMwwO6o7V zNGgc@L@WxQqlP!8JjkXaB?46xf&-*0rm9HK6_5^ut;nP4w;2kGIqa%RgwW*<0A08c0CGFVzC}B4fawDbh7VGJEECtN3eCo z7|t1rr&>4G4KP1OsgemA;zX)>T>2Gxb3suuVu)gpnWA);UIymBDLSMlM~_q!mKuTS zEr4kEm^2ApM5Rzsm=9J)H_Zs9ywbh4}Nvbx&XbW}$dc z6ok`D@e~9is!b>ZuqED0YCGyXsQSjm<7$x+x;yYt;)82wkm`{cnxWw;)#_Lq?y^Y8 z@JK&H$}PmJ5P+uU3PG_&w!msjV%iDh~?WV^c}N+np$#tdRs@kbuwaA~Zn_udCCTgPT|uDd zsD0>RYd;J@Yl7{NQ3Cz#K*vyj5HVtFv&a|~;y*M+#1BFks!-f<)md&F&qyF+;pLJv z#g3YOr?;;oLrw)^+4rFB?FkHPFinax-kvBQ5E8ddVPJ8FhwJei=o?ZQ=uHI9f(eQ1 z9#Mm{&$cy16_S_yUnKIne> zv0ds-y}UrX8Zc6zk=*Lp!K=IILo|lALlAM)i0pgSJSE66!kt%Y#LE`pVZU)pe3poZ zi##jI2MEzm>5#SzSS9=sArVaR%Nrt{4bS)C-iVh5)?QRV*YVR%Sm+TXlPGp=jWz!c z3QSxDWu;vhS7mdqg<(0MHNwqV-*B=lh>nYj(TX-tNM&yp9cb0FvNg$vFrcv^J$R8MSZ2XFnR zCk2_?5?QAJqCV6B34|jm?y>MziyCegWR7?wvZm1EAOLl2ATkgwUDqaMER{mlCUoZt zVdJ0Y+lL9TbikpQMyW-cdAOD9fFHyrU6`wOnzU1t@r%b>th2Ndh!K5|JlKdig;h3u z{mij}#XJQ%ubhZJT3NWpTPVLYa*YvQL_#(76SSM(?j=TAFaY2T*p@t18htFJxyFP= zc(iVzkqWgs&3J}|d9Id_*cGY> zt6+-=NujXu9#q5}(sI;{E{?i%Aid@*7Z+B#w#?~P?MYG*AZo||&~;z};tT`RxDfne z62jkP6n3zJ#&StJrI;?MWb*{(B21GZZgu)1l2E=v2G?0D!PMMTv-|zM;env0>SepHxPS(JMIT%Z{Od$AXpCatUa^iETu=`! zLyW!M+3JH#|yM^jNlVAwKe*aSdi>J-ZDvwyhV344YzAYQd6$ymsM3C3}`Et!@oph6?`|oUo1sF%O1)c0DwCxnMN)jSmYgJNA*EQLA(jHb+a$g8Ty?B8LTZ5Rm9He>^sWC6 zQh=MnWF4(Th|1zwQA1(>_tC7#jKG0j|zQ6l>`cOR`z`U7ncFF<=o5 z8;i;sdY00WUc^@8pQtEsNTXP&M*Fpf%wLNDY1t|oME{WdV z0BH;n?7hG3gGJd#odTn(uw7#!HMl9hM@6&INAZHxm|WDu5jKJ|`8`8}j%gRogcdG4 z9yzZ|6`_bghG-_OaW&j5k~O$Z9NVe{xabT_MWZK4x{L<;ApTD_XW9(9{$E z+yom|#WTqf19+NeYa4!6v?kI);|qCm&5seingH@hEGL+@(2vZW^gID@QaLhs+`Piw zm74=R7zsf{KP@5vXi6Tjt8agLk_7Ow-1*S)7k=-qHo2~54u6l=e_-IhK;V23NPfAY z^idMPX*>A`$u&Vh;Vm1++F2quz_@DzFN43GBrkai-bX;SPj?BKlLy70k00_mO#}RL zS>&6d>o_QAfO_EV@UVs&HVGq@8g(WBT;Fq?>eK**z8KsG((*?ec%)bQQ^-o6=$ci) zYg4ua<5G$(qe3>l;dP*PMVGZLICbjc;*GE1r^TeZYR0XYTEO}|K0{YeD7~PpDcJ0XA=l zH-`rNh^gx(-WmXb>x@BnL_?B5FtopMpTi*wYY=;eyMD8zuoE_>YHqAyW*PikYJzpgc2$&22f|=^Yw)4tgJ^CYshJ{iubn{p z7+a*t2Kz>(kB@MnFWz2w(qS+dl3bhwr~^t=R$n2Z zA!ZnB$&S}F9OQ+12nT_o^PH0khEO!LmqelmJyJmXZ7OFR#L#ZBX+uePQZ-pN&nMm0 zP9MTX2Q8@$ zHzM+ujs?=-h-Lx{=Ap%D=!^i-o?W7{Nz?H zdMLbrj)k!>-eHfVjh}j>&U?a)hHXe?ZDlXOYpT9GT*2Pc5;VYVYC)`2)3ZO~-kBz)0@F(jfbzO|qo3Fnby)O>SS`6o;~>X?-CdGYztu{PH& zEZQX@ra|Z;>f2t=uY;@u={L0b&}u@$6f+FtIsmoLer?;iCRz%*@ zRT^f3i-2xJlxo!6)R#0Wv`K&d670x0%Na+obo6bEj8!`jHZVO;O**|Bi@<4iiLXdx zVPQxW;93)V?Q}3mr;MZpQI+7-(*FGfX|9fT7IX|Nq@Gc&hqq)U5DSmV33l_3Z*-?#maAUH97H<}W+ zpz|I-45kKu&uMFtQf>0sf&s+3tY}fS~YvP#u2yf;e&LNCQBuU2mO6DHuOI z1?C#BCFL|fE~bTastC4bMLIV+ka|?}GhsARLk`f;US*4$Bw3C~ROw@C!WX1w)Ny!B z5(*Pb^>&K;O4_^Co*|ru50r(+A5wN2kzNg{vZgiKf3u@04!laVi`OYYLn-KBP6sRF z)|R&vp#EmTp49Uzg<|HYOmgDOl zKEB>XcvkCke~unCV==%d63;Tjw23!}r#5Ya^FDEqQS}$Bt7w0sPOvmEQ1|s=)Lo>6L~SJ_35Tfs5;grtATiJHWt`A)B%*`DqH- zEbx9t-;@UWZ-K5guebU>P9K0Ibrrt>4i15l9A&S!cz0)WZ~vaD_xA(Tq;k$oj(9Bq z000DMK}|sb0I`n?{9y$E000JJOGiWibpUn%aL5R;9smFU32;bRa{vGh*8l(w*8xH( zn|J^K5|c?pK~#9!?VEXcRMp+bKj+>_m~0S(;U?@Ni0rl?C<;oeQqhXMsFf}#yf+l& z0%~k2+JahbU8+?W7tEz#wN|Uv1;w{otsp2?6c7;s*^D6!A*@NrGILM=nBTx8nMo#q z_IYj3^UQN+?sD!q=lff~zcY&ewy&kx!9W`DJs<=;4xA*H!odFki(SjnDv6Fv;4Pr@ zH)wq{puXmJ`hX5VrGQ|>T+0Gh0z-XCbTk+k0<`)D0rD1bHjwre0=^T-1yX?(z%#&M zpv1MD*BS_YA@CbuOfrDvf5X54mV^7U*Il0vopqH4WvA~j|OJ~=$)UGwx&OXLLdO#6S zCiZ%k9M=M?(KIzs6GdM!l_6j;nzE+frVR|$6U8uK7n+yww1KI{*IW2n@9+3jC5EaH z+kNaUthWHm2;2lt#~NIaHy~ zSzW1i4QmZ*HSn>U=S;Rs=CuWWP!Et4<4d3d*eB-rSXwpk6o%S};#Zg|Q|5dx@GIAH zLI4FtH!FQvd!O1{tBZQw7)k&}9&i`1*0r3EjV6U|^$_P62RxJN@WZ5<835{<&xWD^ z#Urle)MBU}D7K&|ZS*nK_ZJMArAhZy0~tW6YdJvx6z|7q;3LGI}e`6&G1U2(%80YZGk^iWB-e7Pngm2p%W2`D z1Hc1zFfatopNuDpU$sl-r2*}M1A1(SFT^aJ1eggXT@0WH<;;|G&&u)C1Rz!bI{~{<8)1Is{xSV|c8A+57;w+YSaM10Mko#96mTfSMQ} z{B|&KyWD%ZYdJ;HYl#6dRO=WiNT%KITFwpf%*!a$V>9pBflsvsP6k$>sRp3DW=a!6 zFu~q6Z>mf_1pGtfFj4qjEukg?z&|9Qh!>D}X8yDi0CoGOg-On9C2$!qU5>F}lpFK6 z&qwi&EPA^HInSN0Wn zDB7MXA!xleUnEuS4R39BW(VqCRlBPv0CR!SaqejC6?AzN&7cH5d<^PjsOxd z8I5oL{E#bO2MM5S0K6Y|9GyUT0C?<~hie4zL~Q}tDTTV7|2d#vLX9?5N`h-20hhX# zQ$Jh}*7T7z`L0-#K1l%r{5T1E;Az)#t`=#20q7o;Ey+Isz7KdlYx$o6^mF~kHRxk+ zoKKZp+vr-3H-#UV;)fa!qHp$AfzbjKV84d@+nZ8Q2vSotlW z@=>1ta?AnpR>Xwxj1vXB;v*)LbSK%F%ed(OB z-|byk9%CvSdB*w%GUW^LQ?cvtB!|N{&?WPQW1v^62ae@&uGWC>JqD@gr%q7hikYBI3 zma|X>d$BC`#{g^%ouaG{4#rbb{pFxb!aD|Dir*{%X3FzcB6fNz_#TRY0DEiRC8yP) zC>5@@R{UL`b@F5}w?aifFHRXrhRM&18waq14AY3E=jkX1#=r{0`MTP4frA% zK)S@uh$C&8YdNEi{IZ2JdQ|@Jn-Io$LBb2V zUv_s)wL+MMhV2eF1`KI`lH-)7ZR$}4j2EFSS3g>JX3DpJewg6k=TY1wDA)fe#<-SK z38WLLknI;IkNAanZQo;scW;sJ10qHfPo_V76;HYcbS>CL$^l_@uFz>ih&?+$TI$tiV4l;rW@-+@whjQA z{cZP%&{O@WCGawENkVh_$$uOR`b=8#Ytw^iCy0*UOURpw&v@3goUqKzC-XcX=;2z< zHkyq(0DXS$sCwohtT(EqyU%{~n%hIb!luBG{AG1i_T;$HwVdjoMyQej@rPd%wfz~u z8Ps`Ocz4fkS;A2*C=Ou<109<*IfiN@W*Ja((2RF2C+rP8saFz_WfCE8_)TiUL){M3 zpN@hd?ImC&@IoRm;yd+ppA!SdTC@H0=g#Nt3Og8hIEmb(mQ-WM5ym&t))OJ2yo#{y ziK!Y(ZC=_Q`92uPCdF9pj=41&Rb7!Bt?4ZQ@L5i2XjhA21 zjtO*YsB;4Fz!vm#8gN<*_Jt_mM=j|89H3(q3~8Hy&s&h0zm2D#!cc#9^QTqB(Tb~p zD+P?3fX}0~lH>u2#LpdCFtH#+>KAzWGz`@}nYdjfagR8-?3inHQm`2awB@VYTrml# z7yrAKbI1+`MgWV2T}U~S@`;L!u_7EMQNa-|_%FwfzYAAj)3iKjii{utAP$1@J0x%y>zsupUi{G4x zsRjU>iB!{8N*?o1;3sI_U}sed9nyyg!TG-}829C>xbo&kJd@>=*}=eYps&iIhT;P5}#3&9MG8LqINQ!Lx_OdH+EV$PS~Kj^;d+dXBIjf~oqGmGTa7Ii5aUo~cm#YH!imsgDD{ zK(R>7Lnf(4d!atMQ627#-yDYDybiy49-2-l4$#hj24THiC~uoOuY^dM*pJWnPK#!) z84f&gJa$jY%4xuAIhF#wT+69B);^B_Vz0UPY?9j+6#MLT60wAU2`Ji=W{#mU6e7bn zULuQPU}Dt4>yuIosr44&Q=?F7EUtaQ~cbi zgsDUEG$z?C6ec7HC^!xk^h&jAZv%UN=~&P~OefE&X&&2i_8Hw@{sh4Con?ek3dl&F1k=pk?#1ycOQtOd6dEn&6@BVf{-0^ya zr;Y)J>LEEt>i3h!OpSZ5J2U7_bTHq4?BVAmCa~*bW9p0#~6aL2+Ab4Zz+xuM>v)86hu=6r%>X0mwt^S%kHT z&v0GKc~9;gh^a;ccM2hwNu<*FT{I86c}Fu}I~dplEO9Moe1lB+aUz?ZuLtt+^v!5| zm};(TIqU6UARU-R$m@vDSm;{LGFi-P(VPPeMd4wnfoAR-{&4VuS%h>hKDF4joEInR zCCb>n^%uZPg!Io)tU|FFLtQPJ{ql)2S?gp0u95T0g{KKUhmfH ziR>^`Kz}MjW87}nzXV`^aCaLzXY3m&A57{wbC?dQ0HhMj?+5o*&N!1@P)D=K2 zY39*APMtG;3WTuyW6|6Xoa>G26b)CWx%tyB18$easuR=uiTKD4D5_)*TZrr)980Y? z6;Dr;xoii1E@tpdqGe~zg?d=-jledw>EL&PrBsJMH6H(Bq$;mjhM~g83r5t3oC0K^ znB!W`VApbn03Aho<~+v212HV{Tf*cHB(lRWA9x;k85rtX&L?tTPhn

0WI*0-e$9 zk!_XZfUxe7_0L;GLrrT<29cdEH)E=iKv=g={~Mm}3usJr2%uo??-ZKuLf{Q^EoYEx zIdg$=)OtJBj>^~N{Z|8TqF4q@!BDpe)nA3FmI8O6IU7xTAVgNmyKJrK1*EIZhu$Ny zVdH(*a`qjeSL(dKp=pO^g+9G?9ncZK`H?rVOO4L;Uo6b^332Lu@w8w4c-_*N^Zg~_ z+AqJiNv3+8_yHSFhtQM@Pc@aw&@~0qryDVK4K1qw3gAQWmK_W%0-grCqA9*pHjjl% z2Sn@ip9(NLfO0(DmpX5+dEvT^0Q`NokBYjEK+v_EikJwoA3pV=Ie1;UNb^e3xG8vg zjxYClpVTJO0SCAlMGq7;Kqg_mo>MX(0KB4eXRRSp{~lro1N%hVW|LxgDDqLP$51&k z&L;@#PGattoCrXCz%~qZlYZ^Yt(fzp=eMINWN*!T@_V(YcRwmahsp4L=*xfWU})QU zBT4t2$-Y{ToYYl%c2CV*z)7!+#N<4Dvh-}H(0OU~-Dksag9nCfos9N>e!PUA?n_&P{hbQAVU!%@zi>WqXsHH@< z?%YFp&GQOEx^1gM47HNa54NLQ)=f0nfq1O#Umgmm9z6ql6aWAK07*qoM6N<$f;-PA AM*si- literal 0 HcmV?d00001 diff --git a/assets/img/favicon.ico b/assets/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..01e3631830a63b0c74a309108d13d717ebfb43b7 GIT binary patch literal 95518 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 MU-O*Ke~)wj4@4aOssI20 literal 0 HcmV?d00001 diff --git a/assets/img/fmn_logo_125x117.png b/assets/img/fmn_logo_125x117.png new file mode 100644 index 0000000000000000000000000000000000000000..cfd50b011160b0999d56bfa54c43886591a0b4a4 GIT binary patch literal 31493 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 literal 0 HcmV?d00001 diff --git a/assets/img/itwrx_logo_250x250.png b/assets/img/itwrx_logo_250x250.png new file mode 100644 index 0000000000000000000000000000000000000000..f1a4501ad6ce7f6f3f6528603c94e65e36fa88a5 GIT binary patch literal 61135 zcmV((K;XZLP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3^gmgG2+W&gQ~S^@zO({expJg0Wh%kO(Za}Up< zGPC-0cxIS~nJSe8M4r4S1MFD;=fB_Mzy9mL!gb~IxN>c!mvZvY)vq20e`)7m|E!;{ z-}l0K?SKFJC;a?79RKtOk*|rb>HB8Aetw#MzW?j><@Z-E^iO^e^54B7{r;Hv=LgsE z^Zj_nzqz9~qpQ3uJ7r_Ral1dJ=FIR$FIxq!kbk}`)!3kmH%h{UiY8Q zpLUM(3D-H#=e+szgdSo@eEt>Y5k`2!3X`u-c(}(au2}gR;}g^VUQ0Fh_@pz1bonQ| zv8JA8YAL2Cu9VVsr1<+@!v5U8Kko^RPo9C7#=yk_Z~2#hj(_)p|K!j6J|}Aw0#6@) z){6Uz(R~OmWAfj;j139z&%Wioz`y?d{^$5(V-q`=_cAvgaGdvdi93hCY%6U8NW3od z^|P-~r@I!nm0Wyw=4L`-3(gW!4kes5#u~zvVq=2_cOKIfZ+0N$949v!uapXV)375x zoA=bPUmJ7$zK^T0KRK0D*_)mQn}thZKlN(Z(8wuYIp>mVZn@`ilvJ*gODVPJbEBqu z)m%%hwbfonOYLg8l~!A8y^S7w!Xv*D>Q z9uMa8Tu*+=Q=j(qXUsU$yk?$d*4bvCV}*q&9qU?ol~q?;eT^4ed((Tp`7LjK+uPsq zd)Iz;^&kHHFLo{b>{{GAj2(+tV8^RFfI&z1>};S{bm!c& zvq!ulM{Y8^H#3~$2!$=YR*3lxzxVF1o%@gX?O?6{-M+>DWakdI?*GHi#bc$v+qZwR zYf~hA_KtmC=$f7h@8jpIjo1c@9lyW)`>$gz?yuykAspp1^|Z!u_8a z)4E%9G5R~p4NPC$2e|xR?d7sHkH)J)Yk0%~Hjh?$&&$fy^wi8l)cK~&(qnJH%2V!k zWh^_Mg;n6ASLFd-40M$X^UG}gG3%J+#T;i{rS_hH&B;Y8)>|eEd#_Tib@g6A)iCeI zzOrAeWXfamRFS7F^O&(aHO9__jF;QrQor?kN2#hXLyx1W3mVoBkmv$MO;%PsS|_r71Aq=&cVn{aeK zN4T)4iCcwM-+?ntUpd|x+2?`#r3XW0OEIT$&+*JLLvE|JlJ3xBuH5f<^TEgRNO4Xc zH*q6n_RD}=ud6=|Oqe$i@Qeqe!AIlO*FAZzl;Ty0vF!~{!*STPz_ShFXujGSXM6K_ z@7Nx^uLpLWC&Ut4yf5(Kd~%F)@t7r+nz5zQu8Yl!M|&2py6Wf{YA*fB@BQ4wiub;F z6hLciE35A7%c8JJ0UvnV^FFa-qydAN>%fOI&wam-RsgVFcYJSH$Kq!2j(*LQ!Id$u z!Tt>cL_~%*5EV-R;ifdsNpc{sXL%wOw zyzXsL z%$6oF+3eWQV}Q4qS866j2v`b0GTwe) z4a%*RP^WC&sAFK=uaNn!Ncg?F14W6T7Jdsdy z$A@@uR_rvv_rRKW1a6FY%-e~S1PJUukLQsjf_hhc>Z%te)6c5{{`q-UyO!`1CL2~# zdS?e_fXg>N5c-h`73F4$$DN55I3H0ljdT-@W?2iTfFAdS!7jo@CRnA8PxD5Qn@F}| zz`%29DT7-@%;GvX(8m);770vx_{IbwL!39L)vi?DQRWLahTyim1ZMUXAh?K81E9sF z?^wn?@@hoEyz+eV`Ml{Y`8w{#!aQq?TA_8553U4kd}f~SlUZN3Ijw-}-h|o3;) zXIqCxM*N63#=OqQhy*S|tXD}yptoySASSRK@4JRRp4I2w0TQ;g7x!mk00$U+gK9)X z?4+`R;a(BGaG$Kk0@fY~V&IX3|6L#fCqBRzM|4R0iflnveIXb1a#-*Mt453~pb2)zj(l*I)V!EFXRXw=3YUu!KVc z>+yQUu@lyZMRR*^o_#$pjG$^_F?Wc{0aCHVz$$$43~pLUk3o^!1eXbx`KhcH@e)r3 zqeQN8u}1T~u-=PhgN63vVHJSER^b#7OgI&44;R2tGfq?8LHJg0H}D@SEJ+SICV=p~ zSO&{hE~4mBGB*&tgF7?1IP-%Pq@?yxJ*EnWiAT%K^jCm9nH68iIZx?kvFNZ5ZSu^}|fLpE}|Kcv#>T zi=iSJAJDQ;h-!$;tXz2d5JZUaVLW-jWMHQ2fPU~`fXU*kw!{_&2t1w)oJ>eI-+o(T z`QT0^5%~Jjl%f0`nFKFi*myiH7(P^35Q9bM*r9*$HZ+bT9%4GqbXELXqKaYxjaMWL zZyUoHZXqkxd0hIeT&qJL-weOIl`{&Pl!%9kH-oPQ93qm$vk^e0oe88~xCdkqo|=fX zskuVt8D2aJLIbklnBX{I4uVKTSj;*!9UgMR)X^Sr)$4g60Rs~QtB?A+(Z*Y7#|#06 z@wQU>imyBaHHpeXkfAGx9A^m4QJ za1`zil(<9VZ*apRy&ycnwOEPbbw963^}_!#9wTv?7ts|IrfOfyv0pc zlm7yA`Mk%+TnTb->;d3*_d6Oi5H>|GBO6csnEaEe=wPEG6 z9NcFZzXBbojGKgQd&C~JBGCj!2v$Mb1|dHKwR~U{WpP%F$ZQQ9`bbdajQ2t92C;kz z#?Kuitddv7ky7VzA*2ZqKNDm&B~uMcXhM(GpQwJE&?Z3kjldh5j#q;90gR0qWsf4n zeqa|JMuU4}I-!LVC|CKONkPg_aCV&b!uC4P6Pm`v;={@B2!8dO_zk~qGFzbO84$-4 zh(aPmtu9zi6e-ZP^E!G#yuYyP&GK-z!F?fg@l?d}eOA+?FJXuegpL6X_{npH3G2De zrw51{@ogSN^~$|=cIe?&ponlV*cT=n!3p#lyOQf9vLVt6Kn0FY9`Y@nh_lyc5}4uH z1B5J{C{|Fg4Gl~DS>ZMKWn@!8Xl@X^!VB#jf`hSH&j8{p>onjR2Ma5mVSxf#3JnUL z5Ys0zH(`B5FC?qn|3VbQT3Kf$lN150UFu5=DtjRU5*wdi#80WH3PcfV@_qtX2IT|% z(F&-?fR)MpPTV}7f(0HJ7(7oUTvhwFF=xJ!l` zP5|POhZh#Mq1s`mXd8$=H-PJo5Lh_WLBs$I?ra#(sLTW%kKm_)tl7BxsZzp0g(;w( zSiS&!y$_-to$eYLJwY364qkUBq#w#|&3K&pCVp-n!W<+{%=I7OoEXXz5Zwbt*)l9L zT@xYQ@F*<5JbeQmAyjpCK+y1Th&o1X{!e!^orJxzW0>4}xdOg!h9v2Nz*! zi$nvw70uvD9k%#9c}-{>9wo1N#44B}k^xG?gK{wld#njgk}=?e==KHd6SX2>FHAl1 z7ci@PuUw~GL=-vBsdR!)qAdx2(|tkn@@y+X{mvq>d_m+QMa0HfSi(}lAW^y@wWpYU z%ro3Mq3eMY996(&sWAZ-w|b!h4MtxseDwU78w;HwBB0Z%Fjz}UgkoORA8v(RpXX9l z!0|x0A&}+6RfN0|GGssnHUg2oS?v3{pe-;?vkOBd1;Zv_Y$5eK?q&rp+$2dNLP=Qt z#DWuU00|4vnIC*d!d%S%rVM3zP~z8iS%y2ZMGgcO%^P=B5 zhyq53+lW>kf=e~wa5jxnod~_XH>(->TNYSt-Y$YLH7DRVk#YJJKqKM|(~D*(xSd;X0rdc5$WLAp7v=7k<+ByMeq4^Jyo@X?YZys#dFyd{CUBn@Ht^)A6N0<^hjlDVJcK~?EW1yLVNnQ4 zVII&RNF2LQz_9>k9`k$&x9qTax|x(YgYXoH^7&B+V4!?JO^6Jr?*NKhKDfVDagG=u zdKfRed7I;YTg9j&epR_Gunh_)!^sneAk5DRj8-6WVq84k!B3!fhV46mAkWQ>oQe)! zy4Hs}MkSNB9jFIR&WW1@{jF=6EHA|52=jT%!v+KXGOKFHC|JwHoQW?bL1S3V24Rxm zT!6{E&Cp`Xh_})+p&ky2kVLsa#o-!QCZ@XMC$QCOKUF3c+D1q4TsU$Rd{ZStf`@P+ zG#zfwogZ+W@Nnq?GCv}XomWqkpDZ({_L!*_&rnm+8oR5~0pXVYE_!(wlCc6dpT!(FpkM-2H@;l3&{ zle>XPo8hAon;=N9oe08WdD`HAbKR6r2|SK?EJ6teOuPoe@VF(^HkJ*=oH2xv7n;XQ zpnh+l>9Q^c-G5N_TRripPX_#lndXknvJwDlqGZ&x$+|%|L75wY+^P+Mr&uX5-wyG@ zT){#F1R5eac>f(opFjs%bonOVCuM|fA-rH&3Wnini;f+)r1 zBd$U9Ff+K_C7xt>Jb`{!(9pK2x1&O2E6k%39N7^>Z{zC%wc5dT;7SdDNi7%RgW``h9Uf<3WWD&6Ul*EqV zoOsQVue&ts@X(cVB8t{dzy($uhQHjCoGfWuB;OS~kPPE)h!UdlvIqoAjR%BONW3iT zPwR7f=T9CPbrv?MSsxLWk?kbeqw`4PkW254l7vJ+M(gE877l6LOGbo*t4(1J-2wjcy2OOxKw0akOZ zXx0&c_M8^<>^@3t)e^t`3w*V=ASP)!#sZ_MLOn5&YfK~uP`cO-ln6Wr%<3;p(n3x< z*u51$n_I|<#)Y>`xq>9Hq#HPVOfI)^4I->GBtSQS>Cg$DRj!9>KZxZ#D?lh;!(-P* zNW?|F(JREhj)zF-wx5r^nyV3l4EiVd1@oGVD6-&+EFMl6?Tdiby)bgj`lEI4b?r+K zW}s**mbBSjukdMt!WS zuP-NCC#ucdqSPc|>G_2Kyp4DjtxDLqzYd)J82IMeDkielaJ1O6Mpg9)AR)aBElW3mkwVW)%) z%ofa$KZn`C0Tld_DfRl&t-w*!jsnmIB^VQbxwJmHNRyevn%1bh%nDgL2Fpd5LMUR*m%06u0OdVi= z2_qSMR-q9%%=P!$5K6($=()ec)k$0Exo#guy8CP9y^7cVGeLZ7zrUUOgsSV zv*vYMfSu5^t~-{;coE9J)jOqHjZDu$utF3S9Qy(D;eMBF8wVnqC=MX0cmOgnt7LkF z#}RXZI9QDd0~j(=w-Ju4k6#eWD3f~(kJdd2kh_D$kR9i*kX`;EWDi4j`3c$eA40Z? z3T56OA-mZg1`UU6qQMHVUI3Y{YsBzlzyacTULeW73m7PyW z|9!ifNQoV{3k&;Ka~N2Lg>a|ce51v7ND4@bB4QhK8ni;12T>j{1a2VL4ZC2?5S7M; z`($A=MyH#sry>K}>WGq(F=5ozB~^uaK?6fNST+PCWT>J&5NdCPA9n}~1`ttH@_N7& zO4FKBUq#PmRZ#rNH|x+AaUKpym`-5uZ3EAX?IQMABf`cd-zKug%cfUEj++bH?&eIh z#j_VdR_sX#*!>~XLB^o0^Vr^U4qnSeF6}lvQp1hkiN6q4B2QvD4|;(p#rz<(tZzAD z3nm^3kb@Ysw7y2*%%)*vz-(GEi`T$mEWWZTFt&sjv0wl@{>M}F3H7r{I6Q`yYG$J$ z1b2t$HDJ-Qc8rPGm@7znNl-yq075z(1~(i{xOM1pM1PLj0ru0vCY%L~9Uwhq;IuR5 zv}uS(wKETpw%*?C&$FJuvjed8g+sp0P-Pv5eQ4PfQr*x_+(ska_OOL#}IM|7Gwu+52wJFor>B1*I;1@WcI0^kT`EL~&+ za`6UCyoS3=fKRp;+Q7C!d+`ND2P*G?2xW5=sbu@i@l3mMF@a{0(Y-iR?_Tt1pWe%ob%~}fJu-FSp2n6lobXGX!i7& zzBv_FD9BM!Ic$ENr}gL32P=gpEEi4{z}Re58fYVnB@!EM6%!^_nAj;@(8%|(JId_6 zh3_Y8R|LI&HVdVoJ*ZKl}_c>J)EO-XJ;9V9vn{#*Fn(YQPimC$UKc*VLKeJqZ5`?vz(=Xx+dJ6TL5-WHES z0X4QxwznzmN-K1ZtHY#|om&%C(GV+_Ep>Xsoy`-%_6{}+(QMj+&l+mRsji(+>DzP@ zA%p0etf`pK=GhUqT9Sva*V3cGx@s2d2ui4btuG+_aG zfRM;z*u-U0)FGYq9_BNC=Y{Ov-wXzkyo;wFhZ(Xssl`r6ATwLtX$6}re)#8mbUYd& zpLyC({o{{zjUWZRiJb;%G9LxjUzrR>NQ|in4#sXYE&1U-9wD z{gQ^$&6ZBv-QWA8Gw2a{TsbBncBPL8#qhn!=B(ElFzCm*=?50f+U=%))&H#`JT-}( z!+{sFMwgaCpt|vEwe?3^`hHi(Y*7H!!fR~Y^Vi4~?ULOt9Q&5Htykyc-hWoR5WB%i1O4^}{SJ!mn@XOI#e97d~8wxaA-?6?3oY z?!>`$0uU(zRWPAuuMviKqBb^y8eTB7VOMRoo&dQ+$;M7(IuMKT8pO(|UVZ zsaJJE-c72pYkqc6;_cCT)I3csEqm+Nw6_LEEV0cHt{WgG99ohgHa4;O#O|||RyHdF zf^5rfBZt@`O0gm0R_GmZ3<`6nHWNMS*Ewv=1K{oU3m_bd@`0EbTy|N}MpM8xSp2A^ z#0RCxiarPW{JIdH2mrQ7ieZbulngjDfr17R;mwfQo$0--ZLpZh%3q2*9gg^3jxPqM z4}ccd=t9)oO?uvEJKNKF&ne`;_WCT7(9o3Arv#KL0TBKG?|IhYK+x_DM6>S-VLsc3 zjSrw{*0nBTE%tj`)Dnrj7h4-4|6|XFVGreif0$hwy(iiD0<{xl()%a)E%+_|V%ssa z$%u}F>=^DanElU0QjGoX2Vf34w64R3638w9(Un>DV&dY(S+tOC0667ZJxvC zl!s5Sh;%zV0JsobcobZ)orkcTs_i9p89U~@^ z*KpdSfE;+&JepZQU}T z9qtfkNH~IzC?Dr-+c%^IwRFMHZ4+S^N=Y*U zuN#WXQYPF4Njr8At)-x1f6^RiNABvf?*J&Z;0ub{N{A1-ExXj8tw3kBL)cYoNF&(v zm}s&;;$r>IuR;=ETQ+Mrei`9qs{~GermtsX=aBms^WaCe6gNz{)nE3Io}55iRN1ie z<#2ee)vr2Zi-%3H*wef>t*NGEc2GCpjn@*dxJj1J!tLC3SR9AQc?@9qWpxRoSAfFW z1j*_y0?rMmzeCJGWv_&Qb)g;*J3xea5J1Yl1shiga)&hz*u-U{4kmx7gEZyffL*jLmk10Xp51<0wg?e#?Gv|O z+pH%ZA6S%OZb5Qr3&9$@p>ih(-)ud$UBKK`@HHF7 zlkT8UpdPNhvweG<_80%q{9MXoS(%8d-QJE*fQ=ogzVog_WS}g0fjYEa^2w6Vx zduxv;@~JuEdk>`DDA)PidkWT^aeD%fjLcp3(#d6s+d>)!4v{jQnh#|1YxhKzK{a>M znk<6C>LY});!rS@aNp;=_Q0rfu;p1(1Oui9I;5{;2GRQeXqbL>TWfrHgGeYxRH^5AGjsrCM-+ zX`fC7RD0G4R}n4zVK&yYgE6q%f8s1Juv3MYc?}zb=CeCd)ef(0l!1eD5`aTJ z9I#EN@12_67i?Sgxb12P?5H}iuJpfP-d0vUdj$+%c1gixCbXtmE66rw;RjBypSMj> z!JfPVBd9jsm{`UDa9C_d{R5_-gyXV9P@fJZK=vgqWaQbUwz{kZkFO|?(>k=Yf7U|(2#noy@A@W1 zUQhNx@mqr+qyW08w@aTAXJgwuIXwZ7!@~S#-X+&^^;F4DNZ2 z3Maz4*>^mIP&6BxQC1Jcrpqt@?6ICmj%D6o{CQ+PLlE9FF!(QwPcY zA%Frd5+#-wD?*pvslS+$W8N(6$Dxj<`=20c+3k4FEPzU8$5RM zH+mQcUT+sUh7G&5Z{!{b5NCxhi8j_{7X(TwzU-^#SN!URy7#>d&5w*HbH!(-6la(z-r2jq-o@^J;x=w*+8VH)$Je zDxw-rXN9fi5YZ><8kiVZ0TS}?Pzjur2;n$jDeMJwcVSzTT`0E7%?`DMMZsxb>;1yL z(+0ayZAxib--B(yJkl9bXcqv;qAOh73>gSwoFi!Eo7)@!-EJ_NOaf)#GgYReUJ z-Fn2zQlMqI%8qM5+9?c(*zUl1)HatL;>jsB#~t9|&9IV*p=?inVE$=jus05fa@CPd zrO4|DM#Hfmu2#S=lr&K(*wN1AP}6|2?O_XdVI>Y+wb(Tmdo*Xg#y+$HE)|^u!ZDz_ z!zqiI#m6nU_oNXNJDV#GSS)<>cnI~gO{-P~;8SlH4iKwK?ec=bmwkG+R%YBMu8_bX z9lZ;`RR)c19oP>zm=rUZa4To2{cgJp=_ayWC}eejhfM*1fLzA%Z9XWTg9Dc&XsMAQ zqg$4BxH6)AqAOb4voS~*sEv~~_Fo4F?|7cuiDt*Ft%+nAI>OI6Lns7Tl z72G3a7GVnN0oG>`?6eWRT5PjNKW)7i7ScKcL)_=#&{K5mA6Isyo;`uTqE3RYZkvU3 zMNr#ye>fiQ=bQB1|Gqp%!ccOUko=OEhPC+7@zZ8ATRS%3rus>)%@52^W659pC6Q z6oi6(5l2rvEX!@3v>J9I7z<7Wgr%aCZ7#)nEVpY9+wg3r_bu0uF=3p$zMqPz`f}sx z(pj#*PlU1Oxtbh;Z+&T<2GP4bPYJ(7W)VoL{aWTVyM1|%FY>UKEWmPz+qJCeqnF?^ z;2`$mP%b!vR>97l$+c~W7<$e|W`ulXUvz{jp&tSObXf}vDFOt|boRw8|AlH@xNE{KA#q$&}C}$1tmkhE`Im>V! z71ryq5?EgvMowr=x;$%c7$C5Gm_Y@O2x4655|b)&k-)jz(L9ytZMOH@$NkaLH@ky=BUsjr8o}6A_nz@J+%WCBAt+58VaMSF zc#CHT0U^~XZgvyp;Sq(yqbH*2AZ#Y+M%NzWxzTH$yHm`Zc1xwFrBW>Fr@!cG-?0|v z3`>~b%r()^H#bXG4UTtzlj6}6s2sb25Xln4`Rl{J4oQr6d_VZk&k7mXdwxDB+iI#? z--p|tY*BM+QBC-B215|3%e&__2zxLKlx0!@z;`CvS&e9h%~@p7`Ou;9r*115i-qJi zba;Z9r+GXc+x4X2@sV%(X{|R5)|oFj!+u9sKc9=sLJ>7qqp zf@quS^gM_lD0XbmGPTv7&gX*msa#khpcc<%FSSB`I^C|1W%Bf_c1(>gx$oQ zJYw($m$1Btl|0z|cJj$NH7n)k&hU9O+rC<{QHX7qfr!~{shY(#d`9l~aW1ns^M_6l8*?Ep%q zRdFI{I*@B@Ma;j-lI^UQeQD20$i8=r&Sf3^m0hn|QZ4&sXis3<5^d!EO;-1dZ&imc zWz6>5;~6~8d=7~h(Z`0aiWEWTV@d0H}zuxXAEd!D9oj($y!!1yAq6{(bhOIoOhgsQr=i~=L3>dM)9_TuVbk=yyWPF{C z&)lovHO(CHE}ZrE>oKbRaue%&R^t0c?MK+(2C1C+@~6JRkw%upQLhJi@Ob`>=f$u( zW`CebPev&hR{&^lYc>U-o3}Id zTTqvA5O1BAejTDxUA^!(zza9D`hFpyi1)+|Si?T*!FDaaehu0{&;uuchE5F97IF_C zK&utcQ7Ahd=akx4Y6)1xax|j-l;yzQXTvUH5On@VOFgz|B;lMbBa)g|E?>&WfqyiW zxjrY`d7YDXkaMeS``D!?cua-I;5_B1;X9_W?t|l4&j^5-*R*#3ekDSbcuMDYk*@(k28wrwg{Q+Rh1<08IPRi)i;o9Cth4PQ$FRmO zl$LeGc(UPe!w6`oFfe-xJJYs}*O*f? zy7Jj`|DiZ}4q1yj0%WxOi>8wE4=67m_-Y&0vV2aJB`h6SsMW>3p{*W|VnTo3k=1vi zAU`%z*tzC$L26>t0LGv%DRkLEU~j=|D_^LGt+!2ibN>`l5eUhdnQ|GVz*bM^u*(5H z!Uo(oa?lFS?kv9UFHr%B7-v^fM%aUMuWHTv?ob${wLQ$IGgq(YxnX;@{ob;4<(m9e zy=Z?0S_F7<_<3H0^cxE#5I(r8^`3KgXh7lXdD~{eeZ`<8U+2!>UgF127D86cu{rq- ze-Z}R!WI`7X&6=OKzwk}A?7{Xk(^qIbDs_krVncG15T`yW^=I~*A%LU zaaHhmc5`)YT-*u~?1E?zX~EX>a-}DnYQRT4&XQF>mMKQtmmQF>v@)E^u(zx}-<&)F z2E*F@xy7j?Q!y!gFnpRLbFd;E*#`N?_M7mPcX-IY)40{=G5+(Be}3S8@0jW5XsJK%^7hPuc6cUc{IdP1BR*qoePGD0 zU!frWd9V5J?lq#)Zzy0oif4Ca>)tl&?bzh`?Kp3cTX_bNwi{b^Oyaye;nS?dytC(G zP1`#>_2mfrY*<(<9}KyI|9d#ClFEhWz5_^Xm)^2-1ZWEm&N?pO$Fd5-FL-WhzeI}`ji z&$1gHZKET3+Qz*c#6R27?0R%~9h&T!Or8CQJWUUuE@ z9B`v%zx#_7)^bG;e&ece8$!U~y@aYKTpxe=4bsq^YC6VIej5u+{%CUv;O@|sP*hbo2Knsjho^*EUrlY-`v;n z-PqsW*T4Ae_EUfjatk{yv<{n755ARP%$q}SBOd;=BSjqhHtWaZ{(eRN=7Vd+Vh;~; znV#`y3zTy%Y$F0r*8YaROZ9W$zp$Av`!=J^q8i6-_8?fb0Y499zMYVEA3E~bJQfW< z$%rVd%W?=|zY&*i>oRZifZ?{Mk)_4<#AGO+vEQ!TYANxuTnm^a&#$tLZCE6en|EZ` z=H`7qUmM)zj1{`;Uiv>Y1aQ>_0`p>`m>jIqdRTqB!cldTazHZE1_gK+u^}oD+?AJ-cYIty7-?Gwnh^GD+ zKkOem09t%)pGVw-d6vDu7L*Wd%C~*6c|eib>|GMF;!L!_r=jA}@~e}$r^kA6`Be{( zTsjqNcEAu9szt}kvkO8Eggy+*^P5lNj6UTYaJZ;56v#^R(CO-sEFBK z{_+uzsYFb9eW>BO{f!kbG7Dde*%SHVrLROQC@=D=nQXULS|$uh^GvR2t8?`fs21MK zLsp&D&JDhN+`Fm60;lJI5gwj1m$Y!omOS7kf9ZtYzHX8cvZH7o+S~5^TLG%!;I0QT z^-jU0H$wV^{ha$KC_t#P;HCfwphSBd5xGSu>6&--oO#UYa?GvU2zU&2#<>G5E9)?& zhn;!&BbMUH6Vej{*W)#YgWR7JlxUbcYh# z(|ZtNJ@Fb{2})0oT>=_C*|7{$F)gP%A)|1XlGCu5}Csly%{W+S(NpaXy_LvHL z{r5?V%fWc`qn&Xq^4z~{!9zOlx8b0h&+p;GG;mwIC-ri`yFFEOZq8Fs2q+nvF0m)|H9J;r+6@ie+!!9nD(ZzHBcg*00di3S9la` zDt3MB;oA&%-8~SV66UXo;8vbjyR6k;91+i>vxp;kgdb#a*iiC#Olg61npOvh{N-7} z-xbk4iPL11JMvADd$R1-l?}q~^sFI$m|k$$5gJ@BPrB_M*a_mES1A@uvDfG4s61X` z`SAO$Rq*52w{HjSzk>^r0_LoW^#1z{7Q@_$zh%I2f%a^Py63F?a46d&LK-#B=C2ue z&o8A>6^h?Sv+$1{%h_YTI@|#kSh7d$d5n1UH%ZuMb$jUjYb*G#+4(CpW$*qa9J|5I z)--Eh>5m^EE2h?pUhSSK%e@^oWq_FK%BOjLktfU(FM#IdEGl|0=M;5P45itozRyeW zgTdadVw~4Lep=ss&i&Av{WCwQns{`CXTzqm^|_pjZ#cbbaj@Z8kt(jFejloNpt zDd8b9u-$^xa#H_0ct)nSCHk|ED0E$h78sgF>_ zi9HwBhRbCW;pwR%R;WBs5P8C`J)_yvVSkjB8r4%LlgI0Zc-|fsZ9M|3@8MY<<8}7q zQ^aTZIg}tyTWNO+rF{LTS&r+k3R1jyQVsw948vo6Sl3koD&rN zG9u+OPWupHLIDEtb-G2*H+nx~SivOAS80`Je3_W=6)e+!_6xn%e;)npg5qDxj{{kx z@z;B#1A?&+^`7N#w%Jo5i@zA=uKuczZ+6XX_4k;4K8cNenYKNGe)Rc0ZyII;_QTBA z-!?JqB)xaR$;P&;I%*WR`&TC{+`m1Fs}i`%QJqNpF0g-F!k@-xin-XQmK>|V$6ICl}i*)aq_G!3Cp-*xuybH5E7(_g|=KtCd33>M}3%q)Qixz0flKpLr_UW zLm+T+Z)Rz1WdHzpoPCl#NW(xFhTov5i z>9(0l#KlZ@RqT942z>y$F(Wg}n3JR=e8<;40(`xT@htyye~unCXE6YiKy1GtAQI0q z!?cMvh^IDfgY!OdgcW6#_?&puqymW_xvqHp#<}3Kz%wIeIyFxmAr=d5th6yJni}yW zaa7fG$`>*otDLtuYvn3y*2!-e&gm=5T&FpN1QxLb2_h6!Q9>CuVzla{SV+-++{ZuY z`XzEHj1(w)-RIt2?S1?AOtXJKPsehZM-hMc00004XF*Lt006O%3;baP00006 zVoOIv00000008+zyMF)x010qNS#tmY4#NNd4#NS*Z>VGd03ZNKL_t(|+U&h|m}N(K z=l^-DPPnoAcAW0Xc}6o55|ThdB!hr8*%%vRaKL%JUL4kb);|`n4eT!9fQ^lpwZS-G zV-pMx1j|MU2}vl&kw!BbX;P=@+_!H$q3Zqp(KBKsOCSjw33I>CbN`s>b55O5pL#8aKR-5?`+uUw&CZqTnvzjmZwb1CSb$rn{6(_Egdx%A%D ze{A(W@P8!f4uM|-cJMR&xvcO;Vs4k6Y-Ey9ET>q&i?V^7gn$_=5hbd6lsPSMo`zh@ ztJ$Q#$Io$y9|8GG?Y-C@=si6x0KZ0loURBriO12TPl{MmWk4dz(xoj1FRNry#Gn4= z#fK_D0jpga+5|0QyrrlsEcv}ORrw|V4k`6u?}6UaQ>7Q`_3}d;kvpkNnZ(So$v76p zVoX5M6!FGUvSTeD_4`T?cpF%U5hKQlqTo}bt`(;FRADt$Vjt4-Z2}*G6FLqGevz)f z3-#x4xBi{{aS!?)=so@W$J~D;8@Ppa44aURQlVl>^c#wRvi~&}`*Fp0vpG3MQXpIj74SRtDtSFuNyd+HlFyqCDOIWx(-lXX3WKT${S0%0jt{w&qpZ_5cj$T= zd_lg@YeagW_w-5qgxo+wj(kapr@>Ge_7@u`mb@MdcFq{1# zOI*i1mteSq^=21c&zfJiZnRt3VshV)F;>BVhzO#p zqNt!?j1lj>F(TqcMO2IzH6Vu54FafHv-1KXX)8!44~)(pS_!h2;<`$dc1g1;>S9)O ziHbz17z) zu|yCE8i9>+vZ&<3;FTLMdvU4IUGb0wNRs0c zgC;5Ew7^0R>Sh@6p8`dGpa*;p^#7RJt$!mgXGw(I)QN*KVPG*)ro8+2kT4K5w%*nCCNrlKu_>nyRFY(;Wq*uPtTs29KYK>v>+tEc2=`J`mT76_pfg`{!d z!qW4mHa)xG!!bmxS2adZ>v7&lr*0XYy;JaV{`}b9 zfo{A-AVS2bdV`3Fimp{KQG=*gCxQqf#-moidQl4^fEdLa#5w%RiGlj{4^)?qSj zUyVrHE3~>HmFzzDyKCjL9_&5Pzx@+$zs!fFj+z2-m?5!1L2$(vO>TZxIghtEoHb%a z6cxoS6*>p*T6gMj!}yMeG(fY2JU6K8()E4R^pv`&95OFe_aaY4d*0<4eY{ z!8AyMLHfb~6L)dt08=@4WnkBadjIp)P+`$Q#~}iPs=-rdrIR(NbnN2&UrDKn%f}*Pvq5I8oAiv3uag(Wz?@SyW^> zhen2Wn$)w6Jj?yAJf{bH5A<(m&_6G4@6-hdVpLRw z_Jh^=8x9YyPAYT*ND}Jl5bhy_mfR`nR9nr|*-aRE(n#l!&4xtzrRN-q`FP-@mZ#autmLBWsYi4i3*=b-cVX zC)jqAylZi(Me`;F_j9~dFO&683>6>`Rt3#^{1HgCOqaN%x&2DmnuZU$M1=8Dmbu2>4jKnN5(rfi|Fng(MR%#XdO znA`0hjYY(ws8y4$6gqd`I5v5uV&@#$g2k-{1f6N-vKuM5lky8a*dK>X?-e|Kv`Q{H z7)We~P81Ln10PiOE{FtKX;Dn4sAtnGx{t|^`X>xI zfb7zb%0>PNU6P_snkoG|QXpLqk7o}uc2{_U24d$T;im=x$(r4R}d3sTs*QrluY z>l7`Z8e27Hy4tw&SZR6DV3M3-l2J)ZwDKmG`p?S$_@-mmTjW<=nP%Q1P7J0SU>ky2 zIbL3RaJkUEIr3pA%55k1K?l*v8`e*JYB_FBfG#-F_h7isp<-wtVY6D0i#OX*j+ zBe|2b3xk~q(^@+&S$5~ftiwB2Rjw>cn zNTHL}kUSxC*UIz%%@S0fq+h>}nhTgqaw05NJtn_>-OSa`o7m|3vckSjke$3?{q)tX zKvzAqA!}QT-JCS7vYbD_QU4F}u19(nx=CNEqx_6dF|J6Y?V|4l3Vy!^C&M1Rr$B(KN~M<~(n zTI6|K^3D~TkN;zb{Bt1zMVxblX+SB>>85SE*#VCEJ9(Z*zWY({=~MDWg)izeby_dv z$}~hw27$#F41V=QwQ+J|vo=#r!X1jS3bMXcIsee$;_aF7%MccXuq~95c@Fd}de3$L z_R#;;-ww-P}!W4c{tGQFSF-O2AfCgf-94q30C zBlRmR=1QJ;Y{w&Q(Ds4h*}G6gzzT%Mn`+5L0|G_CM;;d>WOk0Q2YL_mZx7wVMUKwls&#=uyG9=ZsK-(iT-x4F83_@(_6}i$#@o)5TR=nYXED6K$TDgi&v*; z0N98?QgSKcn4&3bHuH&kuex91^7V@`VJ>8WXJ#m+HMw*da4XOOnmmb&wxB;#Ow2hO z=L-PL4yG(>Yx%lg`^2xFZlewX{{k#Gc!_v!lbpzS3RdueQ3;i^3>!mS?pNYA?WK!5saH!oGkDGWkFK!_0o;!rh6 zh>BHF8#`M86XxWh!5WXqI7MF0|CE1vfLEMQs!O=?3IafiDB393o>7=prZvVI(OQ z20DceUJ$c3H&65`JA2xp)c*dF1 z5={cE_vE>viB;3FYOpGP?Pt`e7=r}WB;NAO*|9gj`smKLZs?ZJGuX|7jK%1nA+A(d zhzGeb*vSu@=V-l`r0aqHbovM%r_Kr;QdRICaUtsKaXM=i3lb`Xr8L?kXi<IqfqKfU}NIWW^LyN5DnffM4Patu^}^}yg01zqr)&j!6!abSe$uiSqo zFV_ZUfdn8Up+(?ZbaS99xW-)Eo@j;XT~?)Qy-5Q#xm7%h5hPG3l=5)Fb_VNma4V(GjH-wz zfhbWq3pN*ATmvcwSF-pxAhi)ia~*&2WQsnKMEd%7K)hi zA(0PBav(EEI$dZliQv`-jYx<}@xs}W=Y#fvtq8tkiQ`dLgLm=U=B4^8PqacGPXa|x zpA~w+#?cwjE5Hz}O-FqKnZ2Fi(P6a9$MGO*vgah5uMXx!w`#+19%?=$i zFpy!&8|aU=k_B((ErR~YcQow1WZct4_b{W+V7u=l%QJjhK)M~9H5QBQ!$a-TB|w0{ zK)1B7oX5Aef}{hco6=2kOkQKXo1>&Wv83GbH1H3_=%Ev$N_+WM=#o zMrBx$fq=MLz!%3E2rr~&-=M$oL@d{_H1M2W^@%7mM77eHzlFd!5TU#)aPng#OW~VF zm!da~E=6yOGV|uVoBd%pUbz4`7wA8I-g$-8BBy)&TCu0Q+&a??;?!1I>ifKIJxPy z2EPvM0Qkx%g?Ka7;8i^DJG!p-K!2L(bMjYuF0n7LF?UF6kq-D)J?5m{TL zF{&ofj$Nw*=LIgxXPZx74{siuw|xzEk@6&Z5sIy@E+i0&v@(0`hhK#)irNF4Lxb>nYsSR znQP|26sI%pkEV;|Lj8>VmOIQ>@_!&qEn}So*GNc~GxB){GXfJ2R9Ek~Zu7}M@n~CA zM05@IP0hX+ZfKXbD-7khK1GW$VQ5&eFVtI25A>d%a($LNw8*^+!vc$*U&x-vV|A!{d$pD^@o8J60G zn+m|QoO7=Ss5FB{p6AJOE!DK%rZc~KCO%(btqW&5pu)JhO8;4Up!f8Y>%%-pmk7L& zr5T+LuxeoCU~TE1nd<7zM&-=9=wamT(6gsDzImiu+^fh2kP%1NuT;zZG@{Gc9sC#l z>Bs!WpT6|%IWWZu3l+dcvy7ykUqc7@nrWGY%{nJk;wltg(uVRCy;C+ku; znh}H{d*5)W0PDhX;e}x)UQ*vovNUg%9rXw1I4fDV04(z)hSfeGf25!0R6a;GwPYPn z-UMFY^e>F-A?WX|?YhkCq*_4cjhMzmR`7Ik;<^76m5bQ{V^cl3ci9BfV9P=^# z=+~><_a?D79^cfJ)T2su>j>j7IY;_;tSfGOFjz1d%~KmXrL3EB+xxztxmA|ObNot| zzM~oIpT9@?&s$#z3gKv!O6I+9Coc6_pmY`+XGIDu1B*P#6=7=pC1VuaBCR|p>Vj#3 zGz`*OuCx!z+JG7(s&=?t+3(O8G`6@frq8a@H7{XT&vozVsn-SEPCvJaLC8o**Jg%# z5C`I}*?97XW|Xc95(tC{ao}X|vZ>8Kxqo@+V!@0mQVX%Agwehb9cDJV{!=$S=qIkcSK4!RmbMwX-NeTS+XU9K z?d9i75Ql;7IN#}Xw3Bzq17!8&;+b;XX}5iuv!=Q}5uIe1Lxk!O2i^%T2TeiKxng@- zR198?Af}WC9>CjL5rr_hVXgZ!kWjnPpib zUB}?wafZ*^Nco1k@2<9)*wGzNT3v4Yy)TGwWgPm;>ogk*Nw!8!ztBy?Qz_eDbCDF+ z^@*=1w!TuYG|G9XR+zi(*qL%tVCL~8;vP#Wh7}CT0D=O6<|qo9ic77CF^DlLCQuW5 z5Q8DZNlq$7ggGwgx$ZqZb-GNyBJbsMrc5n#n1Ug!SnPlhjwp=nSsr-iYaZP7BbQEY zc*Q`sI3kKM7>tUTwe8G|AmQfvz>6|mXmO#E*amf5rzs9;pcteZ7R;t^*Fe1V!8qOViBE~r3WF^N~-&~CoAXWCchNE#hee@|77V5+n6ih`c%yR8*~iwS?$H3rfGmVOpyKLu^hzq)1HGqjz4YzUX5M&)f*O_B zP^frhNHJq2Z@0eu`1YS&zgm5XKqROY6=M{viU-=x=%O=vN{ydRgZ!SG#%KQA!YW8R zgv^t=0yjN&<@RPC@Qs=;sP{{5v6K6WCfz&c=!UuYO=UB6{bBq=BjQPcTW){fzq}o2 z)GsZMsp@=o#e~zjHp#ISx}>5d%i=u~XMnd6+%A|7XxHP@oK-iB`g6&@BSG(tb$`m`WGmLLkj93r5>glt zWJHh+FFC&bC;OB59FJO5)_hXLrPeLoJF@Uk)0M`N)VO6Y+EBEaimrI^4To(CuGOHP zj&g zZ(6gzQ64QHUcG;MsPlolDkzwNBB4NQu737;3!FX1{c-AN^@4%S^hz3Dam-FQD>j2J;tZ^-T)p8xy1hZb)3qH}_- zfHr`Z$8`;1qPV1sNj;=W(Opc{y+FT@h$%~bhdi7H9s&q`&XSHn*~!> zd>dSTlojpL47T%&cE3gvJuFR8&`e*cBZw+he}sS35#FL7mgi~@^q#&cJyTyIIh)LG z@*ts5u;dj*1{E2(aB1|?jVpaGVQsTgF$$USt(!JZ{>6ip`T;>^K^DN&bMm(0lMI_j zq691B1@+vq!pm1$dKYjUp&3#6+4y&Uu#stvoEt;?A(3V@Z1d^S+dxM z!KX?nBlH)PK?>x75ZV9V2*7(M?b)uINb;Jjpeyb;k9lsXyv`Cu6!Tsc|HI*P##Qe=aWZLj&WX152YDwUnO;3}P?xo?we*oi|B(K&3{W)- z{DE2EGP9Ru8zNBv5tIs^q-+SQ24BlCgBLE3TzJm>$m^>~wEdCSYDMYMf82581F7Vv z6u;u>c0CaWi3=F3*vJq>9#?P>8C)b9#@3rKRD#jGXiOG4=kgAr)SI@uJY?%yvT(;nzOJuWRXZPv5hLKcB91N{nvFP_@`>NpQZIlZ!rC>&fj|Mw46 z>i2@4a_9o+iV`*o6q5q?vQ8H-RdMz21f)^8u`XIE%NM`e~ zq}t8I%{Jn~i8xG7rR-jTeXU>8z1i={|8zajd-}S1nf`zb&@d@Bj7f`1P!?Q&EeprS znw4kE=~Z2XwQizYhh}dUWXYg)C1@selY|xDWsja>y}XCA{DU6hO4;>fVSfPVF76C| zacJu^0~O5SkA0QSv4=ux2iyl-&Dxr859zBHzf*tUmUsP>8ojCd#(kHUa~G>qPTln2 z*^NYtwdtwZS{D5}c`f~Bid%y+-9m^h1-Pn`RXtJxQz?4WH;~06=gp42cw?jbV(U#= z9;KH^Mf1t(>J?XQI{C>|bjD&AmAqxi5>MG@q^5{SMhJMXkXeikoCE=(6OURoVpKw- zrYvI0UVT}_$C(jhyv;^B;i|Sv(+lO!U7a93UT4$d&*`5vZ(=&TRo<>W(0h7R_3?5O zV*^7wGK57%tBUkrI6MC0AeX9$;8Ag+-LGsu`L`mzbAyQc=vY9!`P$M?EdpCLa?OAd0kEfW_lre855f*CW) z=*~v}?tM$cm(@Cj-J!EXM&&WP2EvsUlj%XfaohRl9SnRob7M;(Zg<`VAgA zzK@Md7wTQz56SsYd+Xj?A@f_T-_zfg`_RC!H4bR^8|(to97;XjQ{PA$`hJEVu0rX zzXR+(E0K05@awGYy5hgV`R4;a4Qx9Nc?b9^@KIo4OvmI0`7M*sEeOS$#f>Yn?b!?C zFFj{=bY z6SpW@%h2-HR{!9RM*pT-yRf;Cg#!ZOMO*DCJ5n!p@40he{+5NPb21`Z9z<9B*w`ND z_p^O^i~F4X)#J7B9yknq7}x~lh;&fyDP6Gn-krC;oSNNgwlJ+_-pn7#CHg4m9|V32 zD4hm9Wv%~w6(AvDg&CQ1peAZI?pPdrRrC!YZ$;_-lYOgKT{AxMWx*_iTM00A zMVeiF2lDh3nk%?P4(cc){!b9#9jEhwG4M~PA8#K3ui^nV^F1aBy7fko%oXXL%;4}~ zR@zwW7M@Y`!MVAxRmHDE7<5L5t;*=8MrGq-sWUcPXkQzV9iL`oWmw;tEy!e6 zkfH=sY>GqyTJTWH@ui&$gD*b49MW2{uGBfzjPl~9c4gm1GwUxLZkIMZY8a5jd&e4; zSMQ!5%4aIg&)z#S_vr`AD~DqW3jsl0cy;F|bYJ#eoa=vBUh{Y=;T%EfW7WNdptf~8 z#VutvUbf$FdD9Nx&sZ@>SZ3JQxy8L*Pv%$gA-zHV_u1D?PABXhRhIuuMpxPtq(IZ= z1ceZ(c+p3TzkO=`Qa$b-xN&Uq?-okQM2@Rl%xaErSWGL$bu2z<6KC6*cU7GJF2@!5 z;3J;3@QADb9k8|)4Sd1@uBP9cJ(Fj4&tdoKYS>s@3X_SFv-fRiR=+E9_QG6zgfQr# znv3rnZI$~2C)KHP^NWU&2VO;O`BQp*)_NNDzxQ1CZ>2PrAL9>gk-TV$`VDr}V>b7v z(Z26LyzhUVNj3>^OqUdR8m8C%N*21WvcUEnT!-LXACKGZC4KLhyvL(8`x9-P0X9;8RwHlKuGDS(D2 zYv*fIZn}LG(n*?mi(A}!F7*ewSg)1y|4ksfOy6nFWp^k@U##h-zBImMyj^*@$M01m zBPfCO(kl31a=zI5!c4jIPYL?KGSe%ckpG_bK>v=;wtvy=U@}k&rI5Vl$=3(iZ5J=B zd)fIj<3I9Hid)n-@L zEPLn(%jq#%ekVo$0=DQK+$o?O=N#HRU^lSG#&kl1E#zxS!Wt@r`|CsdpE)!B76Eh9 z`l&y-zklHnm<2^w+R(CelYl$j2l+`wF8;c(y;9#|`njxBqkqJZ>Sbe%zRT@d8R|kFY<$7VO~1XrJbdL9n~#2^8@Q8-F2O+K9QwK`QT7F+f4@1x;6%&j`LWtcwyj=s1s7iI@goRj6*g?E*Iu(a zlFoM}Z|`C-uj_wnAC%wqPnWvav*_PKy-nX^n`|k7RF%%CAX{=|_YWUF_g5=vH1Zf< z$WK?B|9HiwqaR95b}}MbPRVnFF^Vf%OwGZ%{w&^k`NZZQ9B!2^6&~*DCpKT6tgU|f z`gK!RwroBVA`S3eL9!eJcnidWDW~Lpo4VDl&sZ9H&gg38#pNvA^mVe|iw_Pj{nfRj zlUE8dE%-%G-UvxL3v{w$EciB4dWZbw!z}Kb^n+oI{)#0V2iZH`slMP<5A6JfGk;$w zwhw)J=aKgc9CWlN7ih1{vYMVxsL$eU`XeIW@)-CR^~0t~P>M0@BefUqSsHv(=^Sd7 z51#)&9yJ9nn%z1!{h_;um;Mp-Sd-2|g>pM($p@t3s0BH`5Mlca!LY!F-75o^T{5%& zEvHA7jz& zv|;LF2L~3voa3jUwKzwmc`cvJ%S-?jF5^e@8K$%C^mS8)S_N$VaBXSnWMBQj^CvgI zanowwOO1YQqL%fhuyM8evW=_Nm#V1K)5QvF^E%`)8h!0R!8Y2VOQ;=p0gs=7yN=Y|@|ZPRNI}2l{u23jB#IQ<8B?2J%Rdl7Z^FPI<$l z)q)2G7q34!uyB({PXWsvw0#Z#FK@^V4;_9d*XU0DE>)i4)>F*8NH-vCb&V`vvH94k z-ObvUE}R+r@&0aM|0BFN5tTr`VdI2v#L4~l4=sG=aR1VMoxnBk9a@aGx2oGOp4{-0 z)imCI=DGs5l14jTaB}PaP6IbLU0J>Q=CM=%)CtnLO#CX)4JdhsL;~6)$zSV0|n@=h%dwjdeV*YoGJZ-wGu8^O|_v`PqnhZ`a$I0!hQSyvh8uvRi zM5Guxvwl;ndf`N6^;k^2@*G~APVgbu1N}Qh|A~ubkfWk>t)&zgdh_sU zAv+2k1NWhF=O>=^>j%D>Z+VPk`8dOM!JIr&Te|jHv*Y{MMl@=SXnDL@x#VP}exoIt zidkv#Bv#dV%0O4u^}zoCE{BILLRL`p-(pFs;u$aUn+b*2?oGRb+@h+#VT`%%=>U3% zMY@DipdmZQw}J@VMw*PXh}z@j26MSSxlaW+l-b*-ApyYx@My-j~bSJ{>~ zsV3kWC0Mw7U~cO6f!S+}%D{z-W9P1KmG_lgG$f8b1gD~%c96}_677?q%uga0z^6p?4?c0xJB~cjZ}}Pd1OHR{ku;>Rh;c_(3f+5$+ofT@#zkCB zqb+?|ylXW~AMB^PyjOoSJ0!pApZ1`uY9DYznq`}tohEsnKNM4{D&GIwJcCz{SC4*^ zj#?OmVSlCi;!<3EQM1{6L8Vf;k+tEOPua_EG0R3Ol8{(S99n!qp={m5E$m{kU4O8$ zGGQ>Q9@lI_s-&*;C>xMIn%*P7NOLg#SKK<4q8B}@|X%+O5@CSM`(1!BLAIX%q%vW-_HC(%wnzTqTa{L+RKQ)Yww z{Y7)@Ua)6*_&B~xxw_mW&uC@hFjk8YxR@Mzx&Ux|NZod ze9t~6@;Vz^mT-2a+`4C7vwSH=%BROQ6t^_`_TMwOaI=sUUdd&xL*FJA{WsDq-F*Au z1N_UaSF_MwMo-hIs(AHZbKK;~TVy>A`dN|Wlj=t(M@3$^_Yy9D)(a#s_FY@HYu91Z+2D51Wp84VL+T7@WX_VU$f#`Hj zzyPYKS0PEPn>{c(_veQO7H;kuoyqYFN^7;wY%;;s+4XYG*ZEEoo#wggz30vgR*Rj2 zf6NMF6#7>J-7p#J<|75&Xk#AO(=m$!*}DsU@jl>JSetYIxJI?TPu}6*q<@ga^erz% z-Q!8%7h`8?f(cNfN)m4Y20auz9I;Qe`yPB__*7K&yhgjpSMK~OQ!gzL^lg1qRMu86 zl&=MQPn^-OO*ocEfc`kmya;rA@q4e*a91;1PPuO!)b1B-=;D#F_TEq=4O-<0QaEocf>Dw309Rw(?ptA~2&O@l6 z5OWUVLj5RRH`4nF1@Ew^JQd1^73I6qyyey>JgxnYYORTgAPp(vQyXZ;YnM{@iBW3o zm6*NG#H?o}^hpY-hS)oo|I=%uFWhk7PXRmue;DM5>mvq38IXAe-P0E-?P|-!XK5fr zfD!SGDFBjy2x*Y~3V)8Srmyp)1-jN6L}Yr(Ltj1zvtbI-+YceP@gTxh2y_^qnw19o z!#P1jhyA@#s(P@et33Fj&sB6v5bbfaowX2orwGS&VcT}RP$--SU;}{l0QLr8e@S=P z6R{Ewb}~czk!z4*z>`d}f0tq?a6tfh4Jt9<6=CaU%wmOIM|=(cP5%=tw1@Bl`a?cv z;l|4EtQ*7muBR5hKCm1v7(2j}rfU+LYW0fYqxShKB_5)8mAxwQ4>$4%BlfBc!R{Sm9b{1)KC z6_5)xrmYv4`Ye!oH8AbW`EOkRz58dg=AQxhHGs~ME}#Qj^lY5y2$=btRoXAOP6NyW zM5ae|03`?_OwjT{$YX?ztNL%LGlLbGHk^6lYFLIj;%9{r5aP)BIttE3BnFxFN_lv8 z^9y+3;5q;d%?yCyI8NAg-LnA1;MXcgocW-){SFcC^xYlFq0x9P%fc2TH$*Ywnv?l7jFHg9@gOWbVK zE<_#(r&10{+Xa1l}#+)_#C95Iw6V! zE=Wq)^m4e2qXznO&pk&gSFWrDE(y$UpM$ejtVU=Ut=?}=lTVHe0PRF3<~go|Y(9&J zcWwZxu81{DW}XYbozZUiC6qnz>!e?@2j7Toyd5ia2qmW;loh}shTfgGoLyEivKRmq zaWQR{HY?zu2QO{Hw(B7ju;!R*M!1*0#qSL?Js1Ss4&X`vZ@^rv$Mx8QEARw>w*v%z zYv>q19&Fb*h?rkr(}FbORQ#zf?IOK@JvZk0D>fdc>pej z-(+L+aBE}=3hcpUfILOYkr2$x5DXGb6!v5+XOIzwpfHxatXZg|GTjG4k^qn(7>0?P ze|9r&x#gB|dF8GLHbA{yV5wbN7G2sL;q2W)E! ztg92?ci7oFoQroS2yceL1OC%wJBxaXdGICzje z29tQgwA7hro+*WAB0K7=kILrT{PesBdSotQ9a*(mplDh7g zw{@e0mM-8L@Uj{rqu}LxA?&%xst0N1-{lmMIlP)QE~FKhK}GB#g%}c;$(ylCzgWxk z54CziezY7V58A6ND6Y{qO6smmKZ^R~q{6k{rK zZ~-?J4)pPwYkpe|YCRgVb}^bM1lI&)G^)%x(lC9EPOQPIV0nE297bLj(f6{xJL3pm zRuBOr4#3?Dzjybc0Pt!QVCM+{J0}u}27ucKeg(s4`>B?=BLLcQoHv=K`5k7S!OVx< zyZiUKv0vtJdt?YELNJGYJgWQ%g#Z!l&{|(9gn0Z|#rI6!Nf+P|5kpC&kqJdrG~DFG zV{pB=K^)aum{Uq|tpxAuHS?(mPAUbqFCW%N*Iaa=JU}4a5XD*Fy%Hd>G>xW2d*cVA zQa2#&N+{cdr?%t!$Drv>H5#1*qT>Mkxm+6q(7VH+gD28_pFe;8 zOlG{Pa&c5P<9Ns`-@0|{sfJF4Uh8G{$s2216-5h=d$z^JLU! z8VVuMlx)Jh_E~ddk?5T}cI=oxckbNWu?F%t^H(T>`=tkIM%}t_Ld#f)bzE!2EHe_< zN=HeOrHE9*jh4F2RAC>Y4(PB7!}7^KE^<-XBE=jgi`tjW@|PtjX>X(%iS0wLKW@y=IVg436uI;FL>^<4mN#LJZ7Hy-&A|Fg&-Bx5LAQ+awM#4--g ziEE9RB#H{x3lWoLu^~)FDjoKUAxPz-#3Qio1pq}|bW7$fUA7_}F1wS4Wfa?+rmbzP zYdEM)mRn9NoxN*%;dG^$y^>Sdam%w0t^es?=BkuEBXG^i>-Yr#w_t=gI-y;*Kt=)C zGCxzdGUAyH8d?enmYQ^Lq_mB|Jsu(j19>&LS>-WC#sy|^xvg&&e(0(zFy~*An>+dB zlY56YJGdH`mA{#$IV)c(;MpDPVO%;FQyL;*r6(mwgelSW_zvvczZ<76S&3q?cq07B zL16?gWKzf*_>V&2pwZ$PR>Xrg>-V!;-Qq4>(0O| z9l(K+ddO=672OEnTs$*edBp^HM6o@+?y8>OZ`rFXShi`nycyt@=hxTDgLo38+GpRba0xwL5i8UKbmfpQ@uR={ zPwGYv0BL3}I8hdenCRWOA02D90SqK(HPiHSmnM48jx6?mvm5lY44Lm)dsbfbWndwOTv#R)q!gNY4dK!WuCM0SlU z^mc~qFdT0sUnYA_{{2G}Qkbl3n2beFL^I=!Rhx#NKJjjFjn4%|%75KtS$53L9>Cpz?dK z{^|SBvSOCNS$Wuh>40~~HbgF8fLH(MJ#^P4H)yZq_P`%C^(O$2plSelK!(3Q+)y%` ze<4nQZ3$$W1dIhMdRyK!JzaMW0F#*DYjd{OH+9|vh`j{PY=fExUDyFKRa z&w8cjyCgRl6n*_Xyyj;gq`!Rpe|p_Rh2O!S<8WAl^NV~Vb)i*Clp+R1i-ugVx_j!S zb9?JAB_PazluVjH-iyuMzwHi{o?&>MDMaiIxRs9ypfev6d=J+m*iV6FK8%*Tatnxv#|w1N^Tzc#rF??<-h1z*8FOZpUqEoNm9k(9e%`(r_^Ffb1zpWI zh#uHREY}bvPbHa*xWOC|EJ@hiNQ1Vr?=(I0hGVig^-tu1UsQvJ()&^{la>$(Kt=`Fl!~35$x@eLgi2en*?W*aqQ|*t4F z`J~AJpl1O*x%Fp{J+S=!=WZ}!=EKSNEw>I`|G3xp+bt#~Lufm5fpOAjUjNFcum9sG z0elU9c(`(sbNTBcj%i^Rx;3Wck~2GIy}zjteFXtY-&}_v7Fse?(ek$6H*427T~Zqr z%tJkBFBRxRlV%hCI|F*vU&<<-Y7%B>sE;uZI)xXo+L_?b(S{1glKRVsVUj~q%9#X; z5fNAe5P@~hfDodb**7U$b^jU7v>e)~V-XIstn)PDl63?cu%${Dj8rj!R`)@?sK>t< z3X^?H$JSaGwO~a6ls!lxdjRwuull#A-}>0q@0Ib;FB?C65+At!5wGiK&lyucc{=7@ za%$KqIsuwMo;46Uuo|t!chhSo6?Zav)4dunMCku9O{hjYG9R65GG7NU@l@@T59aHr`ugpF ziQNuA+pk=|&Z7V>j{@jJ{VoOXBN+;XE(9S)=-;f$w^#-ANhv2o3k!~6aWo7Ub%sQo zSX&l_y#00AK8=vqg>~A;)c8a}n?Ze|&03eV;Xj-zAAOKmVR5VH@k(n}^7G9fJgL<2 z!>4H9w;q)yzI1i@lfWC+kWvx2EYyQYj1Q32^oQkMpbB9$dj{}VG)8s>r7fO zyuHcvgAYvGeWM_;-USZkkS@HN-ahFF($Q=5N$jeZfnE*Zig`X7YMclCs|4U6{J84# z@bd!PVNCe3X!XPKaRk5;LQD&X!)JgoorwDLfP#CHQcm8X8w~PLq%fkg!3o7AiMY}# zE+7r1Ro;PCKwe*h*Xds#!FXY+)bCS?fs!)(Q8UUpJkWo2@^uX03zx0A_JsH;ZEtG0 zcu}G2_6^}(*FPxcUiVrod;d9&y_-8O>s`A$1K>tn{rPpL=Gv))48E^tL}deeVx7I3qM^(tu#1I@@Y^&F(puO6C?uIMNIy z6Z|ncmVwUIK^&^hbsr0ej;=-@a3#!RzrNu2%V00U54&V0@W>wK$N|U^QCxo zMum)HFv!2aNxGN_9zyV-C2JKSl2HLfB_paeLN1idfWqr-^5iH7*VqH|yUzvIo zK)>x3*Ou7h3rLFG%=euhu@*NL(;GT?@9obb)DWXred8ad8};G$0l4&mRsWgXRh&_9 zf&HD~!eft4-}?gsl>~$qOhh2rQi!g6?Y`OX7Em)9;KeUQLLSRNKQ_p?vW<(u4*EFH zSZR#C6tP=<`{^h1}J8MLUBlW z?h&p#4or8)P$#``j`LsElBUxEz;i~In{xZ<*X{=MYemR#7Jlx$@bYh8g0>5n0RUp{ z4Pxp0&zT3{Drj7E@4`364!HZXfZnw~mix=I(>i`8H8C-Pn1}#5J)OK{LAv3U7PvWy z*`fFI=1KRC{;m>cMytD-nMNcZU%q>(SWwh&mQ-#?N;#>_^=kPm&c|$QV-p%h!&Hs7 z3PpqmT`Fiz`e``G?O_IX>N4|v|eDBDI)N;0m7>?&7ufyQLEzjyl$W7^HT zOu>Jg`Eec%(1XO(nrl3KXl-nc`%7${^plGkfkyYU=BhOMBn11}Na6-AqCwdv+mgv( zAOb>|G|Yr&G^Z?eFbXfb3}5%w<8$NsmRnExQVPJkf`6I--V5NXsA}>t8oBNC>mGui z+x{s0DMaU@ztBYhSOMSzcyaIE?9Z~#)V(j<8-cas$(94ZpO&p#+FXdtEuSmmnln%C zn)1d+rtIHuz{_9G|LxsMR~FX~1 z^(oifcUXSKaRyoO6ZM2;G$c;=*tur=D;MeL)cT|L;_g^=tyi@v##MpCUtm? zz= zz^_^>0+@#WYD^D)@sPOt+E3$+@B3+KI`|L>TOORbes}Lb{@*7vPwlD-zxA8$nzc_mOky$) z0Fr3dHlzpP6_wfI$0@a)8jf`HRPZy}eh$ASm>qzA z2Y_v(-1BV!55eycoIrn8qzk`$a2NJE>S>%$3H&nOi2D5*)7`kavFGV!U9GRECe6_cmzH*GFz>Xne93*1X)KCMyvGk*(-I>e&jnirO@kd_xcB?65 zb>{{i*18yo^dm5zXJ2&kG&1C@u(S{pq0u}R?*CRlAl6?a$3Ah6a*i8=gSdR&D@B<2 ztU2eNV61y;7ivs*uA)r2!n#jdKb^6gUCeh)aA8j@vui13} z`x;J)x@I|ENOOA|-|~24=iO0+tg|qyw0n|dpcvzTH>yL{G+aW8&w0@(r?hY&6dXc( zep}8`Pkt(ZW$48k~?@?E-y-^#bBC<^(4sSkNV zcL_~XG&rJ}qIF*Aq_#rc!Om!*q|o49fKO+?hmRhq39m3r4f#0L*kN?ZAw_5^F}TMg zKF}R6?46lPE-L^3`ch~~y=$}-%+jtVGzmV0eIDE#}z`6hxE}WrB?64 z3#t+GiV+w+2c!87v$M$s4wPU*+=Y(L$R^+57`m9U3QEJ=_aXjKZXG_Xo}kI!8tV?M z!d2L=EHo7Wk=|C9+A}MaT-0AFLB{k#eEQa;ey#(hN%MY;3EuE(e_Jz%DAi&2;%l3K zj*rZ_81+_S=q*_(xUMT)*M;ra*q+~y|LuDK1_bgQeQf}y!0$z84gs>N#uIe7>mA0o z9XjYPL^%yjj0kei^MvcVrsFt<>$;ZXIPAKvc3oH7wyj;))sEwo4|W_!IgZ0l$<~;y zEwAV_=XQ6$mzf`6_UFx0O&q<3b*IS;hKJ~@I>ujd=3#oeGorUP6(gHsp4s9-8wA9e zI5IC)f5p~D7`FUu~xS1H(e0v+5^-}4xN{RRw& z7^Vg{0<>Upcfne%`B(LdXb zi93Fx?@Bhv7*1_Ep$6zmDHOaCuG#l<*vi44d)8ya&mTr^^Pv$prhe9aR5r(`9~4!Y z?!yJ`H0zqpD!3m~O2JhwI=K%8QGzX9xQ0VT*l-LFp5?-hIABrPIxX~fB!wtf2?l>M zjtz|t0Gnt!hxiHSWNb=D1?}8k-}{HfJ8VjdR3gTPX3z%{sz39G?0G4t!rz%nx7m=b23 zzzqws^)svA1_Q`gUbh2w2_e0W{y6IIm3$t3j6X~gA4oa6l-;Q3vL~g7g{K z=$*{}&HqVP>7xU58l=X?^nmVp+Yi=Fzi|2QPyg3TuFRVC9)+QWi>YKIXM_>40A+f}QwJ8SkK+IAEZ%4D<~Mt-cn9B3bH)w$ zb9g4rgk{CRNr2h~^Xx_4O^d2e=t-U48c*+%;F1GlOkjN7y0?i{EpgKdheCO68GEcE zt2zS!35MVV;B}zeV}#vv_~YuY^gT84Kp)Qg9i8MF7EJvk33_|=_f~7cn!r>oo81M! z)z7W)_U~fDNI6-S@0Ru`3Jh`R_&*ok~|&&-QR=%?{QjuW~D38)t z^(*-CqK)S}xuue0+9;9i9=lLo;2W4sB`b zeRxwGFRsLlw2em!m+}vsA~I?|w(0NCe~)Sze}TV1y_hadghK?kk)h^Cl)38s-3u>^ zJ66q_*qcb-p`f}MuKf!Of^+)`b1b}=El;%GF1{ZwsZA50G*jWm&P% z3jo#txD&v=@Dm#BfhYDnkNf$w+SFVcqXMknWR&N+zkT)Bz5(DY0PXO5we{b-De(H+ z|B0xs0X)ETuW0o^!|%R-Jv#rkWw<@EGMtiwWc+fI98oE1;p#HgV@AGCXQ)r}H}VYY zK%e2+Yo>YKD?3}Rh&kq&N^mm>F))WTbl4SK7x9eNx@_pQ>FK0>5~h`G=^eDCI^;^# z>yplrAST5!q>Tp4lMP|dm=g2McA+W8fGI$d*ze2Jl8=ArgmCkkef8-(_eBdEblBV9 zgt`o)z4$?1<#^~+c?d2c#CZS&0}(9e+1O0`VNeU$NI_Z=gyRaTC8BA;{7mb4D?6rM z8TO2t_23EJx4xz8cLJ2kqv(LXH>!=~;fEil`6nzfIuCXj9cGV7LKv_@hDq9TTpe%A z#HTeD!`|ll-p-=IMMkMqhbCcx=^|Y0{1LxVM*-+O?o}3Qh`H5@wc5<>*XUdZI>S$3 z_-dfd^EgaQvf6a7HU@?nsWz5?Lb(w|Dgb&_4@v?FN&+yn<^kGVSF+iHTh_rn+y;r8O3_y}cf`&* z2`FVvd&~a1>^&WInYASm?amo>eR;`6Nw((z3J_Xh7iom$RKScVt1h9;mWZ~d&+ln` z!_0K@JX6U!8o(DZ*n4)$!GGHy&Th)U%dA1KH%i4qsZ`3?wQHAYn~s@4QbKDf+>&&N zg<-L@*|j3JXgsmIwQWmd&-PwR^bsHH_1V)IRJY3swzOw zz@Je)Y%+xBd6i7E{`5ILFl;s+V3hmEZ4TUqhU)W(h!iqx{sR$BB_ahtRNqhaJ&~XS zfQRAF>@J|c47Pls3jSED14N`MKDuT=P_QZ1xFN@!{E>ddz>k~{@ORQoO{HzoY)@yn z_`>XL-KjJB>Mss!F-H+6*e_182qXny1RXep@0Kw$6M@L*V<@QeD?euq79bAF<47SI6sg8*1z&uEfbG!Rpr!Bj^~hl^72 zmZqL>u4_7Umj~}q3JdM6^np=nb0XrkYu9>xeSIn%3A<*Cp*@en363CRIDqGpM?wmN zOi%0h3EhpSzSzJU4n^!k8V0uj%EAfi30|j9rxiSIpa+CDPk`w@=;2hG?Mf-=z-O&8 z-A6^F4_T&K*6uWZ);$mhe)pFh0V7`de8aNo(u#-A1852nDP|Vc8l81Op%Fkr6azQp z7XhhQW3E?46`F()DwqRX#k%{yI-pGTm<0V#=o9Kp-cVeCdmR!@na#=6zUPyj4=vA3 zUDBG5og6Efr$v-GhrwYYm>Mty`<-unlUyJGF9}V--~FFSCQ`(%V|eM9V@*Z5+aZI3 z`th=BCk#zV_#Itg!W!4TxKj0OZt3~z-&*$nNkJW~gHgDPUZuuzj#E!Pm8&*>_q+SP zl0DIVb4)tUbVHkQvILiuBS^p!B%+J@noo0#&L=ab(h5a4i=_8${BhV(&&DWroS}X= z0qWe}ng^0`?1#064W|uy*sjY%U-zJFJR0*=`bPnNHB`;_obj(0OJPcVaT_`C)EFhT4^AzBEkPiF7NKc{27MPxEIJ9A7L-(Hy7A?!Vo6ne+ZoDw& zn2QBdz0@L3V|nmcoW*aUUc57RA`Yc2@;V=Hv9~|n(sgH@C+cI$Y>X+Zu{~9HQk@-I98qRl$dgmT z+Nf91ZlIIckvdg0-2Hu4Y196?%oCZgeIRApovyG`IhciJwAfv^N8Lm>9F@YA$LM69 z#lKb$H|^_rmD9GV!46OHgcblSX11p05-048XZH|vl;P!jeR6AjKtC!d4@js%WLyAr zGN{^|9dSWd$T+6z+}CQe`KV|@5}>l-5LDjPYIN2$eeuUaQkFl$nn8jp2{RaBj@;jy zJVtM-fN0Hd8gRhBAE7%KxPvzW`lI|gwG(eD#jqo-jD4M5Mzg^X#+GR6Zwh1@Aj^ek z86crS#E@)&Jq1rGkO#19A>@=$a7{?pgr~Z(PXBa-VUX3**w{!tJv~A5snN>@tmD;~ zqaT~LXYYA?=JrXJQ#C6Kg2GY9oE1^Bp(v3ecxD?+dM|&D{)fKK69V+AMK>l8kxz#D zxnS%ou7M#b0)eC)=(`RpmSySwE2vGnp(A76hbJnz-|VQqm+H*80j4{RZXc{FCn(1V zxi$gl?^2^5CHVn;oq?}ckJ+-{!e@}cKOus>v;?!M1dk5DB|s4)!GPvo^kORJa1Wkg zg~j|ohZ*BM8hP-+2dOgkcMQ^v3%Q65I)sq!NfdUrW)e%K6b7>n0gO4B@_mgjGnD^s=|Nn(VpwI>a;ZUULfMF1kDL@vO zt&k_{HH0AnApu%~wRrh`blp#}l{H{ZCRt#*4*=ze3)*oU?*Gjy^+$s&jtK=v5c%>O zLunq8j2qxM&={UnRj#|JZb&sS#5O7CqaT-{<%(ynCB?!Bv@EgKL?raDPyN!6jU;EG z9uBg^(1O4M0uq`-AXtC^u{HrnKtjUCENmXKmG;p9`Y6I-&_kN;WsP2YuF=HOnJTTG z`v)fTa6=sUFtzq$h%%5605g@x8xP#HnDwCA`_Y>2l~z(!Y&)0Ry&u=+FNs{b_Nxm7 zxgP*T5u+XNW@b?d5Yo*b8QP;?^^zY>0-rJuaV+;`@;-+sOIWgc9P9p+66bf-! zgVzp5=fj29Cgwh>dbO4r_FAy>@SDvr52rk-1-hy*hmVLCIWA)q0q;UEeU_M!$Qcj} zWa0{%^lMK1)cI#W|LuD+@arJ57)9&q%hz6aBY>-B91J7m2pnv+k&7r~b{u+S&DZ~M zY4A?d@aO#P1mJGNa%x3ZGK3ZPs7^pcL2PMggFs3N?J!sg7+N91hmgWhgE7X~X|RTV zI+ABt&Y0;>f7KdVDTv^bs8*xXXnBM(V1ug8ni7dGZA#OHPJ*2VQP4hCOh29;0Uu0 z2_{2;gl*_F0d5Jlu1AU$_8(@`8m~=04xDqpV$#g4t8?A8)=*maH;xzwKr2lgfZ7fe zM~RH9Zpf+!neE)K(Z^x$PylqU8nQS5=f}Z*l;t<8zvvP3+nLa{aX}V^m_pMb3sbv8 zh_=?vIq~D?T?ODO0B-;=btpVt_RMwS^0n7}9>D*bc`%IWdm`v*b+C129^LD9yMO(_ zO<@4@0JH_x!DH}iE9^7*OQIRQQb2?R5UY2>(*Z;QvWQ6v4bc(F?I)09K)NZI`YJ5r zaRGfKpLLwdg)7aSYl=Xs$hiK+EXIhE8Xx@#bKOTI7HvNKS zivheDz$@Snf2h2hcRXT8c1e0WtyC(R%f(ktP$%Iq};_ZQdG@$lM9D+bil ztoh#y5rrKK@{o$KY-0kFBu@V11yS-_kzWd6InZAQ=Spz}fFHH?hG_1NnCfkI^``k* zq<43FfBn?WLKWRI$oIo9gZ_2!cYP&aK}pP#A;dxwB0jYgpBeFt*_t>a7*c?cx161T z$azr3UUYd&VCuv34P)n?#%;aV^w6uyjH?MpaZQwLv_&nIVG=X|-$Pm)TuTIiM{mIl zL0JS*Fg;|rka^6uM9oMh=Bny7J|ZjXxQtV7J>%c_w$;~O3&x*2nrw7TE3uUY&)j1n z+>*fA-+yNUz!?DE8kph6FNAQ{T z1A!L*MWEF+_(htIm7)eN1n3iI zy8HaJ9$@Zj?l;}5&O5$q4AMr2NbZ?1l(6pKlJvkl_i_sC_%yn%Ou-3Q_e#ktY7%CS zBmSi%=h(Xvj6FMN6e%0BRnvCjWUs)~)8~t&A3L`d!0P~9@P<48=^X%WN#+c-Y-6G; zTjzS47UVEsVMtiapIuSrb zKo~+3z+8B-u4faVb1ukMF!Xom%i{-nWnOm;_{QICBCy+aAQ(u<4ItyjY`POwyBR!? z)SFOXi2e#WX3aH)E&XKN*j)&v6jz2(aDSO<8Ry4+^p}gA`$~$HzCuZMUtD2Jn_PF= zTFuf17G8F`QNO%x&Vnn?ct>|yp1v+j{`_e(utW!$x|LjaQ)1d{mO#YJa^47y7Ucu4YqW9naglLV*=~V# zLW9aw$GIU^Sa+_bEU^XqinjrZOxYjgI~*x9|M?` zG@^Q8Vpf5@TE@M6%yg2-#7j8ynzzEq73cJA={yStJ@vN_{_jXuM@^O~2Oy!LQ%@%( zWwe?P7;1<^If;h)x5!a}vr^PjRkg-P>@FRb2{Ykk{3glyH)Wb}QFsC6BkM|(NNN)c z<0MN=E%)WUo`kB~x74V&3pPLaiJRTRuHN!E-W>c9%|8XO7Jkm)X<0f%hMO*>!=C3+4ePEIR`j)DdMbgPksfTRPlZCOV_)}5ZU(?lF#Kdn zuCd(5!Get!?*SLb12f~e+H@bAkIofCMpu{JmM5ei*XS>&+;Qq>)un5%{RaY`?^-Np zwRX!)WKB*`cgZmKx+ofC^qmoHDiwGM=)0hvilq`B`s^>!*AMbS0PdRrJc0p(NZ!bQ6;Z@Y2I2(WG9zEV zd}=0sE{J1bgh;~>Al}&A^SDV!bJ~uw))4_GQ$+96d&)a? z3BYrKPyQG5cL4?fyq*tH2+zqPbl8BbkGtl~6S|u&Vd8{ljsh?VLi9umox2j5E)8Oh z5`ZK&V(M7d>Nt$mvH6R{%(_r0gmSrD)Nvehkl8-up#cK4r|STm2H;fyBEwzRfYuX7 zx5G^JUZc4tdT^vEuodbv_`IKdQ{m$NE;_*;%ks9TuWcgchlR%UMO&hOOormy%!bGT zy*pRLh7>1eHQ}u9yaQy2av1Htz&B3~w0cW;mL!@)7*UJCiBr1UUTtXE%HRkQnFKN! z+Fak#)d!%Nz|8_w7e*o6hJ2Pfkq#jo9HT+oZxV^3zt2(+CMz@;Ian~%0I~e zQ&l?eFyJToTf;NewWj+pqmw75Ib@|JB|&Kg#TtrzYecbvVpUb9I(i1Joa^4-&wbGS z90&NzD3`CjF3C)f5M$2b9r4@hGUmRmuTZb>;Sg>$+?B|W0=B{T> zO24}l)-50bamg&h{mweLw{1q^qbqUpXD$?(j#P7M?Vj`Cm!9^*AH7vE2oK>ucs^dI z4Uo$ad0Tp0V{T}HVqIbak?*dW#3H<`yY-aTVl495)ctuPoh48aQ0_nSjrzOvK|OAu zS0~JjiliGX{{rAi;p#|wSJ%0ADt{_7k9vbqwueps`_QNWQkkfV+V*Ny*Eq3kH9(tGA^2d?5{SnzH<|jmo24LpSj4o_lh6P z18_0?l-K*=j~inE*i5(ZWqg{-qP}Ru>wT>4;2mdnOtl+I(Q`~sOjpF32~mJUU^3gX ziDhT=^umK}d%FyXK0+ja03Gfd`8xgsT{95_9H`$2Y?Rz6@)-COOM=qh4@BH(+%(`#f z6*Zb7)UGl)YW&a2ngkF_}!~3;k66#O8rwj zWD~5EBiMPMegDrbR)2a$$Bgr*=ISmb=4qP90K+7}n4YOyeWq;N`^1!kogPFgiH1@m zR;fQ=0)T#mQUq`ZfK9>ojs;!i0)XupVm^8;sAv%8hqpQ=M9CN6=PK6^c&6pqY7C$! z*v-9B0KKxI*0?1>>ELk}{YV_ikJ1u6j|hH&SK<~5fv^^B`~aT7;l>B9d3 zcuPy4^{Y8sBloXgoPKLIsn6Jb?+d+azI10Cfb@Eb`mrzG)_2}du1X}|yeOo0WS{B2 z`S}y9naSkr*RP5e{U(cXZcm;QiPRaD4&0L=mzq1-wgm?(U3NNzG!3YcN^yQU6^j<3-|r) z#h$0W_?u{z6_-hG>bNhxy>oBl3GJUresIN{+*kg#b?-rFxJ##U?_y+!k`ZK-b2wO>2YDD_eGRMeh>tF{P@1cfwEl_bMj%L-` z5J1lWcsB68?yEZPho95@7XXh2FV!32Ts0}M{TjWdO!YX($NZL-(gpY!WwBjIEHI`6 zMhNXj6AT$cuULdxWO4JL=jug!zY6e&>T<>}mu{^4<;Df+vr<#|JzdZ3PCt3=?O|pv zyPEmiAmU=}{(T3MokZS)U)A!uQ#I_8Yq7y^bIiZy^vvmsy9PLBMoQXL@t_^V{ zt9!D&N?>qi+z_VwXi>srd>n4TL6oWvyXqKmqpBj~bcI;2;GBmG7ao^k7r4A2*1w!CB6hQy5<=k~2mwdhau zZSBlG^#6V?Ro0CLE6oP*H2gH}#{d*GiBAF86+Fc>WSzQ;l^nX5aezQY5@05%l% z3Gm-&%s@X%Ll%#kRI~1UjCMP(nfD$P#RRRMt2O#@^L-R@Ew7`cxS8gnLz>uc#9$h6 zScVNPo4KAEWu3@cSsjPwtJ46z6@s|^-K$<1nv;BbICcJ87${ALxG z0$6Z3H`>EoorCKLs2l;Q?R9-ymC&|eBEdvp5;4bGHpPk5TTqrjUIZiGj|}KM7M=Lg z0b{U6uTkLx$0*Qb-q^UddaeJ;xj(#i9KoZM14v;X!Xkrd(u8RUn5G9U4HzPqFYy6W zIK43V8@M0c)XkSZeJx$S_S(w<{LoPJ;EEUPKDTRHw(ZbV^{rBG*1PxZKP<7I_(Fk| z_9FaBw0q#UeXhu@r+(=f09R8;HZJ(&tDCKb4I8)L`c#3W#A*L}i3rcEZvb!}fHwkY zN6`7TTGnB|w$R{d=psX8Y^hRv>eBl}f3q=2revKPZqTqz3!tlU+xSg)n)D_k*ZAnw z*7xDA+b6ep()l7>lMYu^rpkjf`f(XXTKUgZ#7;RKNofG437CwM8AHghib7D_(}beV z!qkWG{c`%{835f307~*nYnS!?rK8>ZwVSt%2S0Ih&MP_%0d8CXI|35+_wb`CgK?vc zZv%KLHoNJxQ@(P^>P7E4D+Feku@Dwre!2m_wey<*yaqtS!1rq6Aod}o8RRN>MFM3v zH}>ujRdZR1$!sh{W-^qS1IynIVH}Ley4$urEDRO%#5sz%&Ka7$@}|dRc7Rk$Qw8Ach7!K zXfrbpz&7!*GaqRH$#6LQl&Lx9wfCdT8Cwu5Hh)eecM&!4Kq<+3DN=_@?Gi@go6T0NWz<96Z@(-l9G}gHK~X zw*)xPKsIAo!;)BPOa%_0H5;Bq(De@JGy~J=75J27ay->82k>ELZu2Bb2!k+*nJ1Uu zg<=KEvT(r%KA^2xx30@D^!G-ivD0JGsAcE|3qkB3`bm1p2IFKmE!vJrRD!5NnHKhX zkTV08Woc5W5^FlMf+a1y_10Sv0CN~T2aHcKGltShubvC0Wnv_g#@E034gKri{6;T; zUNGLz1q%Zsoy!EG{w~K&6$hvyj+Z*bXk|I-B<}Y|GIuhl<|=JE7yKO4eVVdR-EBh-w(X zX4q!6PO+goXFrBJV^c7Oc zOGeUZWX)`0vAESvm>B~@doYq20nh3kM#0CJ{@wOckI5{^KSaQZ06 zsLdGIJBWdyJ&2+g0Atmbb@=1U&%)63f(Y-HQzEwSfkzP=3i;v4sc+|%tr<`(!H(l{ zi6f62x2_lvZZ3K|67H3?D`B?V*0`;^ci_LC`y(c`b=nrx0ykw})1Fr+Ev*n}jU_N^ z>S3{tMB5D;Hf(rp=FFLYbQY1qAySlaCZdq&A`_ODkSf%wVo@+f3^pjNM$%afYB?k* zhvTc29#XLF-48g#$8t36n;qb8L;wdUFM|x*mt?2I(Yf{7^A1Ng;s2nq%?JBCq_ zEp?WN-IkC!h7ybn%|HmxmIIxc-zk;)?56Eo@X&LQVg2qcu#^NB7PnnNC2QreVb^9H zLDQkd4ZJYC2Alsp2u*0k5K7^Iv@BVIV(HZRCZ~>Au_l>YF1bMU3*}FoK5m@4hx)_W z0POGWFjoM``M*nP4sjQdtUf`>LgTS)c9TJd>WN+H>n!EB8X>21ZTq21WH_o+fj zsFENOuzjwZRvK<@x*|0uO%ycaZaG9Mhz|@F1PDTr8!y(1D_m6*HirU$1t5=5Xq(y# zXaf4V)9{3~7LaQIWp8jWxlo^tEmg3)v&o303FmG*5r22uxk5^LIc$%_5obYJ2VB3$5m!P&@$ znTPEmS&#M!1_;s?`9#Fh!nzVAio3nh>^2>OCBSoh)CD?#V@)ehFRXe6f9lwPmh+~U zj^80~VGxeQd}vVviP@83v_z3F2>@q62oSpz*F)LKqZA`grC(141UDdsG%5z9xYu#@ ziv-w3OWgNVblM@H&8aC)8ez^qp5pv$2?;IXuctW2B3-S}481@dy?x1Z5AHrw5EORWQD>ZWkiMK7?`QeinZ;)?!6X7 z?hI_E=lOgBJBRCj^-QaBQR+r=8%rHv>hgN#4!(_QTHLs>u6e_`A;H35eO{= z(;!fI{=lRo%9P4-cYI_c15(1`4$NdfpogSX*qa)Lm=%SUGqL5NR}nG75F`N0X17_| zl}lXH-xamqn#=bq_OQPMhJ;{( zrfD`96&F&ka3KnvprnPp=^+fN5o9yj!lNn_RAz?YVpdpEKqwT(l-3R;v=}0h2sBND zM#5pSsZ_>bKnMZN6^#lM+1Ym)&~>9S6D1d|7Mc(c4v@JFt1kQPayOY=2I)*1!y`%L z%seD3CzeRTWSe8OMFzV(vn4HT*u4eD-yMeb!+Vgo@{m#?nM_V{%s4MOqh9B*h}OXi z^awWLs{m3^h#)ErLqJ7{^cXQ|hRIrpjh$KItU`e|r+&DcWIb3_T1`JRxkH`v zynQ5ba!5Cm1l<&fsORxkCD8302Sp9F%;eFvM&NyCoQ1Y{3p7mwkquHI1T>)`9*sfQ zbc92pGPM%hHN(B^ExBrD8(`!~yiP*_!|n$N_mZYl7pCRH0HU-h;qs>Gg!rO1Pa;Lm7dUvUL({C!MgA zMBcOk>n4aS%}d925=t<#xg7rR=g09Jc6xLJ3i*6K0pL{Um-aZOpo|0dgOjQg_&L`2 zXyjBB?aI`YikYF1V2+TYuugg;Zi+T5q_R0!<}{opfm_G)lc)1uO5p3%jt+e@dO|UX zm;tkmAX`nC5n^31$xH;sh{UAiAU37rI5Yb}{EfAi2j%$~QU4b?fUajS)2kT5E%>Dt zg$i3xEehy3exUng!_wm3-%W*b>xV+wy%vP2V?Z5;9r%Sm(7mi6VMb3c&OH7!bahO& zsX7%6xh~Z~nYDVnjBE^sghbZLL1ztug)gApbW`Pk4~N4Lnkb>PUd_L|0l6;#FijKb zblTAc6h&9lG)FZlTGr?UQA%0ifFp$kfS|DkX~_z!1Q8YP%^jm*7=?bq5e?j&@!4z^ zmSrIpi(zutWF(?-kn2t7=s%QFI_zqlGhs_C35T0A4`%j#9wO*Kk0Rt%Qr9!BnXnE) z5lx7gk_t11+Kw3Nk|P3oUPn@Xng4~qPTy=ucX0tfExNEmCme2s5Q+&<8^B$0Y0Nlr zSMOQVh7<4ASc?osGB2;`7)w?*wA~8Y-d>30G_+@vFswz0$vymI)q)#wD_Vty zaL9yc2W0ngdnccI%#N-PmkG@LT<_Lj0!R@!zXw9yitAxVO_u__QuHSQU1->`Z9Bg3 zg)bl;kAsMi%jIBM76t|euw%!LQS=~;d_F&_mziZ*mERK}bOE6Yum)&`fR(mjrcK}9 z@GFp@>pFxGl^%UQV{wlurF_R*zLEF=xt{M^r?*4s1S@MHH=IK*l^u1Clu{rf=(_I7 z1yH)Bnx+ZUG;zr#m*6X3{c1^8nnIyRduNWq&I!=sn0YiDCb!$Uqy^4y$3zm0!!S5 zzv?ke4TTYnhQX~0YLcP!-YFyT1;_60{y<1-Q;8_b1Oo~h+0TF#0d2YPu_tbwa`Z{) z&F&55)^2GVdS+`&@^zDVn87(6LWZOkIebsYJ7*5HUu;ONhsr!zO`$T69=87H47Ec* z8#a*6Z>drrT`!kEeLk0S=IqOH7yplC^)eVp?nnZH(0zCh8PO0Wx?0dawH<4oS*>z| z*&x^PR$--4##?-xHSl3n|?MF%D*YWJAqVsGd7$5NsC5HJVBMKx#+Ft+6>(g%)AE#()m2%m~4if zKGjICh0(o;l&c_0ZX1RX4{1mL&Cye1lUgE1MAzq>c{tWQy?XP?2VdRoPd6bPiq!(! zZ#V%U{ONzcyn0i-Qk(%iK7p3mL2&IiEmXVbZtLFbh!yI-J6@(VA=?(Ki# zCr;@);U7*q-pWgBWOr)#p>O`b=ap2WnYLUI#+-ZT0MH8CVMA2eP|eQH&Z})kL;wIF z07*naR1Ri-AA7cDSG=)(7fLq1Lk8#%(D&7q{C#Ob(5uV4?a$yjd@@&iIMDEpoWt}vIFofutV`y!uIRUIt$u#z~BO7*y*oEp;R1zk^%ts ztl5pBccen+eE$5i!Yz?GLQv?;#qSAchO>YE+F7?eVQtvrSFR!C0K5}G%k`VS{q@A; zL^hu>pPYK!^molWXMXDX!@qn3N~@!@=YB>2?1k;7nDtRu1@AC^OoJ}k40lJ?T7tNnP|D8&y_mQVubOGoSn_*|aZ;#+SH4jhb zXTV7BiR5;+<0J~ z_A_=&J#Oky%V`NSe1t>UK@1W^fmYR?Xy&cQXKcE6Ae?<3ptXRteFW*$FpkN;Oz#^N z=%s~)xwKfJLxuMOcoVjV&^iYUE{p0WTre>K9#^mY`gy$T=SSarv~kusOnfE)J<=LI z=X>j}%P!LvJyZoGg8+71^Oyg1Y}?fKlmGDThvxmiuil^h^iMD8KJlWHU;XU8i?9CC zKijz}%ho{gNYh~vr$LQ)!ZO^Hd9Mxyh2 zQVAs#69bY6q_K#SLX5!?f`|}Ngjq!-DMNrXVhF(mp`bKqQd4B+HEYZ3T{|CG*E;w- zL+xfD^K8$SXQ^Aer#Bm)wP1VK2Pb7?CumAc5{hC~7lNkJ8N=N5eD~J>TH7}CyaI2K zz$ONE5%l31n2}wFZ#PzCk&0SrH~muzwheZd2k7OLdO}P!E22N+8**npMh0&YEG`ES zBhX=^u>TCe>OFd@0wZ(m1;_39?U#O?n{(P+3qby;bC1e7n^!eG1IBVMH(C7#7=0id z4nmq0ez43~^k&`q3V%_@7pR?`ohe5L=ZRI|LgI=;RYrH)Dq5nB=Ig8@(UKWKc+cvN z!IusjYPF^%Th3M*LJBIv;IJfwK+sJkh0sV749%&OqC-Fz5C&N31n2@nBM=c2Yb-2H zLJEj%UYA>6?%DO5P4VGZazbtcG#b^X#F&Mr5e7RT`6GrrzC? zYMIxP3(e4&VwPYl70U0~+&Z)_Y2*h-G`U-nHNc=<3i@sXxuM<2W_BW+{{wxfX67Qj zjz#B3?ezdA` zt0!ulH=4I=AlyN~IRvD^xK9v2Iwl2W07as%>sG=4UU4CnmSWW`_~5krp{tJ}ns3Dj zYlvWN+uoN`k?h{NdnTU~w)7*F0NGInYyb!`*kF)BfDStnK?7I_5D5q+7*b~;g(N9J znVs>Gziw>X`}F4c$SMhICqRRMo;1OkAq<%#uw)zB$iUtaLSi@s5mH)yYeqA}6r#ww zcJ7DMC-$OzC#9{DstnOz8*F~sB_=wpF!s25ibm!v2wsKA43swcb& zp%GXmh!7{HP_6#A%=iZ1C|7)#KtBWMHh{h_pnYkg#`iV8orDtK0`N%ySq49Lm*~3j zFZ2%+K6gYUS#b$p^(yH{+7;3pAQ~xzgiA(nd$N?aq&&yCGToAd)qjlGsRhCQI zPw4aNpLv8v^ufp4NXz|5y?q&J95U%h-FOHS;Q413_Cm{mlIZM zZ#cVSb1c1SAe`NygHr&KfJg~&+5j?p!FdyT%Y?3;!zXwhwN1p=(ogpZzNE zo%PB7kAm@I0IR|1wK)6RTlj|ym(V3uStZ4MERpSTrWhApMxQeG)x=0CWx-QWDZq90 zwLKjPm2&za-TsaG)B@hdVO%5QIN4NaNfX47A;hjVZ3CMCL>L?r&~=8T2@o+z0ZI}? z-U8x529$!q zS`*|x?Ir5vmjDKSrVisvt-r-;!c_;va}3b2#N?Qcy#kRA*Xh;5+9Y4n_J6>I?4BZn{q2$NXh*`@kotB-%M z14@l3ruO}HZlsjb4F@hJ#jssqJ%%}I0^YxEq&xTrxI_LU|Gjz&(*T@G0=p;=!rwX` z!v-v*K-h?3X1u@ziC@ug4v3&2y&A{9KaQRi2xL=q5Cx{_3Q7^EkUgfh)(<8ae*yT0 zKCAzWVD&)&9YXM{`!moB$zvUg?xxQo{m{0f*VFE$Usq_W{(KPJSE&y*mD0Waj&-+X zia3A-ad6h%br_M5ffo5Pu}BG~Pl6Bu;RP^0OH3bJN|$ZjkDsMgVn2tQ?@z&#?9;oC zA2PY)n(Y8%-R&$CoPZ|_Y`_gdfdNrR<%uQwrQ2?jcic$e_W%*K|51bzR@q-QE4hf&~jy6S`vpI_=*ap8e2u6dBau zQn&p_9IOvg2w@c-n0MzV24#JpDPAK6|uBm>gIwg<4D;ttm>czI@`_8X{Q)kM8~v+Cu27g1_~m2Wu80s z#0yfz_UKOps&j#k7?Crb-DY$bY?cgVT0YmQD0L5W=MZ{c-+_0|JrN;I{|tb8Vb?kv zK{1rL*{V`>BHw4INWmfth=7pYCu1SlWsIuo4OTz#X5xtV%p(A>@|F%egtI0FGJ_-G zSbH3UTLX|%ylp`=aSjf z>L=dZ_0(-oY=&Ke_YqV^+4;7?!NK94o}TT~yLzXemp%pSpWFmXN+&}sO5|!gmt2v} zE|H;KHr%NoWA7iHLKJ1;4_qi2rAp-Y;y;Er!&M=JEsDAXo9p6|8t}{vOG*rk3_`rC z2eU3%0L!V$lgs6z0M0`(eYG1RJz)`)2LsTH`IL+G6ktFH6C)H2p>t|yWcq>`y_;Uy zr0sZl{47j;=Iv8J^d}=uvtpfb>Y3jg_}sRs?UUQ4wok6-_oknC*xW`0gq|aNdV7xS z>8|3dftN2`_pZA(lNuPeDiZ@qTm$&kGZPOaODUu~JyJ?vr z04F)T$Q}T@VTVy$O-R?E=&pQMP^3U0VuitiVMGlvX--%B2^XDo+WNn)U-!gqe;CQ{ z8M_-dY2s(hm~C$^RFd+gg59Hiy;t+tl>-elp$nY)Pw&*WzqYOY(eFL{&j4NkaCa?% zcVJ+EFSy`>XRf{W+E4cO_FfqdhZp2>xmIS@!{IPhDA|1E?NBIG!lIWe#k`8UP$=Yk zt@2}`P^g@90Yc98ECA95x31}hy!{M@rfGa z(VSu!*!kji**RsBG@^zc>r6~OXUTg%`ghCE`{n05m+u}EHJ2-nWX5{|pu=jz$%6|Z zSQJ>x!tSoTRKqEfsJOsd!l6zjx!T>r2A-7A?DN@u?=6VneR;26{O>88;3=NqcYevZ z3lvP*ZmIB$+r6J|fZwBoG{UK$KAoTFd!$WT@}B?24H>XJKxz1;1AB{V*s?H zMz-H^(ys(+q3ID=ITI=+?Gh4I+SzBHjVrFaLU5&s1E&^27;wBKi|MPIUVlMk^lI&m z-@i88HMeW8W{8NU>yxzB@Zy`)ihHgSm#rEDy`1enl_OJg(Q3977JfMZ{eW10tX7}V z`d0&d@v|uWcaM?JIm(F|vya*3lI)$yDbVPACf9_doV-s?p#=;9IE8^0LL?DoBVs_N zEo2nVn5X`IzD{EpzjBqNKWLEx! z#xM+nnPc$F&(8%FqUNmOCddP5-OC)Ixlpvw%aT2L+v6LipLE#fp835;5hz5ArG2XZ zo@HXulMNDqVm1UtB~;l3P&r#Dr9>{5vz19@l)2glQH^3(rQ!iMmC-kb(qnEZDz~tN zucJws>BBjv-XsyGqk&!pJF#RMz%&#qvy=mp0s@!n>|1ElPMQ&!a%69erQ&?XRN0}l z+__^Yo7^!xs%AG5iFC5!`6VKTheK*`!)j9WAnoo;?^-$I_`_CCd&l%oFen1X6@9XQ zt{~&CCE~NP@nMuHe>`AUN+Fp{;@M}P#hNv1O3EDhfu;D+`Ct6y+2?=#m%TD0*$3nm*PT0eZk`o?qU4#BvhK}RH_$z$zKb(YzB^}fQxaDt zuGo5${Qh+W?Oy>th8X9QK{IdRI~FaWONSZ-dO17%!V53pvBw?*5uvNA3ul~h1|pG2 zO=VgwmfZ`mT79Z1*hc%#@B3^vi#OkV6FYbA#F{m0008sm%`4p$lnr(o8%OGb-GZ&| z5~%d?Z&XGf)iv&tdln^*IPa*B>xMpyp|Y%y%OiX(?mfn=QE3y>!llZkAVRm+!opSNuSD_5fhkh2v9a z<|UK_zzJ|pgXE+FjYd6FsT7`m`e^{b@y8#JGtWFTkQ`kN$c-rU>Q&&4)<2O*VA7;X zShZ>uUVr^{tX;bnQ>RWvJRUFJ`}j$mE_bX)dl?{hzu}i8I+Xy+`ZRL zzjl>~Xm$U7B9X|YMp6~TMzI1lS@(%$-OJljx@_-FncJ37*ti+s3jrLbh+im%ow#DV zfaVYt+oEEWdN%v8zRx`K3{2BRPfrit{qA>Hwf~OBUVDL7zM=TNMw8{s<>_kUt|mvi z$L7wRi|yODV_;wat5&VT2`8LT@|zQc$O%Kn&D=i)3QGVSuYe2zDQM!)Q_=nNkH$V? z0f5TNx_@5?!3C$AvhAyh^ZJ{x`9v_kBr$%&Gq8*Fz(*i_-5Nz6y0rK5R2u_eCrp$ zp&v6a3yNDEIa62Qm?Qtk+}|T`D+qI$>0%e@-q1zMvI_OnW3gCO@K%%0gDBP-0eg`1 zgIqrx4m&wC>^kzHP{4&iEdLEqM=>Kugd~`M1)=}wN?JHBAyDOWSi(&; zfj&l{mnh}xo6MzjB?EZHdDUz;$^O41;9_^DuBH%k0TD!#-Ux7OQRtw3YKalm+(o?< zYJaCxH*mkum_E-ezW_TqX9kRo3RrrTcG)ZA{d=y*U~#^hKp%@T&ZFBXwW3V$!t**+ z`+~EefbmH)R4)~+c1{p5)?(*_XyL2r3`#bL{dfW2%y%5cif;q>9ES>w5OAy1V&7R# zpPrCll4>?{Zra!O3F|)Yp@2cz<$3@e1e}dJ!f=g^sg}a9s_5YxHU9RtTev^OiY{Zt zH=<~!dx?S1EYlXfJW;<}h&3pOc$1=!BhafXuf&X2TK?#@v)T{q=+Sj;%`)w>4dX-G zDG*p|QRI4o}x{C;C7{O zFTh7Tt0E1cPXmADO6{@fcwqUbC(rKsoRf1Ve6#HT z%2I974P%$Z)Tp73^#H4u{9KRQYf$cBG?{xe8Nd8I=v2r_(=x49yX-eh0HOtYSby&A z;8zJ0c4Tn|@FKt;CZTV-k`_+*SlAOK=w&6FcJv8m-B0?|sgrw;>Ah@d=kNvBO}*yP zKGlCdGk()2`{y*m$}@Oo3G2YYlv%aRS+%HkHIUcR)(7P_s%edD%I5$W3UGW&NDz!@ z2(Y1_cpKM<1h9mJ{NYl%Jio7gl$pslvaOjzreUBLJ=C1AeF7EOX}9$rGqs(WlWQJ- z<0TOhVwqUBA3A>d_x9d$w`S-InXy3tOB&%Sndu}DzTy=d#?#(i%M3S~CtLYBL{t^*wKVag zeXh8kXMXajJpcZ>-%@%wz3cAJ{p=n91Bcq;^wn!9Zi?t*W!*=~!^1-x2eU6f@Z#mi zf8@lkk)TBk3^4Ntm*|bzPj8a_7LB%h`#kho>~s*I)uPsZV60U|q#o{LG!1<-SfjML zT%I@Y9HR;JMw&o*R(JMagaGj4i|%;y*`GXpdOnk%526KE>Eq)hQAh|_MWHpC9epeS zt49-GOYW~F2GmmMmAiW$@*sCgH~CWZrjR}%%D9p^!MhjUmA!l6U1^MG4sAwNmfG{+ z$IZmmsAt=FdfWM)Bbo_Qs&PA|8+3DS#tG{@jj-)*D+qB2- z{}kOdKT6CW0oam5L5QuHxU z^g?rO+q93<;Fl}os!_p4fmN^k98|`xS2JIe(l=Ldbxy~-2Ab2<5Je{s(o5d#D;CKu zXiyCZL8$gvOkIAPNiEJ{ygc&C?dVO7vfV7pqVj~9Rjdt0Hy^20d*5NCbioalxB_o66Ia8+OfVQxVx-w2Up0K+Q!IRM{< zUAz2r!Pd*S%Kmp;sV!<0>{T||CJ`S4(AkHj4z#eo$)LWgv`epbfd8O^*q|w+)_GJ- z8RsXHH!4rpQl2%MByy}CdA`9qI)NNpdi$&n@m=#afN%;Ct+z3*P3U4!P#8jNEc8+* z!osCu(GPF7?uan)%M$nifPWvG?xwWxqiT8(juY!%A1m1^!0SApcQM$6T`8p6=FhN; z3dCI)i8&wg#=7y~{gIdN6bnng?bl0SBF?dCv?2iyIgMo`#@ae)5Z~3BJC(D+})%j#s z32hiyL0R^(rgm;bdmm)es^}vDb}}O;HxKjOOMV7Ds=a*v7cW>ieZh>u2}e1Ntym!| zECS*CeX@ThEA>tQhe6Qq8or)etbs)d5jtS9Xzph~chWr<>8-akam~dc%zKqG!USH- zb}{<*T}79@RO`H(WPh$)Y#2)<*mz~2sb`}Inyto<()*6bGfZVky!FHyq=(blmwxfW zdK>`JYq#(Z|EE&cI@n1+H-qWaWpwF|hD8ad+_V?ts>!-H26VqgRw^Hj-j>o862MQL zSHmrcQfqW)6aRCnm1`PH%Bp%5hV>+_JdoQGy2Ju-oAbi>tOo_Jy9YNZ`q+TZU@%d! zUiUs+c-4YgYO&na`ql&fAo6;xK7IUK4oSS0lw`T3Nu>#!_ zr|K%l%Gk^aLp=k5GOLa$G7Q0O;z3yWYS*tu&1;DoO&@MQnZG=!#Z?qHDSAUdSE@9# zCNl??(Z>tvL4r_%dbZVy9}kj*A}FP=M-v}3sHO^uKNP8YMLB83&3N>NfUcAxMlsta zdna^XvF@nu>e^_bhDK!NAT0WL#l6?s6q>E5jN?-DH|MB9icYMm)uHBz#rG&+tfr(J zi`lFe%U(~kT0LV4qHJX5vQ!>T{YSBBd)ux?t8>u*O6>*`_?5KyA#>0UYfn4h5x?mN7K#UnN z0%8C~?f)vq%rPM-#_Swt!~n#I;2h(aSN`1EyAz!|+8ZiXI3D%b{HXXu#=TeNCYlSl z2A724eanNG$*QsJwKj};f@sRWFLeZIYL@*X)tU}7w-u!vs6k6 zjYtr&WI+N1g>#AU698x*Ow?8NWGtHaTAzc&oR7wa2T{I_mQ17B3iCp~oKBPTXDMI|Mw80n!A_me#2SWO|gGPN`BQ)|#cNYPb=ETj}eY7&uHl$2DQ9m?h& z{PM3~P3}sLdoAps3ahbXf2oIM4_Z!XtXW^Hi3$LanAVDGU$_ohSUYa=+^)wpL$k_M z@*{yaTSk@vEAZn01up+YP!<6h&!)`){bHH6=+UvP32!yk5@N2nDb+L%bZ5nQCQw2` zLP1)J&5WsD``s%$^2yx92uC$cP>r(ijVkBHl1I)vhH8|*nzE_n!Gv{8eaAGw4&_}? z8H+G+t-gp@-`=0=Q~keU#-gjVMT3oQ{^da}F0a{?(Z?X8d&Af4$&^q^A)m`*+v{61 zGG|Q~`^eyuR8l}O!;QPM2d#)Y9?G+76nQkyxq2$PcyrZLSusnurFV_s={x@jJ!-5w z`QxYFmgs2>Y<(j_6n4CSATF7}@!-#j!fcmQt_J&~0mNo?i~s-)FiAu~RGb0EMFhP2 zX4U^cl%j{P(l6ykz+NVx+aWJ)A)xCzm>H>5 z3SC`YqXM=O&HPx{`XG7VM!Q}nlYvsIaG!oHpUUHrZ#|4mD!udm&;Rnr0QMXR3+gt$ zO;}R@I0!!gFohYvC*pf<;U8VHgg!eG^g3=yrtt6`$!ma zWCt&mn=xYsm>Dm>{Bps0VlF0gLJkbN1Z>L%-V zDerN|9fwdTgrT7!Jp1gk$mjEc&2F{g)Pn+ktloCzpQV)8uwesIsT70|m_B{_LA$W7 z7ME^YrY-sqGZw*4n$ZQuU45$mdwphqYhWd94-O;CRzaK2_1?U(se+UA{^jWuGlNkuT`o*40s-jl0st9O7 zlYMUt=-%Rn1aG3oeZO;-17yyeInXo>Pd@o1(&;pwfByNpol(XTQaYAvR69;Ym^*ha zy1Tm%nMJltEZ%vey!~9AwD&8jJGUy^T#F4a?;C_YZ}j@re$Q)G zJ5<|Jx^x?WYj0L}oTI=O5YVC+AG%fcKWhr@`Q^0Ga^{&T?d9wnRoQF-lyS^VC`<8$91EkkpU+oq2`qeg-X7d1ET>6-%=&J-? zLtxWl%oL_|`VD+rqI}bBD&xih=q^QPZ-$vNmT7`;o_62mBW6uSS2@^A*l<-WX;e@4 zmy+*Xai#nk9MId&r%+_cu>h&LNGFhEQj?|yDJ5XLt{#-W?n{hIQx@^hgrG+m$bnes z2+g=%t!M>&QjWWRT}_-fpp5g;V(yEblZgK6=JMS&dk^x_JVajjCSqU@$5H%W>}Rz~ zh!FvpZs7?kWC|@<6iUDeFog4219t*Y4Blg(BV5IqlYm3G4n1x{4zC8-@#+H+m>BvL z1LpQT*y6JB){uUP5IG_St;Ker8QM9Fd^#@ytOAfdSQp^cVle}F^9JkI4XljA1=z|# z(-}(mg-_e_-$Z)-$~bo13YkG9iWF^v<;i8@bICqy#kC;%t`dyFsmXnJ*M&67RHA*L z*;=JsQNOYQq1lm!&jo<=U>f%=zXwXGEwJmBMD2}ht#~48Bp7hUY8;F%3_tccp8)n_9GLr}GlL`G& z%T)@%w*cID){^(0pWdB1B|nnu2pWjUigDJJ=Nv!pyrbSVv~_6fe_Zm@U+ZDLE`)^> zVe#=F{L?>^M*5Hbp}(KB#=x#D#pi$NeW%ZQ=bV!V*6v#W%Paolw|c|~d@+^^>z-JX zPN&jY0NVgO1>g+;=ApJIFOGeZZ@A$GlsI#FiBOYuZ-}B(K^aG-6*2aeXB>dsA8&c& z0RRuyd*Z@hFTMuAyIOnOR?q(ey#4Yl(C^zdnRPF2(u8o#f>tBf=$YTEz;FwE zjR{;NXxMoZZ-RA zh6T1XaPrpxJkcln_c$EE^-T1^#y1_cnkE011RViD17kUq+HjM)^T(RXZ(pKc-dv&e zJe~^27;ZYuG%BOJp@3d{rK(H;ytfm9lAb=4C@kqVbSwf2$wj%D4@f_ck+QKaWesYVvvq!-?8cgjB zmZWe(pLzQhp<5f5(2`Vh`Hc#4@+L$%&^XQgQAV%ujAK+}m|@uFE9t!6wwb=3zZ=US zKZ}U=GN~j(4Ss_=pm3Gq380@VmI)e=GC+?*Ia_t#2}J( zJo-K_=Y7xu9pyWx3;fx$XN&**&3|?nx^a3W5;-m$4lgkbBTrJj5hP0bqhfObYzK0}s?p=IC|XulU~f`SsWGIy|G#^~u{; zdFs_UFQJr*Ff-)$rDFrMzyJ(sb5DJJeHE0dT0Z%DYtdEfH%bX;sxo()Wm$TV+VkET z0UWe%m3}Y2_@XF=rIyZf6X;_Ay0edh889sq$#e?wa1?DF?Hbz-An}|uk+bpz&8IhB zyK2fNH$>B0%&|^F#(15obums&-a3s%K{!4KIi$2!OOLjU%&jf;n^@M`W5TR z2L(itLY2;y-+b0n?y1)MTF1QUn`&RP$O(?x*XOocWnRys)aRCpoN)~DvyI;coSGd)d$C#JPU8-WYF1ZG|fb+YSf4!peO`&)yR}RgI zfb(v8TroF(^H@AqK1WsNuxyhkKbNcaMF}XqCzk(~D&x%jbg||4 zSIPl#RmEC)jgZoNV82I*JXz?b;`B7raW$@t1HjOP9e>d}Ych;~IU5X`&>(2?d9RJq znew#?bkJ?vLBdI)I)|ryq|-qvrhShZ~Wd5e&RBSWwsqK_Jg2>Q%J( zDSo^xWXX4mi@@}-r`}XSjOwM6{A4;W8_zHbkS&+>gb;<}rEH`}ZZBtl%lr!bWa?_; ztfri-qKvGmOe05xfR9*I)FG6O)hi+t?x`~Rt707R|E@HpSE(36p7Cg9-+B8|$++P& z|6Zl3S3l!Wbr9NA1cHHGyLL6B0vq6XjD8sMJ)WNH`sLH}Q&5)n z^T_X2pI^22LDxf>1tiFM6@Bc_!^6XP?6Jp`lrjn6O#lxA_&tEv03>mcCej=;MJFQu z$VWc%;G#u~c+#Xv7iP2B<4x1-WaiMQ6t;ZVu0q+$-@ECM5s-q{b8KH;(@hUOTK~}~ z{dn~o>vigRc0sQ-*17dNE`)$-nt1cgHv!wH!vc_l?YeBDPy@Kxs!?|3 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/img/keyhole_light.svg b/assets/img/keyhole_light.svg new file mode 100644 index 0000000..378acab --- /dev/null +++ b/assets/img/keyhole_light.svg @@ -0,0 +1,208 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/img/no_image_found.jpg b/assets/img/no_image_found.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f552e56a39c6c95ebc891efde53dded5cd4cf0e GIT binary patch literal 20245 zcmb4r1y~%(7VhBguEB%51c$-h-3NCMo)FyK2{O1l1W173?(PH&7J>x`lDtWFvzy&} z@B7|6z;ODn|37uAx_YLntKs|7_bmXXytJG&0165UAPe~deBXwylar7zQB_xwmQ$31 z6aWCw`3~le?yzD2fTNR#o4O2;LRU|p0^tw<4S)h*0%!olX6EiL;;O2Ofd6UN3lJ{E zW?6p3`k%D_UVvs{>23}HKv6)7#mrsYJRrU)#OL+$aQWe9Kzv+t8#4=tUj^}*-5?1< z{G}f_=nwzohj0DUhlaQSTsKX12}s*;AwGrmZ$9WZ-`vK{5yIhyaA+(Xognd{b^q`! ze)#@Bd`AaQNNzvvM+;FcowPI{ziA*pqyQO!96$-63ZMXh0GX35a|Iicv)T=^NAc)EqU=C480-OPk0JEQZz>jkP;Xv%~zIC_a;`|9gp#lK_xQ*}M zFKGb)gk%8VG2#37d+_(~j|Bh#%o+gj-sx|>b3Op@>_#30i0{}2W0DzXhzcElc z0PrRp03cj;F>^EfSq}{4723)Q0Jtax0MPUR0GufR0NLP=euI?#Cps)bYSWqxnP~ZCiB#?m*4fEqV`pcl8VPN6l5g>(x zkPGj}wfCF-DEz(xK!t(GFkvtu!+7mD;kWYtM;DE-uR{<%#)_97au$-=^xywm2QzMU zX1;#ppp!LzprZ{b#z2Vv%=d2=0D~usoxD+F-0F&{(i(v;7emS*4Io6$_HOOt=vWLL z;+24Fp}w$4wzkjOx;fECO>9Qts6xULS5Akr;X9k)dL#Q^A$_VgLR~qp+F$GW;??<# zb%gCBUJ!Mzx60JLOd9Vddt`N^o;%V! zC+z(AD?=lj&qp>2L-9)G)#P?2I@a;y*M6x&bZi}K7d{Pm3#%(Uz-txe^&)7lwRKoPV z@3`1s5dnk+Urc`)% ze=UBt+#2WLM4s#p+xFvK^gj%i+=L*U2qnjEQCK;RIX(YB2mruz`k-Z%J_SB!f(KKv z9(r}Ao!Eb{(0pD5gpMRI%E9(jDSC0AYOe?Wn**mp8$GV5KDE?1eV7BMXhqvgY%R(s z>~-91CI4?O)b6>r)QC*c+IjkrJ=-)(yr2bu69a~}PJ$b_Ikf6Ra zX5Ak5;#Cvza?^iN)rI`+r17rqvTgMTKryr^_{?&k{^&V{R>!G-F{k61Qc-gAK$-)p z3+zGt1^vph zGuJO*Q{QFf+f4$C%dzn6#E=ztjAfFX9$X}gx^BI9Tf!l$@82Rc-48U@EiJA4 zyo`N)gfZL^97NG1@YIS8D9lMnEb4N!1$$$I#;bn|&>h^61|3K~WDHqS5Za?!RbkQ0 z7!JG3meVB3(j?g_V9R;8b$0yteErj0X{NGT1VP99(-ZC54heFvo@H$GJ0A1F=`dQd z6C%;z0}|vcvMn;&5lCFcWg&!Ypxf$9r=V?d@X;x?nk9&S`#us3I%F2<~p0 zKv^1WMg{z6lIZ39KP3RDIHA3`fKp*M&x;%CSj!_6+*ga~X*PQ5VR}{R1V)lzCJJaV zK$0A*r65zY*e?}v{d(O7&?8Bp?%39KEsAO|Dj7)^1WhfC5^Mrp?{| zME{orY9fx)YVWwJ`P1%dqeYu;y?&2<22~)~|EgoW#&lkeRt#GV0Ifj4MIQIp&_(BV z-y0uY)O>#7TmtGxN#)3}hl&_bXNzmoFS*s76So8aV1qE_mqvWyCjZLqayUBAU}sj_ z{rQDc3220-0>pES6w;^8Y2JLf`b35HWL}n5GDwyN07TN`BuhO|{gt6myXD^D>o3&< zned{V4>xhJBT3OI;?G; z?O#ukQ&|xyz%e~`#D`AC<<!xB`)?Azf{;A>^%;IhH-L_{l;XQ3z z!qlvThejccvErDVN;j!Z|DhUz#Z168f-Ot>vX=h*mkfi0ZctQ1nA1KNJ=ZB#4xWnw zfm{I3oG4~s!B`~ITH{SRsyVZqsW>bRW`k}$4fID#-ygHnpXP$if5#TL%-m%{vrN%r z2?#1yw4!SG7U4NV&e8T&awso0+~1d91V!-q$F8D*?ab#e9g zn40Cl&_-ULdnEAUXe6U<9izCaoST%K8FaYRbJ|5tG9$S^l{5TA3pb+r9QL6C=XH!o zuy_>UY^2JaX`fCn6FTlT7gcZ!5z1VGI87onj+1>(y!71FHs+X9I{7#~akv8p?WS-LMiZfECIRtfBRI*kHk{dB zr1`F#<(R_@`#Cy$oI5&?{0sy&9Ci6cvGrzeB2m9NEI$c}Q(877swaa09IqU%!i>+1 zOel}fi4O*q(Sl@+l6^dhQWDX53pMeP?u z_n_d>tAbO&3C+4m$oW-oKl=W4xdA8=%wlnj8G%g9Z3QLNr6m$!86$+l6a%V3O09$1 zRe|N|^>C94PJbl!Gdlplc94><(PDt9wv>}cgD3_J43YK?w2I*_XVwKvkml^S|1}tX z2oOa0<)+5L`bP`k5}-K;F1_j}HtkB%S)d}Ge4AVTfTK)7%Rj<%??ic+TeTd+x~Xb{ zW6C8=uhIh9WpX)6=B*>x=Xc&Z2L1^9x1kH!6=AA^CHU8kvH+lXVS+|}T4dzo(ZAoj z{@{`l&WXcmnE6(Ai2*nU(Rop%VysYjj>5qZ**^>pO_zX+=*N^bK13T-AJUg`wIIke zm;Vpa9|wfy$wUQV)MzQy8Z$L}|Ahb`EX*d1k>*~k$+|B4Z{^VFFAR6E9aq=#|63^l zjtVv9zZU!(B;1h_TUEUJ6W+GEhODK2Gnj0)jL}MoYO6nCD1@l~>(#*D7yzj8^hEMf zRaDpgy#Wv9jglhUTH_(1Yv+Qwt^JQRh7P&WsxIyx%89-4j;+7z0Hn+QH3nD0Qn|*) z>mF4X{2fQ-WAO^*KWoSpBxo!JP10r`FkubE>y!_rze;a`Ed72nbcc7cS7~TbXG@*O zF0OkEv3L72#dE>^pnJzjvgl(^PMzHG^=ib8n(9=@wEI8B5nluXy<<#l%YC=@m)2{9 zd;=6Yb}j>2KF0NbY0qSuv^rg=GW>L8KbScF-&>3>`OfB$)caaLtrjnOrP@7*eARsr zbhoaU`mxc=K0xTXvsE)1;lH)&iD`j^)J9$obsPf)r^``X3xwkmr219r+>6i0)N%uV zYvKR9D+*bTv0?(CV4z_TU?GdIpG()DYd2UdI81CD3Jy+gF;!ejc5yr^E@~Q67sw(F z5wdiHf`k4J=&@tWR0P*V*>aXuSaODGPd@2!MGWZ_#WQKLLz0}T(usRA{lMu70o26b z^s*mb$=4e{dnsK}kCq)?o8p_*ZmluL3(ijRtZ0#uQi1c!R#v9u{Gz2f$>SPjPU{Ke zTF?;4bydSIFE9H-%t1iS;wVsDiN~TYyHx1uC?)x-H5#kdz1-#NZXRRBz$_S|V66>Q z*N%$Y#MAYXF+m?F$Z~u~SW7BeSdnb06y8Idql9A>m$;AIF)T12ah2gfC8tgG{z#wj zdX{kkVdjJLcYxv$I@Zg zL2r7xrOBxC-a8?UlAf+KEs^=RNuHHhhwQbxmA*nunVKF;)|wTS8y2`)ZW#Sz!KhmD zUDeKveF8!ZIwWedozKZSDOzrWQkyjdUSp}OY*(TmEKtKw=x1J^eRw4Eq95 z81#)=|07+U3#|@vys-)a2d;{jbfi#~l3`7vw%Ya2J_*wl=vzjPzP^7gcb6h&=?Z(8PfaZf`PnAO8OWU6+gy2D80?GCAvIJhHiMDR1n zJ@%P{FGB+hI*@)aJu^&Jg6V_)IYJrx$F}#nFBiYOxOoizOhMT@KFK@KDc>@vca&3+ zRWqiTTKh7itCQ)GIG`ru6Q|~)y{0EL3~rEYOpKlV%K4t%as`rA0FY=MmK@j~Revry zCSDyzy!8>u+$%Y+^wz1Srre$g)pf3)ErG7b_oI9bX|)45V&rx!j-$Au+s4cQF^W4O z#YQ(zidxM+3!HP-&Ma5VDLu4F7TH@M<+rCmKEYh`(<0DS3e1xaX<{YRXy9`@8lR9D zsWk^QltkOJykV`W&6%H{{SYU4#K+!myw6{QPR_7D{yLapB$q73Cq-+1{-Sel+TJ+x zX>{VEs2%)K*%~F;Xyxg;5zn>QW}o~$%xEg%yXDk!{PkxBzW0HZ`Nwp_FVU#40H2hF z$|~r-wWS111*A6yhb5n_8$m=$&uig#iWKMy$(8ZlQ>Yc?zvAwB^b`?1fxBpLZ-*a_ zpWmt=Gxcs<5>VMtyFYhp&%Bf55g$1yg`G|AkMH;N^z;~J+p;6`3TXQf6Rz1P+@50o z=;nfst$}I4ok+ir4U;VI-TIZarlv5t%XMZkzxZ849X#y9cR-7j5hm&D@#I%?ILa#c zqO|k#bIx;uE5SBvo!R37ixiyORF7^%LWcfthHL5(R6jFD(dS3hIqf7H&pCXWP7aM9 z_4I^!ydMenc`=FcW)Az{i|zOc298u?QchCG&E$#2`4V*Di(|qv@1*oqTuAv zoXb#{X0Em}-Ux6v-%^sHLsd{i1EuTG{)B2!a($_1(W%{J!<|?OoI`eMB4RU1rS%hX zBGL3Z+xkC@?KX-ix;e!fWYfag#^X98D_chxd<6jjBy};iPw2_ip!p zK4fu<^spX`7Vpe^*21L$1a+dIXLjEv-%%+b8PhxUCm?lH@|@|-?^_*FH8r-#r6lmwG{ znJ+kkcr8?K7}g@c0|+OULls6>Cs??iQML=eu1&o`CLR7!fcK`S=#+8r^AqeK!SJ}f z%k4mM(NumtJpdrcjT8qp*i`#l82OG*WLv2f2I1_hvnXPEIzQsVD=UgNw(-gHV?^;D`=+Uq zTDIHEyS0HF^2_`fOLQAk2bb_Xul7H~lb%NESDi8o7C%WMu<BR)FPd$%6N3JXWA43Gkg%V6rrTjTJqN+9O)NddG_Mso)2$VKw(3!eIrgJ z^1@~wFl+49SU98UD)NekK6&7AH)}K^}j_Ue`_122AQ8Tkbc(D?^lZ8Rj;sQ zpPkkcDP^m$`)XCD<=G%E^reTwt}<1GwtQK0TaXXAVy67Kr6joetoad7SmJQ~t6cgX zotmKGvy_#R!ct7hdSq9egOXJZohw}(TyIs+O6;QpQ`AV18sdJ@izBX&;Xp`a%y~3h#as?|iez+k<@YYTldmek1mJYa_6UVlr)J zvM5josx}W^s+U<|W@!m(GLAzFIY3a-4jKPxTDx@*{ z!Gh9O8yg1>?(cx@AG0ocEC3Yj&o8(?r)xj%m~&uav5Tov!eVoZ=i{oGx&;25Z$WOP zi$XnMdwvJ_*gmWtcX1Kxm%W2MyecN$O(91YR*ECF zR*jq{*?`lPiTwOLS|h;&=vDgc?eK>I&G5iQZ<%UaWzm%^hq$2^SeuZ}qK0fO{4hvI z{Mt5v!o-4BrC_HN!{%@iH~piZpnvug<9)5^Er(O)11^VDuCJbTM&slYA%_dyg2|^z zkIyN4G5hEGQC0iLqX;_&=p}w0sTYhe8rGu=<%g!sE-f7fFkYegqHqCMkNB zcZ(&iQof^#{R5M4QZaLYhplu?9DV}?s%461t(pwtr3ejkT? zII{$9H5UQAp1;FAEG3QmP0r8)=K^TnCjc zZlCuEJx%yWGl1iqPp3-WxfbBtw&pQxM&4Z_>XrMxqG3Z^`|L|;l^t17#H4~<3H{Za z_B(*)JD^R`q|fH_IYft8RICc*V_gB z)sIr*Ld{JLiybPDh}Rx6PIq)fAMBcBU6H=xvODld{|K%`PT#h1g!Ba|C_7U5lbr|G zz_d8sR`{iWFYANKLU4r2Ktu+8rW(O6{X_W@rAV5pTr0)5+8n3{QXCa5vwYyTBO|Na z$q}B8p8og|FdjM)fn03XAxV=gfWk#|FLvTPz-jB&`3$la^X7?^CYa8z9T z)uK|S&f};^Gy+94IeS{seaIq5hgVAZdOkIZfxKzR&|Y=FX`=dJU!EMd=|+pv;fqQh z7RbJ&+8f!Ci*zY1lfNY>)ZJ#LE{l;@R@vz#u0N3Y8Jzj*mwi_ejr}=yWkw~>cRe;O z3vpT4TU96)OhHS|(++TM^?fWxmNt}1q4Lz0YYcT`Zs(Z3wNt15Ic7YS7431On!8%+ zGi0L`v1yeyWN_actF^%VnvdYN@?efpW_)D7?1y_`a_75RSR1Fk)s!LQSeonUHvX^47E!;54-Z9!|OC#=h(>N!)aH!1vs51T?nhow^|H~ ztkyKUGuEHZx(gN>8B57i)ytbXj+X{CSUMD1?a;CeotkQxYVa}`x7Y}#1~73~Pm>he z(E;b}-e|HONf{RLQOyCv+>3Nc_4Op>GH*qe!%3j)9UH-CkY?jt!EN$94=QS=VPDr^?&BHF~K>}>AS}} z7wOjyv*Oe4Ju4RBY2&)MQO2tnZMfY$>g2mCSeY-eetwK0>ZJJ4F?%+}>XU%1s&|*l z$36NM(?VQp(~b$~|kXxacC2YSzrWlWyguzw38m|D$EeD7&6l@OVT&AIp3HwDW zSndhc**0>m>gDzBz5H5?;D9O4MZPKWZn`$;=b@pJqw7*5 z89w)FNmxeq>jQ!Nce7;6M8?O^9Hew4p77KTevVn;d2i@m7$1IFA+yHpL=_$R@l(XA zocEYiia;OS9+}=AoyvZBT}ZP=A0DYR4kQFe=9l^0yIJp@=7j~v`*tIs#G+YaTfIIl zmQ+KqBi(sV|D!@DT#0@@?m-Xw#%LuBFEQ}PPs4fX?JtP&GFwEBd;R2`*I2X#0_MIw zK%+W#<7Y?pp5j&c&ud2|NF9;Cn6tMDzkBJBr7A7T!xSE+O_>4kK^;Kd$d-wGDhrjQWiBf(C zd=N(jYzuY-6=Mb2K^FDPuwGGiYlL>^%aSXg}&r{z2wOFf59NxrcbAEDk~ zQKzHCU3Y*9NafOT)|6Fg)3?Z4kf=bzxdPkoR|x z{I}v$HWhQt6RH#!@LV4sli7V5gZGk$@mkp1c8QLZ>lb}~A}G5aN?!0~SEf`^9!ihP zWye-QP~EffIN@lZO*@t#6VSf$gA!6AxkXC7oISCdkN^FZApDM&?UcP(r>0Tnx|?9w z&Q%hBMibqGuyKk+nzx_uxC!{yH`P!n8TM%hwbb0~fypM75~b&MN50#vhsh^Ox)mLt zf>la1PKEckIc0OVv}2*#7LV$q>iZ{Nk9}t77?~el&?f;YnQ3?!$0|i@ufXO?AzV{V zDoZOqXAbGhs&5#y+!GvGf^S#g<1LlnLMj>rZncBM*aHRA&rUYG8E^|6-n?UkWP$ebiL2US4{g03ZRH-@}Ki|iFDX{Ixi!& z6BbmzFT5jWy55V=k#s;TpOi35P9VW15caFjaOXa!G!)7EBGt|Eaw!Cc+PmTTt|YQo z2wR@WwZ4mP1-^^gZu@pb3cZ#iElW@JSmuSaof^NErhETWsp2o*k!dNBr#My#ZUvna z1?qy&T_xzAU^z)8kX2S`&fT-VRy8}=r7j%P^gCebC}L(fO$>YEM7Bpb z{yh9O{9ISed}T5T^472j0{dkYVF6z*U4TzSv@t;`m>2Ke019r1qg}g71R_(&Q|zlx z(KCi-URX6yP#>EYODT1hZRV4|!RNcFRg1^GfTHrC2t&`AihHQ6?%OAzk85OKECx3Q zP=I8$H4%AOXcH9-tqRHTRm+}AMn*=+7~3750MmP}+M4Rf*86PY4qng4tQNOgBm=SO zq1i=sog?fgDGEAmAB&>!m)&R4AUe@9w;g*2cg?4N_Xc;Dc&9MdYQuX_s6sb*fr*;834D@;_1xW|vZ+vV5x zBk-bs3RT%xq`*`U220r5kr%k?Qq1m7Vi~EMWleLj4bwy>(Mda4kGr&~WwuT&whnnu zdWYV1m(iPv-vD28vg@p=qJrA%V`}@bl`Iq$LBq9K?szd3g36M#%DO=)UJ_WG-9_Pr ztkS)xw8;+#iXn!%_G=9Sg%0L#F@x1$$`U4R zGqdU;(Gx1AWq6GD+_omr%W@$yuYg7z_NJT}gLO%AB!sD9 z;YM!cb_#G`WwsXt5H*p13v-6&2xmZ0Ct(H6@`@jA5%wuWh$**mJH)NC+KX$#Z|>c}cYQ&>I*h zMCPHi1C7N#Ofw`$6U!M4efczEX{lF_LZLj1;DZ&eLXU7B2ieBnX+#H(jTg|CUNVWh zEQ>CZgoLyivCUqChSK{KfUvS@V)&l^h0BDeyy0 zuQ=g}Xp*d928Ka1Uj`fh=k6Rr^yT#t?At(1<9Wpqkqh0SeUrQin zZPO%$Mmg~wsG#igHC#V=xB%Wr^2+uS_BppI7`8gRjYS2KkkBLsaS!@S(TFVuMxJ(r z3NcNsATHIRnpG&;^`+>_Hc@zRBnhx3k~;8$%}ykV>TBsjEIA6H<*Y{Us2{cmGlOE( zZm1oOhBa381qcT?szDG80B>qX@iPiy@Wqe#q7vou1)OK8>rM>8TzwDzK| z<{`$_@eQFlGmRYL7cdf8+6FirQwQ(u)_1oLl+wu7kDUl~YKM`#N2$F?5nLxSeaHs!L?Y@a z$7+!yv#|LUJb2O^UMvvr^p+41MaXpErU()j)@@%o9S0iFX>W**J=uq4K%xps3yr$^ zh7?tylfunqk(e_GwdP)8EaTd*Qb5Dvcvma%9Z>fvI(;f+ed(J`0y(iDI-B%qD|-0N zmTt<+C2k+Z3ObWR%*ANurMNSd4@04qHuql(T=%(Jw@ar5qy!QdA0yywyI!8DJOtf) zDCEfQKPNSYbQu}O=l64!;f)|Ait|9Dy$fveb@!?03mim^h6oF#=m!*3Uixpz@_n5j ze`MkjxH=y5BIug;YiYo6r02^}4 z>F2Y?KR3KFTUH(af4|=uJVGS+{~?@SXK7h=_>X8#L5G^itCq-=*cIZsM7lJ;2p%em zmD;P!Y4&g}$8d5LYQON(EJwSRWl)1QJ+z^N1Y*aZ_&T$yf>z5YPf*=_!?4@RU$r0V zhQPA4=vCoG=g;T!sG;k$=_xxBO3JQR}}KmGLb67V0lf zGfm6#f5Vd;lVqR%NAOiA1A2hEEu`Q6Riw4@c|Bt*=RfekncU6hr~i@C+zw4u!}vYa zzxd73qHma!?!T7*3-5S>)_{mJ+~WFA+}#$`VBIs zW{?_xX20+SSI)5g#f|HhlE zNNC|fF=+~xX{vDbf8p==k(YnzsA_Aqfalm))}~HeYa}aGRpGl7vJu5 zR>5j4sWy6H8Ix1a^skepZTGFgL7X5!ByE```JU}B++X}%qlaws;bV)Q<6AwZUwAgi zaypSNmPWETZPYQz;IB?7qU24rD0)FAc?FKH{MyH~o#JZ~y)f#yrA`GtSX z`Bc2&_Z>j5NlTOZs=4l0md-=jN?na6N6_H64kz(dC4b?3E#Co;vyE7<@fG-tp0_=SiehBuwWi#PSdjp$uzCy{iEiY9x0j@Jw;AE?lfIl zz;YLY`yY6&cDrMpn2*G2M~gZTI-=>d_8)j-gS>bGv2f?OMFXaR;2qEU!XNnZb2Xh7 zi(P^hiv$2ka{eD61%LJB50yOw zH89p@h&TfFiNWu9K>J-}$FlJTBF&$f{~$ZIteiJzo6M{_BGL-~75pdeST>W}x%xtX z-sm6rs^ey!Ud!t4s^|K@@W;21Xw`CK)&IhO9`Z{5JrI7&Y7y4+A4&dIG??~BdjEcX z{BObkQvGrkX|Dee&Q$+{ACvy);ruV=Pg;|LJ&ZQXJfK?RuTl9E2Lt-@;pE%ZLcj+9 z;N#p^M=)wll!sRQQOlpNHfi%mJ;pURXtmn^z$IHE8=2s|TDc4Uk<3a!%U8#X`|k8aGzExx*0=O{NU~B z+@%42EA4_GX2vv+VXUc=w)Fv6-tgdBT$sEw{FSF(8H>e>7(X>>VeKlZOj>2xErU&Y zVITI6kZvFA4@0t|f~n%`QGSO%jUGnhW%RrpMWr_y&1%=%R^8xG* z_y{G3X`fy_p^Qcq1OhVEV2Ly03$|0@v64?5XCst5Xco8Vm=6;-TMD|-l)gOE_g=k; zw;<*;FtUe;pk_}T?4f9w^%jR+(6`WKz?zLn^x4=87fv({@oh>;?@3?sB?;E@X00x;c}`E3TnT;!z*vS4HES1d9%BBP0|xe^DX zj=jbMT0ZoNf!$!oUZY#7v__|;SKjWc9$mh8hNe&a+J$4(FSP@`K3Ow8-Qq!7 zVL{rg$|mq3Z(0E^u}$00de2I6W-4yzi6!2#WU415YN$UmLb-nW!gsdSCEMSYBOSPc z_in#UC8r;wt~`%pB&6kDcLwM2Vrh*Pnz-RzO?aP4!cxNdph?ombxv$5BBcaK;mc>& zcKj1Fh64u!36qlkSL~;KNw-?U9nwx;(~Fl@iTqhed~>p~QiOXpC8P(qSRc7TygPnm z(egkLVgJV}sqj~nEX)O=!e>)$DpJ!X(ua2#4#4-{GSTeAz8b|!428xcv1$N^>aTfs z^e+X7`>bf|Ivte2*O%m|V7_}0$GZgyu6rJk#`Y7+cxY$DR)Y(@>5Q=#yv@SnUlpKH z!I`%_#fNBCs<#S>ZhA~6l1?&LmVJ7=rE3lyaks^@#3|V4NpoeHFYyN`QCs7Bv@K7> z9|_Qfr!EPRqK(jEdkD-$aL6gEQ_UTgc`cfre|XNq!7Lv_M`=0g!M;{xN~;n!zN{Xl z-%Gqi3&s{GggC29I*MMl%$J?8Q)TA`HIWz3yUm_a!cLSv z7d4=!@HZrzm+&T010$f|g^8;VpRi}n7#gNuSi8IHZ=f*0VMs?AE$DRAU;+{}%pU?n zPk1a}97qSexn(5iFd5D+2t`KP#M8T7LNYwmAz&kc5k{L@E$9jM2y0VZ<5l!vW}EBk zHq#v)c&{9tj=37Cn!;0vMp{TI7_#=>4rut)%9t0kNIg8W=b6nO5eiPvGi765cwcf4 zSN81g6bptAq-I+X?IcjQoNN`lY@M^X9)fQ1Se!{cc$N--2xsPHJB+4N z0VuIY5!NLs!V6t5ZM-5Z)BI;EeM+H`aHgK`5ff_v$+N>x9X< zzX{urpKR#k27Buz$03JD*0ty?xr~af=!4K+23cCZ|V9qsU0)nY~)?kq!#W<8HyCb$o!;d6|<6E$MoXqkVGe$oKt zbL0+r2m-0V0W!m)HIXe>Jd~7=!rxDvVcFX?)<;KA89-qP&pU?}Q)bv*sGSd7RM15K zYLnG#$<6n2aP?mH0fAnvU0ZX-_v2&}5*-h(=aOei4&pw*F`k%J=8aS-xmmRePY41bCM4xJ3oYu z;tub&Ytc5T6xxBa!7|&IBOE3+`@wn3=E_%@-T;&h41;;4f2)=npjWz zwz?v-#V;SH+EzcisPZhQT}-PqoZK2`Mdc&EIF4BES5pRj>aCZ{$Eig0=pP;*MF~br z``w|e9uewZBv^knkr}x>=Gb#uM$%gL-V010QvnBX6f1<4m!unEGW260VzR&)=K$85 z$un!TpUU$EDO%CnsGob=z5MX>J3y3DwPZxk9wrS-EiMI>x^&eK(xt4CmS}=c4)f^9 z`YcZt_pKNFKQbhgV8G>BrW(l_oiq;QIfdg5+Q8QjSR(Kwe!6-vVa>xEyM7UG`uMch zefr|vo#LFdkQSa@G5O@h9k~wf7UB?+sz9*IfqG9#C!s8LW$u=?zvtzF{L~qGZtY># z9 zWlvF3HT`9*>wyB4W{EP>$Gp<*uO7EG){R$w2!|phx$&tVXF!ON=8Py3Cy&ZpRopbA z(R4% zguerBrVvZg@HX!-_Y$hbw-@|}9;ipXiMegcj6XkK+<&_zxrRM~jqnSIg4EWC+u^UV zkPiUZAZUuAX%$vWBE#F*2rr7L*{X{(LC4R0{Zh&o{8;!rtVLxSfQ&54{0*K~s^on3 zP21TW(H(Q7PeL?HWDq3$4K#b zEu{i{_^DT!{GquHNyUq4Q_K}7Yy;?6K>AzAGimmP?^#hy1^K?xTF0-3P7n2AE->pF zl$e?z`9FOLMy~Vk?!Lqz9aZEum|$MeG2(N1NwL$M<>-eMVOOF4;0Pmz&{;o({={Zf ztE?7?u)c#AS)l^2^9?D@e1zIwq%VTuWlAVtT)M1+=>+Fh>{tsB1EeYri>bqJomPan z9BmR$m=?H`eJQHJI7+mSW_5|U!S0G}@&dexe(N=HV!T|}=G9FntD!x|b%-D4gm0`N zKMm&$oD>}>LvAAJdA|MC(P%XL{RaSr6m8n+nsg{UB4u2ANY3S3xH(Dp#}YEGsU{)9 za|y%(FQtckazUy1?O9nIx*Imr5T*e%87$lU&)5TOXVQeGeRd&cV}k9p;F(&EVL#l9 z#TfZe8$5EWDM_sQwFj-bzK>}}j+*yZHNX=U#7m+Q`-o^5#N#O>LGTpe@ifinROh&4 z=Vz`Tm?A~7(wMx0n8}>6-elOBqu<1UMyVFyb9%=dwl3ru&dg-xU>T4VEQK{`U!h`$ zwowEPO!joh1z@!pfNs*n=4F}~A`Uy%PdO#tAMi%;n&O$Q7&^!kl28*UWv~Y!wyNVe znVA&8)h+k3M7?m2x?GlIVgkrD7U@=zDv{1@z>Ms#lDe{fHVf!-p(3a&sGr+%6>(vcA$`ItB_z;`| z`TMS@Qzv-yIFI1N0nK?tLiQp7SgdfpaNV#+V3Q18f>?87`j(3qe5Z!q2Jw4T(uVrX zRw3-2Iqq92FS}0F-IzC=4*f=TN05K~z)$xoa~--yfiq~%Vywxp2O-}ViBKH&#*&Qj zCRA%8I(PF0;)RT!JEMvBcK|rGsQ@5sI))YU^ffz{>1nX*R(KK*9M>}UJu3^}i~%*3 zZ3-c~X?HLpXNV!e)NHCEQ|&>(m$a>KUCA7A%Mq$uh@yC` zE4idgKzzQegebP(7rCq9a8 zO`;E4f41jqK^0*?`V6ZfHoEe(QtT1~(Hl;48qInG@!7`soYZ^i^;1zQM^8a1J3Q

2){;=2pY0<|5#z?* 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 literal 0 HcmV?d00001 diff --git a/assets/js/jquery-3.7.1.min.js b/assets/js/jquery-3.7.1.min.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/assets/js/jquery-3.7.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="

",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0R6qOv2H;boliPbXJrzkj27`Ie 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 S{?yk0=l=t17Wb6xRRI8D9$8-i literal 0 HcmV?d00001 diff --git a/assets/js/lightSlider.min.js b/assets/js/lightSlider.min.js new file mode 100644 index 0000000..ea16d58 --- /dev/null +++ b/assets/js/lightSlider.min.js @@ -0,0 +1,4 @@ +/*! lightslider - v1.1.6 - 2016-10-25 +* https://github.com/sachinchoolur/lightslider +* Copyright (c) 2016 Sachin N; Licensed MIT */ +!function(a,b){"use strict";var c={item:3,autoWidth:!1,slideMove:1,slideMargin:10,addClass:"",mode:"slide",useCSS:!0,cssEasing:"ease",easing:"linear",speed:400,auto:!1,pauseOnHover:!1,loop:!1,slideEndAnimation:!0,pause:2e3,keyPress:!1,controls:!0,prevHtml:"",nextHtml:"",rtl:!1,adaptiveHeight:!1,vertical:!1,verticalHeight:500,vThumbWidth:100,thumbItem:10,pager:!0,gallery:!1,galleryMargin:5,thumbMargin:5,currentPagerPosition:"middle",enableTouch:!0,enableDrag:!0,freeMove:!0,swipeThreshold:40,responsive:[],onBeforeStart:function(a){},onSliderLoad:function(a){},onBeforeSlide:function(a,b){},onAfterSlide:function(a,b){},onBeforeNextSlide:function(a,b){},onBeforePrevSlide:function(a,b){}};a.fn.lightSlider=function(b){if(0===this.length)return this;if(this.length>1)return this.each(function(){a(this).lightSlider(b)}),this;var d={},e=a.extend(!0,{},c,b),f={},g=this;d.$el=this,"fade"===e.mode&&(e.vertical=!1);var h=g.children(),i=a(window).width(),j=null,k=null,l=0,m=0,n=!1,o=0,p="",q=0,r=e.vertical===!0?"height":"width",s=e.vertical===!0?"margin-bottom":"margin-right",t=0,u=0,v=0,w=0,x=null,y="ontouchstart"in document.documentElement,z={};return z.chbreakpoint=function(){if(i=a(window).width(),e.responsive.length){var b;if(e.autoWidth===!1&&(b=e.item),ie.responsive[0].breakpoint)for(var g in f)f.hasOwnProperty(g)&&(e[g]=f[g]);e.autoWidth===!1&&t>0&&v>0&&b!==e.item&&(q=Math.round(t/((v+e.slideMargin)*e.slideMove)))}},z.calSW=function(){e.autoWidth===!1&&(v=(o-(e.item*e.slideMargin-e.slideMargin))/e.item)},z.calWidth=function(a){var b=a===!0?p.find(".lslide").length:h.length;if(e.autoWidth===!1)m=b*(v+e.slideMargin);else{m=0;for(var c=0;b>c;c++)m+=parseInt(h.eq(c).width())+e.slideMargin}return m},d={doCss:function(){var a=function(){for(var a=["transition","MozTransition","WebkitTransition","OTransition","msTransition","KhtmlTransition"],b=document.documentElement,c=0;c'+e.prevHtml+''+e.nextHtml+""),e.autoWidth?z.calWidth(!1)
'),p=g.parent(".lSSlideWrapper"),e.rtl===!0&&p.parent().addClass("lSrtl"),e.vertical?(p.parent().addClass("vertical"),o=e.verticalHeight,p.css("height",o+"px")):o=g.outerWidth(),h.addClass("lslide"),e.loop===!0&&"slide"===e.mode&&(z.calSW(),z.clone=function(){if(z.calWidth(!0)>o){for(var b=0,c=0,d=0;d=o+e.slideMargin));d++);var f=e.autoWidth===!0?c:e.item;if(fh.length-1-g.find(".clone.right").length;j--)q--,h.eq(j).remove();for(var k=g.find(".clone.right").length;f>k;k++)g.find(".lslide").eq(k).clone().removeClass("lslide").addClass("clone right").appendTo(g),q++;for(var l=g.find(".lslide").length-g.find(".clone.left").length;l>g.find(".lslide").length-f;l--)g.find(".lslide").eq(l-1).clone().removeClass("lslide").addClass("clone left").prependTo(g);h=g.children()}else h.hasClass("clone")&&(g.find(".clone").remove(),a.move(g,0))},z.clone()),z.sSW=function(){l=h.length,e.rtl===!0&&e.vertical===!1&&(s="margin-left"),e.autoWidth===!1&&h.css(r,v+"px"),h.css(s,e.slideMargin+"px"),m=z.calWidth(!1),g.css(r,m+"px"),e.loop===!0&&"slide"===e.mode&&n===!1&&(q=g.find(".clone.left").length)},z.calL=function(){h=g.children(),l=h.length},this.doCss()&&p.addClass("usingCss"),z.calL(),"slide"===e.mode?(z.calSW(),z.sSW(),e.loop===!0&&(t=a.slideValue(),this.move(g,t)),e.vertical===!1&&this.setHeight(g,!1)):(this.setHeight(g,!0),g.addClass("lSFade"),this.doCss()||(h.fadeOut(0),h.eq(q).fadeIn(0))),e.loop===!0&&"slide"===e.mode?h.eq(q).addClass("active"):h.first().addClass("active")},pager:function(){var a=this;if(z.createPager=function(){w=(o-(e.thumbItem*e.thumbMargin-e.thumbMargin))/e.thumbItem;var b=p.find(".lslide"),c=p.find(".lslide").length,d=0,f="",h=0;for(d=0;c>d;d++){"slide"===e.mode&&(e.autoWidth?h+=(parseInt(b.eq(d).width())+e.slideMargin)*e.slideMove:h=d*(v+e.slideMargin)*e.slideMove);var i=b.eq(d*e.slideMove).attr("data-thumb");if(f+=e.gallery===!0?'
  • ':'
  • '+(d+1)+"
  • ","slide"===e.mode&&h>=m-o-e.slideMargin){d+=1;var j=2;e.autoWidth&&(f+='
  • '+(d+1)+"
  • ",j=1),j>d?(f=null,p.parent().addClass("noPager")):p.parent().removeClass("noPager");break}}var k=p.parent();k.find(".lSPager").html(f),e.gallery===!0&&(e.vertical===!0&&k.find(".lSPager").css("width",e.vThumbWidth+"px"),u=d*(e.thumbMargin+w)+.5,k.find(".lSPager").css({property:u+"px","transition-duration":e.speed+"ms"}),e.vertical===!0&&p.parent().css("padding-right",e.vThumbWidth+e.galleryMargin+"px"),k.find(".lSPager").css(r,u+"px"));var l=k.find(".lSPager").find("li");l.first().addClass("active"),l.on("click",function(){return e.loop===!0&&"slide"===e.mode?q+=l.index(this)-k.find(".lSPager").find("li.active").index():q=l.index(this),g.mode(!1),e.gallery===!0&&a.slideThumb(),!1})},e.pager){var b="lSpg";e.gallery&&(b="lSGallery"),p.after('
      ');var c=e.vertical?"margin-left":"margin-top";p.parent().find(".lSPager").css(c,e.galleryMargin+"px"),z.createPager()}setTimeout(function(){z.init()},0)},setHeight:function(a,b){var c=null,d=this;c=e.loop?a.children(".lslide ").first():a.children().first();var f=function(){var d=c.outerHeight(),e=0,f=d;b&&(d=0,e=100*f/o),a.css({height:d+"px","padding-bottom":e+"%"})};f(),c.find("img").length?c.find("img")[0].complete?(f(),x||d.auto()):c.find("img").on("load",function(){setTimeout(function(){f(),x||d.auto()},100)}):x||d.auto()},active:function(a,b){this.doCss()&&"fade"===e.mode&&p.addClass("on");var c=0;if(q*e.slideMove=d&&(c=f)),e.loop===!0&&"slide"===e.mode&&(c=b===!0?q-g.find(".clone.left").length:q*e.slideMove,b===!0&&(d=a.length,f=d-1,c+1===d?c=f:c+1>d&&(c=0))),this.doCss()||"fade"!==e.mode||b!==!1||a.eq(c).fadeIn(e.speed),a.eq(c).addClass("active")}else a.removeClass("active"),a.eq(a.length-1).addClass("active"),this.doCss()||"fade"!==e.mode||b!==!1||(a.fadeOut(e.speed),a.eq(c).fadeIn(e.speed))},move:function(a,b){e.rtl===!0&&(b=-b),this.doCss()?a.css(e.vertical===!0?{transform:"translate3d(0px, "+-b+"px, 0px)","-webkit-transform":"translate3d(0px, "+-b+"px, 0px)"}:{transform:"translate3d("+-b+"px, 0px, 0px)","-webkit-transform":"translate3d("+-b+"px, 0px, 0px)"}):e.vertical===!0?a.css("position","relative").animate({top:-b+"px"},e.speed,e.easing):a.css("position","relative").animate({left:-b+"px"},e.speed,e.easing);var c=p.parent().find(".lSPager").find("li");this.active(c,!0)},fade:function(){this.active(h,!1);var a=p.parent().find(".lSPager").find("li");this.active(a,!0)},slide:function(){var a=this;z.calSlide=function(){m>o&&(t=a.slideValue(),a.active(h,!1),t>m-o-e.slideMargin?t=m-o-e.slideMargin:0>t&&(t=0),a.move(g,t),e.loop===!0&&"slide"===e.mode&&(q>=l-g.find(".clone.left").length/e.slideMove&&a.resetSlide(g.find(".clone.left").length),0===q&&a.resetSlide(p.find(".lslide").length)))},z.calSlide()},resetSlide:function(a){var b=this;p.find(".lSAction a").addClass("disabled"),setTimeout(function(){q=a,p.css("transition-duration","0ms"),t=b.slideValue(),b.active(h,!1),d.move(g,t),setTimeout(function(){p.css("transition-duration",e.speed+"ms"),p.find(".lSAction a").removeClass("disabled")},50)},e.speed+100)},slideValue:function(){var a=0;if(e.autoWidth===!1)a=q*(v+e.slideMargin)*e.slideMove;else{a=0;for(var b=0;q>b;b++)a+=parseInt(h.eq(b).width())+e.slideMargin}return a},slideThumb:function(){var a;switch(e.currentPagerPosition){case"left":a=0;break;case"middle":a=o/2-w/2;break;case"right":a=o-w}var b=q-g.find(".clone.left").length,c=p.parent().find(".lSPager");"slide"===e.mode&&e.loop===!0&&(b>=c.children().length?b=0:0>b&&(b=c.children().length));var d=b*(w+e.thumbMargin)-a;d+o>u&&(d=u-o-e.thumbMargin),0>d&&(d=0),this.move(c,d)},auto:function(){e.auto&&(clearInterval(x),x=setInterval(function(){g.goToNextSlide()},e.pause))},pauseOnHover:function(){var b=this;e.auto&&e.pauseOnHover&&(p.on("mouseenter",function(){a(this).addClass("ls-hover"),g.pause(),e.auto=!0}),p.on("mouseleave",function(){a(this).removeClass("ls-hover"),p.find(".lightSlider").hasClass("lsGrabbing")||b.auto()}))},touchMove:function(a,b){if(p.css("transition-duration","0ms"),"slide"===e.mode){var c=a-b,d=t-c;if(d>=m-o-e.slideMargin)if(e.freeMove===!1)d=m-o-e.slideMargin;else{var f=m-o-e.slideMargin;d=f+(d-f)/5}else 0>d&&(e.freeMove===!1?d=0:d/=5);this.move(g,d)}},touchEnd:function(a){if(p.css("transition-duration",e.speed+"ms"),"slide"===e.mode){var b=!1,c=!0;t-=a,t>m-o-e.slideMargin?(t=m-o-e.slideMargin,e.autoWidth===!1&&(b=!0)):0>t&&(t=0);var d=function(a){var c=0;if(b||a&&(c=1),e.autoWidth)for(var d=0,f=0;f=t));f++);else{var g=t/((v+e.slideMargin)*e.slideMove);q=parseInt(g)+c,t>=m-o-e.slideMargin&&g%1!==0&&q++}};a>=e.swipeThreshold?(d(!1),c=!1):a<=-e.swipeThreshold&&(d(!0),c=!1),g.mode(c),this.slideThumb()}else a>=e.swipeThreshold?g.goToPrevSlide():a<=-e.swipeThreshold&&g.goToNextSlide()},enableDrag:function(){var b=this;if(!y){var c=0,d=0,f=!1;p.find(".lightSlider").addClass("lsGrab"),p.on("mousedown",function(b){return o>m&&0!==m?!1:void("lSPrev"!==a(b.target).attr("class")&&"lSNext"!==a(b.target).attr("class")&&(c=e.vertical===!0?b.pageY:b.pageX,f=!0,b.preventDefault?b.preventDefault():b.returnValue=!1,p.scrollLeft+=1,p.scrollLeft-=1,p.find(".lightSlider").removeClass("lsGrab").addClass("lsGrabbing"),clearInterval(x)))}),a(window).on("mousemove",function(a){f&&(d=e.vertical===!0?a.pageY:a.pageX,b.touchMove(d,c))}),a(window).on("mouseup",function(g){if(f){p.find(".lightSlider").removeClass("lsGrabbing").addClass("lsGrab"),f=!1,d=e.vertical===!0?g.pageY:g.pageX;var h=d-c;Math.abs(h)>=e.swipeThreshold&&a(window).on("click.ls",function(b){b.preventDefault?b.preventDefault():b.returnValue=!1,b.stopImmediatePropagation(),b.stopPropagation(),a(window).off("click.ls")}),b.touchEnd(h)}})}},enableTouch:function(){var a=this;if(y){var b={},c={};p.on("touchstart",function(a){c=a.originalEvent.targetTouches[0],b.pageX=a.originalEvent.targetTouches[0].pageX,b.pageY=a.originalEvent.targetTouches[0].pageY,clearInterval(x)}),p.on("touchmove",function(d){if(o>m&&0!==m)return!1;var f=d.originalEvent;c=f.targetTouches[0];var g=Math.abs(c.pageX-b.pageX),h=Math.abs(c.pageY-b.pageY);e.vertical===!0?(3*h>g&&d.preventDefault(),a.touchMove(c.pageY,b.pageY)):(3*g>h&&d.preventDefault(),a.touchMove(c.pageX,b.pageX))}),p.on("touchend",function(){if(o>m&&0!==m)return!1;var d;d=e.vertical===!0?c.pageY-b.pageY:c.pageX-b.pageX,a.touchEnd(d)})}},build:function(){var b=this;b.initialStyle(),this.doCss()&&(e.enableTouch===!0&&b.enableTouch(),e.enableDrag===!0&&b.enableDrag()),a(window).on("focus",function(){b.auto()}),a(window).on("blur",function(){clearInterval(x)}),b.pager(),b.pauseOnHover(),b.controls(),b.keyPress()}},d.build(),z.init=function(){z.chbreakpoint(),e.vertical===!0?(o=e.item>1?e.verticalHeight:h.outerHeight(),p.css("height",o+"px")):o=p.outerWidth(),e.loop===!0&&"slide"===e.mode&&z.clone(),z.calL(),"slide"===e.mode&&g.removeClass("lSSlide"),"slide"===e.mode&&(z.calSW(),z.sSW()),setTimeout(function(){"slide"===e.mode&&g.addClass("lSSlide")},1e3),e.pager&&z.createPager(),e.adaptiveHeight===!0&&e.vertical===!1&&g.css("height",h.eq(q).outerHeight(!0)),e.adaptiveHeight===!1&&("slide"===e.mode?e.vertical===!1?d.setHeight(g,!1):d.auto():d.setHeight(g,!0)),e.gallery===!0&&d.slideThumb(),"slide"===e.mode&&d.slide(),e.autoWidth===!1?h.length<=e.item?p.find(".lSAction").hide():p.find(".lSAction").show():z.calWidth(!1)0)e.onBeforePrevSlide.call(this,g,q),q--,g.mode(!1),e.gallery===!0&&d.slideThumb();else if(e.loop===!0){if(e.onBeforePrevSlide.call(this,g,q),"fade"===e.mode){var a=l-1;q=parseInt(a/e.slideMove)}g.mode(!1),e.gallery===!0&&d.slideThumb()}else e.slideEndAnimation===!0&&(g.addClass("leftEnd"),setTimeout(function(){g.removeClass("leftEnd")},400))},g.goToNextSlide=function(){var a=!0;if("slide"===e.mode){var b=d.slideValue();a=b=q?b+(q-c):q>=b+c?q-b-c:q-c}return a+1},g.getTotalSlideCount=function(){return p.find(".lslide").length},g.goToSlide=function(a){q=e.loop?a+g.find(".clone.left").length-1:a,g.mode(!1),e.gallery===!0&&d.slideThumb()},g.destroy=function(){g.lightSlider&&(g.goToPrevSlide=function(){},g.goToNextSlide=function(){},g.mode=function(){},g.play=function(){},g.pause=function(){},g.refresh=function(){},g.getCurrentSlideCount=function(){},g.getTotalSlideCount=function(){},g.goToSlide=function(){},g.lightSlider=null,z={init:function(){}},g.parent().parent().find(".lSAction, .lSPager").remove(),g.removeClass("lightSlider lSFade lSSlide lsGrab lsGrabbing leftEnd right").removeAttr("style").unwrap().unwrap(),g.children().removeAttr("style"),h.removeClass("lslide active"),g.find(".clone").remove(),h=null,x=null,n=!1,q=0)},setTimeout(function(){e.onSliderLoad.call(this,g)},10),a(window).on("resize orientationchange",function(a){setTimeout(function(){a.preventDefault?a.preventDefault():a.returnValue=!1,z.init()},200)}),this}}(jQuery); \ No newline at end of file diff --git a/assets/js/lightSlider.min.js.gz b/assets/js/lightSlider.min.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..adae23f217169219b6a8272df315ac547f85b726 GIT binary patch literal 4949 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 T^WS@rA]+>/gi;var htmlAttribsRegex=/\s?[a-z:]+(?:=['"][^'">]+['"])*/gi;var matches=html.match(htmlRegex);if(matches&&matches.length){matches=matches[0].match(htmlAttribsRegex);if(matches.length){matches.shift();matches.forEach(function(htmlAttrib){var attr=htmlAttrib.trim().split("=");if(attr.length===1){tmpEl.documentElement.setAttribute(attr[0],true)}else{tmpEl.documentElement.setAttribute(attr[0],attr[1].slice(1,-1))}})}}tmpEl.documentElement.innerHTML=html;this.log("load content",tmpEl.documentElement.attributes,tmpEl.documentElement.innerHTML.length);if(document.activeElement&&contains(document,this.options.selectors,document.activeElement)){try{document.activeElement.blur()}catch(e){}}this.switchSelectors(this.options.selectors,tmpEl,document,options)},abortRequest:require("./lib/abort-request"),doRequest:require("./lib/send-request"),handleResponse:require("./lib/proto/handle-response"),loadUrl:function(href,options){options=typeof options==="object"?extend({},this.options,options):clone(this.options);this.log("load href",href,options);this.abortRequest(this.request);trigger(document,"pjax:send",options);this.request=this.doRequest(href,options,this.handleResponse.bind(this))},afterAllSwitches:function(){var autofocusEl=Array.prototype.slice.call(document.querySelectorAll("[autofocus]")).pop();if(autofocusEl&&document.activeElement!==autofocusEl){autofocusEl.focus()}this.options.selectors.forEach(function(selector){forEachEls(document.querySelectorAll(selector),function(el){executeScripts(el)})});var state=this.state;if(state.options.history){if(!window.history.state){this.lastUid=this.maxUid=newUid();window.history.replaceState({url:window.location.href,title:document.title,uid:this.maxUid,scrollPos:[0,0]},document.title)}this.lastUid=this.maxUid=newUid();window.history.pushState({url:state.href,title:state.options.title,uid:this.maxUid,scrollPos:[0,0]},state.options.title,state.href)}this.forEachSelectors(function(el){this.parseDOM(el)},this);trigger(document,"pjax:complete pjax:success",state.options);if(typeof state.options.analytics==="function"){state.options.analytics()}if(state.options.history){var a=document.createElement("a");a.href=this.state.href;if(a.hash){var name=a.hash.slice(1);name=decodeURIComponent(name);var curtop=0;var target=document.getElementById(name)||document.getElementsByName(name)[0];if(target){if(target.offsetParent){do{curtop+=target.offsetTop;target=target.offsetParent}while(target)}}window.scrollTo(0,curtop)}else if(state.options.scrollTo!==false){if(state.options.scrollTo.length>1){window.scrollTo(state.options.scrollTo[0],state.options.scrollTo[1])}else{window.scrollTo(0,state.options.scrollTo)}}}else if(state.options.scrollRestoration&&state.options.scrollPos){window.scrollTo(state.options.scrollPos[0],state.options.scrollPos[1])}this.state={numPendingSwitches:0,href:null,options:null}}};Pjax.isSupported=require("./lib/is-supported");if(Pjax.isSupported()){module.exports=Pjax}else{var stupidPjax=noop;for(var key in Pjax.prototype){if(Pjax.prototype.hasOwnProperty(key)&&typeof Pjax.prototype[key]==="function"){stupidPjax[key]=noop}}module.exports=stupidPjax}},{"./lib/abort-request":2,"./lib/events/on":4,"./lib/events/trigger":5,"./lib/execute-scripts":6,"./lib/foreach-els":7,"./lib/foreach-selectors":8,"./lib/is-supported":9,"./lib/parse-options":10,"./lib/proto/attach-form":11,"./lib/proto/attach-link":12,"./lib/proto/handle-response":13,"./lib/proto/log":14,"./lib/proto/parse-element":15,"./lib/send-request":16,"./lib/switches":18,"./lib/switches-selectors":17,"./lib/uniqueid":19,"./lib/util/clone":20,"./lib/util/contains":21,"./lib/util/extend":22,"./lib/util/noop":23}],2:[function(require,module,exports){var noop=require("./util/noop");module.exports=function(request){if(request&&request.readyState<4){request.onreadystatechange=noop;request.abort()}}},{"./util/noop":23}],3:[function(require,module,exports){module.exports=function(el){var code=el.text||el.textContent||el.innerHTML||"";var src=el.src||"";var parent=el.parentNode||document.querySelector("head")||document.documentElement;var script=document.createElement("script");if(code.match("document.write")){if(console&&console.log){console.log("Script contains document.write. Can’t be executed correctly. Code skipped ",el)}return false}script.type="text/javascript";script.id=el.id;if(src!==""){script.src=src;script.async=false}if(code!==""){try{script.appendChild(document.createTextNode(code))}catch(e){script.text=code}}parent.appendChild(script);if((parent instanceof HTMLHeadElement||parent instanceof HTMLBodyElement)&&parent.contains(script)){parent.removeChild(script)}return true}},{}],4:[function(require,module,exports){var forEachEls=require("../foreach-els");module.exports=function(els,events,listener,useCapture){events=typeof events==="string"?events.split(" "):events;events.forEach(function(e){forEachEls(els,function(el){el.addEventListener(e,listener,useCapture)})})}},{"../foreach-els":7}],5:[function(require,module,exports){var forEachEls=require("../foreach-els");module.exports=function(els,events,opts){events=typeof events==="string"?events.split(" "):events;events.forEach(function(e){var event;event=document.createEvent("HTMLEvents");event.initEvent(e,true,true);event.eventName=e;if(opts){Object.keys(opts).forEach(function(key){event[key]=opts[key]})}forEachEls(els,function(el){var domFix=false;if(!el.parentNode&&el!==document&&el!==window){domFix=true;document.body.appendChild(el)}el.dispatchEvent(event);if(domFix){el.parentNode.removeChild(el)}})})}},{"../foreach-els":7}],6:[function(require,module,exports){var forEachEls=require("./foreach-els");var evalScript=require("./eval-script");module.exports=function(el){if(el.tagName.toLowerCase()==="script"){evalScript(el)}forEachEls(el.querySelectorAll("script"),function(script){if(!script.type||script.type.toLowerCase()==="text/javascript"){if(script.parentNode){script.parentNode.removeChild(script)}evalScript(script)}})}},{"./eval-script":3,"./foreach-els":7}],7:[function(require,module,exports){module.exports=function(els,fn,context){if(els instanceof HTMLCollection||els instanceof NodeList||els instanceof Array){return Array.prototype.forEach.call(els,fn,context)}return fn.call(context,els)}},{}],8:[function(require,module,exports){var forEachEls=require("./foreach-els");module.exports=function(selectors,cb,context,DOMcontext){DOMcontext=DOMcontext||document;selectors.forEach(function(selector){forEachEls(DOMcontext.querySelectorAll(selector),cb,context)})}},{"./foreach-els":7}],9:[function(require,module,exports){module.exports=function(){return window.history&&window.history.pushState&&window.history.replaceState&&!navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]\D|WebApps\/.+CFNetwork)/)}},{}],10:[function(require,module,exports){var defaultSwitches=require("./switches");module.exports=function(options){options=options||{};options.elements=options.elements||"a[href], form[action]";options.selectors=options.selectors||["title",".js-Pjax"];options.switches=options.switches||{};options.switchesOptions=options.switchesOptions||{};options.history=typeof options.history==="undefined"?true:options.history;options.analytics=typeof options.analytics==="function"||options.analytics===false?options.analytics:defaultAnalytics;options.scrollTo=typeof options.scrollTo==="undefined"?0:options.scrollTo;options.scrollRestoration=typeof options.scrollRestoration!=="undefined"?options.scrollRestoration:true;options.cacheBust=typeof options.cacheBust==="undefined"?true:options.cacheBust;options.debug=options.debug||false;options.timeout=options.timeout||0;options.currentUrlFullReload=typeof options.currentUrlFullReload==="undefined"?false:options.currentUrlFullReload;if(!options.switches.head){options.switches.head=defaultSwitches.switchElementsAlt}if(!options.switches.body){options.switches.body=defaultSwitches.switchElementsAlt}return options};function defaultAnalytics(){if(window._gaq){_gaq.push(["_trackPageview"])}if(window.ga){ga("send","pageview",{page:location.pathname,title:document.title})}}},{"./switches":18}],11:[function(require,module,exports){var on=require("../events/on");var clone=require("../util/clone");var attrState="data-pjax-state";var formAction=function(el,event){if(isDefaultPrevented(event)){return}var options=clone(this.options);options.requestOptions={requestUrl:el.getAttribute("action")||window.location.href,requestMethod:el.getAttribute("method")||"GET"};var virtLinkElement=document.createElement("a");virtLinkElement.setAttribute("href",options.requestOptions.requestUrl);var attrValue=checkIfShouldAbort(virtLinkElement,options);if(attrValue){el.setAttribute(attrState,attrValue);return}event.preventDefault();if(el.enctype==="multipart/form-data"){options.requestOptions.formData=new FormData(el)}else{options.requestOptions.requestParams=parseFormElements(el)}el.setAttribute(attrState,"submit");options.triggerElement=el;this.loadUrl(virtLinkElement.href,options)};function parseFormElements(el){var requestParams=[];var formElements=el.elements;for(var i=0;i1||event.metaKey||event.ctrlKey||event.shiftKey||event.altKey){return"modifier"}if(el.protocol!==window.location.protocol||el.host!==window.location.host){return"external"}if(el.hash&&el.href.replace(el.hash,"")===window.location.href.replace(location.hash,"")){return"anchor"}if(el.href===window.location.href.split("#")[0]+"#"){return"anchor-empty"}}var isDefaultPrevented=function(event){return event.defaultPrevented||event.returnValue===false};module.exports=function(el){var that=this;el.setAttribute(attrState,"");on(el,"click",function(event){linkAction.call(that,el,event)});on(el,"keyup",function(event){if(event.keyCode===13){linkAction.call(that,el,event)}}.bind(this))}},{"../events/on":4,"../util/clone":20}],13:[function(require,module,exports){var clone=require("../util/clone");var newUid=require("../uniqueid");var trigger=require("../events/trigger");module.exports=function(responseText,request,href,options){options=clone(options||this.options);options.request=request;if(responseText===false){trigger(document,"pjax:complete pjax:error",options);return}var currentState=window.history.state||{};window.history.replaceState({url:currentState.url||window.location.href,title:currentState.title||document.title,uid:currentState.uid||newUid(),scrollPos:[document.documentElement.scrollLeft||document.body.scrollLeft,document.documentElement.scrollTop||document.body.scrollTop]},document.title,window.location.href);var oldHref=href;if(request.responseURL){if(href!==request.responseURL){href=request.responseURL}}else if(request.getResponseHeader("X-PJAX-URL")){href=request.getResponseHeader("X-PJAX-URL")}else if(request.getResponseHeader("X-XHR-Redirected-To")){href=request.getResponseHeader("X-XHR-Redirected-To")}var a=document.createElement("a");a.href=oldHref;var oldHash=a.hash;a.href=href;if(oldHash&&!a.hash){a.hash=oldHash;href=a.href}this.state.href=href;this.state.options=options;try{this.loadContent(responseText,options)}catch(e){trigger(document,"pjax:error",options);if(!this.options.debug){if(console&&console.error){console.error("Pjax switch fail: ",e)}return this.latestChance(href)}else{throw e}}}},{"../events/trigger":5,"../uniqueid":19,"../util/clone":20}],14:[function(require,module,exports){module.exports=function(){if(this.options.debug&&console){if(typeof console.log==="function"){console.log.apply(console,arguments)}else if(console.log){console.log(arguments)}}}},{}],15:[function(require,module,exports){var attrState="data-pjax-state";module.exports=function(el){switch(el.tagName.toLowerCase()){case"a":if(!el.hasAttribute(attrState)){this.attachLink(el)}break;case"form":if(!el.hasAttribute(attrState)){this.attachForm(el)}break;default:throw"Pjax can only be applied on or
      submit"}}},{}],16:[function(require,module,exports){var updateQueryString=require("./util/update-query-string");module.exports=function(location,options,callback){options=options||{};var queryString;var requestOptions=options.requestOptions||{};var requestMethod=(requestOptions.requestMethod||"GET").toUpperCase();var requestParams=requestOptions.requestParams||null;var formData=requestOptions.formData||null;var requestPayload=null;var request=new XMLHttpRequest;var timeout=options.timeout||0;request.onreadystatechange=function(){if(request.readyState===4){if(request.status===200){callback(request.responseText,request,location,options)}else if(request.status!==0){callback(null,request,location,options)}}};request.onerror=function(e){console.log(e);callback(null,request,location,options)};request.ontimeout=function(){callback(null,request,location,options)};if(requestParams&&requestParams.length){queryString=requestParams.map(function(param){return param.name+"="+param.value}).join("&");switch(requestMethod){case"GET":location=location.split("?")[0];location+="?"+queryString;break;case"POST":requestPayload=queryString;break}}else if(formData){requestPayload=formData}if(options.cacheBust){location=updateQueryString(location,"t",Date.now())}request.open(requestMethod,location,true);request.timeout=timeout;request.setRequestHeader("X-Requested-With","XMLHttpRequest");request.setRequestHeader("X-PJAX","true");request.setRequestHeader("X-PJAX-Selectors",JSON.stringify(options.selectors));if(requestPayload&&requestMethod==="POST"&&!formData){request.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}request.send(requestPayload);return request}},{"./util/update-query-string":24}],17:[function(require,module,exports){var forEachEls=require("./foreach-els");var defaultSwitches=require("./switches");module.exports=function(switches,switchesOptions,selectors,fromEl,toEl,options){var switchesQueue=[];selectors.forEach(function(selector){var newEls=fromEl.querySelectorAll(selector);var oldEls=toEl.querySelectorAll(selector);if(this.log){this.log("Pjax switch",selector,newEls,oldEls)}if(newEls.length!==oldEls.length){throw"DOM doesn’t look the same on new loaded page: ’"+selector+"’ - new "+newEls.length+", old "+oldEls.length}forEachEls(newEls,function(newEl,i){var oldEl=oldEls[i];if(this.log){this.log("newEl",newEl,"oldEl",oldEl)}var callback=switches[selector]?switches[selector].bind(this,oldEl,newEl,options,switchesOptions[selector]):defaultSwitches.outerHTML.bind(this,oldEl,newEl,options);switchesQueue.push(callback)},this)},this);this.state.numPendingSwitches=switchesQueue.length;switchesQueue.forEach(function(queuedSwitch){queuedSwitch()})}},{"./foreach-els":7,"./switches":18}],18:[function(require,module,exports){var on=require("./events/on");module.exports={outerHTML:function(oldEl,newEl){oldEl.outerHTML=newEl.outerHTML;this.onSwitch()},innerHTML:function(oldEl,newEl){oldEl.innerHTML=newEl.innerHTML;if(newEl.className===""){oldEl.removeAttribute("class")}else{oldEl.className=newEl.className}this.onSwitch()},switchElementsAlt:function(oldEl,newEl){oldEl.innerHTML=newEl.innerHTML;if(newEl.hasAttributes()){var attrs=newEl.attributes;for(var i=0;i for details.]# + +import std/[strutils, cgi, strtabs, cookies, sysrand, base64] +import guildenstern/[httpserver], sqliteral +import "../models/session", "db", "global" + +#[type + Session* = object + sessionId*, csrfToken*: string + id*, userId*: int]# +type + User* = object + email*, password*: string + id*: int + +proc getSessionBySessionId*(sessionId: string): Session = + {.gcsafe.}: + var session: Session + for row in db1.rows(SelectSessionBySessionId, sessionId): + session.id = row.getInt(0) + session.sessionId = row.getString(1) + session.userId = row.getInt(2) + session.csrfToken = row.getString(3) + return session + +proc createUserSession*(userSession: Session) = + {.gcsafe.}: + db1.transaction: + discard db1.insert(InsertUserSession, userSession.sessionId, userSession.userId, userSession.csrfToken) + +proc deleteSession*(sessionId: string) = + {.gcsafe.}: + db1.transaction: + db1.exec(DeleteSessionBySessionId, sessionId) + +#Both form and auth have this template. The form.nim copy is exported. +template formInput(input: string): untyped = + readData(getBody()).getOrDefault(input) + +proc getSessionIdFromCookies*(): string = + {.gcsafe.}: + let cookieString = http.headers.getOrDefault("cookie") + let allCookies = parseCookies(cookieString) + if allCookies.hasKey(APP_NAME & "_session"): + return allCookies[APP_NAME & "_session"] + else: + return "" + +proc setVisitorCsrfToken*(): string = + {.gcsafe.}: + #create csrf token. + var csrfToken = $urandom(32) + csrfToken = base64.encode(csrfToken) + #delete old VisitorSessions, as they are just the one time use CSRF Tokens. + #may need to be redesigned for better multiuser robustness if it's deleting other users' unused tokens. + #deleteVisitorSessions() + #create session in db. + var visitorSession: Session + visitorSession.csrfToken = csrfToken + discard createVisitorSession(visitorSession) + return csrfToken + +proc getUserPageCsrfToken*(): string = + {.gcsafe.}: + var sessionId: string + var userSession: Session + sessionId = getSessionIdFromCookies() + userSession = getSessionBySessionId(sessionId) + return userSession.csrfToken + +proc newCsrfToken*(): string = + {.gcsafe.}: + #create csrf token. + var csrfToken = $urandom(32) + csrfToken = base64.encode(csrfToken) + return csrfToken + +#[proc fCsrfToken*(): string = + {.gcsafe.}: + let sessionId = getSessionIdFromCookies() + let userSession = getUserSessionBySessionId(sessionId) + result = userSession.csrfToken]# + +proc isValidVisitorCsrfToken*(csrfToken: string): bool = + #our previoulsy self-generated, valid csrfToken from the DB. + let visitorSessionCsrfToken = getSessionByCsrfToken(csrfToken).csrfToken + if visitorSessionCsrfToken.len > 0 and csrfToken == visitorSessionCsrfToken: + return true + else: + return false + +proc isValidUserCsrfToken*(csrfToken: string): bool = + var sessionId: string + var userSession: Session + sessionId = getSessionIdFromCookies() + userSession = getSessionBySessionId(sessionId) + if userSession.csrfToken == csrfToken: + return true + else: + return false + +proc isAuthdAdmin*(): bool = + {.gcsafe.}: + #get sessionId from request's cookie and see if it exists in session DB. + var sessionId: string + sessionId = getSessionIdFromCookies() + if sessionId.len() > 0: + var userSession: Session + try: + userSession = getSessionBySessionId(sessionId) + if userSession.id > 0: + return true + else: + return false + except Exception as e: + echo e.msg + return false + else: + return false + +#adds CSRF checking for POST requests. +proc isAuthdAdminPost*(): bool = + {.gcsafe.}: + #get sessionId from request's cookie and see if it exists in session DB. + #var sessionId{.threadvar.}: string + var sessionId: string + sessionId = getSessionIdFromCookies() + if sessionId.len() > 0: + try: + let userSession = getSessionBySessionId(sessionId) + if userSession.id > 0: + return true + else: + return false + except Exception as e: + echo e.msg + return false + else: + return false + +template ifAuthAdminPost*(procName: untyped): untyped = + if isAuthdAdminPost() == true: + procName + else: + reply(Http302, [location("/login")]) diff --git a/helpers/datetime.nim b/helpers/datetime.nim new file mode 100644 index 0000000..398d5b9 --- /dev/null +++ b/helpers/datetime.nim @@ -0,0 +1,152 @@ +import std/[times, strutils] + +proc weekdayFromString(dayStr: string): Weekday = + ## Convert a string representation of a weekday to Weekday enum + case dayStr + of "Monday": return dMon + of "Tuesday": return dTue + of "Wednesday": return dWed + of "Thursday": return dThu + of "Friday": return dFri + of "Saturday": return dSat + of "Sunday": return dSun + +proc monthFromString(monthStr: string): Month = + ## Convert a string representation of a weekday to Weekday enum + case monthStr + of "January": return mJan + of "Febuary": return mFeb + of "March": return mMar + of "April": return mApr + of "May": return mMay + of "June": return mJun + of "July": return mJul + of "August": return mAug + of "September": return mSep + of "October": return mOct + of "November": return mNov + of "December": return mDec + +proc nextWeekday*(targetWeekdayString: string): DateTime = + ## Calculates the next occurrence of a specific weekday + var nextDate = now() + # We're not including current day, so we move to the next day + nextDate = nextDate + 1.days + #convert passed weekday string to nim Weekday. + let targetWeekday = weekdayFromString(targetWeekdayString) + # Find the next occurrence of the target weekday + while nextDate.weekday != targetWeekday: + nextDate = nextDate + 1.days + return nextDate + +proc nthWeekdayInMonth*(year: int, month: Month, weekdayString: string, nth: range[1..3]): DateTime = + # Start from the first day of the month + #var currentDate = dateTime(year, month, 1, 0, 0, 0, 0) + var currentDate = dateTime(year, month, 1) + let weekday = weekdayFromString(weekdayString) + # Find the first occurrence of the specified weekday + while currentDate.weekday != weekday: + currentDate = currentDate + 1.days + # Move to the nth occurrence + currentDate = currentDate + days((nth - 1) * 7) + return currentDate + +proc lastWeekdayInMonth(year: int, month: Month, weekdayString: string): DateTime = + # Create a DateTime for the last day of the given month + #var lastDay = dateTime(year, month, getDaysInMonth(month, year), 0, 0, 0, 0) + var lastDay = dateTime(year, month, getDaysInMonth(month, year)) + let weekday = weekdayFromString(weekdayString) + # Work backwards until we find the last occurrence of the specified weekday + while lastDay.weekday != weekday: + lastDay = lastDay - 1.days + return lastDay + +proc nextMonthlyOnWeekdayOfWeek*(weekdayString: string, ocurrence: string): DateTime = + var nextSendDate: DateTime + let nextMonthsDate = now() + 1.months + let weekNumStrings = @["1", "2", "3"] + if ocurrence in weekNumStrings: + nextSendDate = nthWeekdayInMonth(year(nextMonthsDate), month(nextMonthsDate), weekdayString, parseInt(ocurrence)) + #when ocurrence == "last". + else: + nextSendDate = lastWeekdayInMonth(year(nextMonthsDate), month(nextMonthsDate), weekdayString) + #only use next month if that day has already occured this month, otherwise adjust it for this month instead. + if monthDay(nextSendDate - 1.months) > monthDay(now()): + if ocurrence in weekNumStrings: + nextSendDate = nthWeekdayInMonth(year(nextMonthsDate), month(now()), weekdayString, parseInt(ocurrence)) + else: + nextSendDate = lastWeekdayInMonth(year(nextMonthsDate), month(now()), weekdayString) + return nextSendDate + +proc nextYearlyOnWeekdayOfWeekOfMonth*(weekdayString, ocurrence, monthString: string): DateTime = + var nextSendDate, startingDate: DateTime + let nextYearsDate = now() + 1.years + #let startingDate = dateTime(year(nextYearsDate), monthFromString(monthString), 01, 0, 0, 0, 0) + startingDate = dateTime(year(nextYearsDate), monthFromString(monthString), 01) + let weekNumStrings = @["1", "2", "3"] + if ocurrence in weekNumStrings: + nextSendDate = nthWeekdayInMonth(year(startingDate), month(startingDate), weekdayString, parseInt(ocurrence)) + #when ocurrence == "last". + else: + nextSendDate = lastWeekdayInMonth(year(startingDate), month(startingDate), weekdayString) + #only use next year if that month and day has already occured this year, otherwise adjust it for this year instead. + if nextSendDate - 1.years > now(): + startingDate = dateTime(year(now()), monthFromString(monthString), 01) + let weekNumStrings = @["1", "2", "3"] + if ocurrence in weekNumStrings: + nextSendDate = nthWeekdayInMonth(year(startingDate), month(startingDate), weekdayString, parseInt(ocurrence)) + #when ocurrence == "last". + else: + nextSendDate = lastWeekdayInMonth(year(startingDate), month(startingDate), weekdayString) + return nextSendDate + +#[proc nextYearDate*(monthString: string, day: int): DateTime = + ## Aalways returns a date in the next year, + ## regardless of whether the target date has passed in the current year + #var nextSendDate = dateTime(year(now()) + 1, monthFromString(monthString), day, 0, 0, 0, 0) + #var nextSendDate = dateTime(year(now()) + 1, monthFromString(monthString), day) + #let nextSendDateString = + #echo nextSendDate + #return parse($nextSendDate, "yyyy-MM-dd") + var + let nextYear = year(now()) + 1 + let dt = dateTime(nextYear, monthFromString(monthString), day, 00, 00, 00, 00) + #echo dt + let nextSendDateString = format(dt, "yyyy-MM-dd") + #echo nextSendDateString + #let nextSendDateString = $nextYear & "-" & formattedMonthString & "-" & $day + let nextSendDate = parse(nextSendDateString, "yyyy-MM-dd") + #echo nextSendDateString + return nextSendDate]# + +proc nextYearlyDate*(monthString: string, targetDay: int): DateTime = + ## Calculates a date for the next occurrence of a specific month and day + ## + ## Parameters: + ## - baseDate: The starting date to calculate from + ## - targetMonth: The month (Month enum) for the target date + ## - targetDay: The day of month for the target date + ## + ## Returns the next occurrence of the specified month and day, which could be: + ## - Later this year if the target date hasn't occurred yet + ## - Next year if the target date has already passed this year + + let baseDate = now() + let targetMonth = monthFromString(monthString) + + # Get the current year + let currentYear = baseDate.year + + # Create a DateTime for the target date in the current year + var nextSendDate = dateTime(currentYear, targetMonth, targetDay, 00, 00, 00, 00) + + # If the target date has already passed this year, move to next year + if nextSendDate <= baseDate: + nextSendDate = dateTime(currentYear + 1, targetMonth, targetDay, 00, 00, 00, 00) + + let nextSendDateString = format(nextSendDate, "yyyy-MM-dd") + #echo nextSendDateString + #let nextSendDateString = $nextYear & "-" & formattedMonthString & "-" & $day + nextSendDate = parse(nextSendDateString, "yyyy-MM-dd") + + return nextSendDate diff --git a/helpers/db.nim b/helpers/db.nim new file mode 100644 index 0000000..f524a9a --- /dev/null +++ b/helpers/db.nim @@ -0,0 +1,35 @@ +#[Copyright 2024 ITwrx. +This file is part of Simple Site Manager. +Simple Site Manager is released under the GNU Affero General Public License 3.0. +See COPYING or for details.]# + +import sqliteral + +#### Db1 ### +const RemindersSchema* = "CREATE TABLE IF NOT EXISTS Reminders(id INTEGER PRIMARY KEY, title TEXT, message TEXT, notify_via TEXT, repeats INTEGER, repeat_freq TEXT, weekly_on TEXT, monthly_on_day INTEGER, monthly_on_weekday TEXT, monthly_on_week TEXT, yearly_on_month TEXT, yearly_on_day INTEGER, yearly_on_week TEXT, yearly_on_weekday TEXT, yearly_on_month2 TEXT, send_date TEXT, send_time_hr INTEGER, send_time_min INTEGER, send_time_am_pm TEXT)" +const UsersSchema* = "CREATE TABLE IF NOT EXISTS Users(id INTEGER PRIMARY KEY, email TEXT NOT NULL, password TEXT NOT NULL)" +const SessionsSchema* = "CREATE TABLE IF NOT EXISTS Sessions(id INTEGER PRIMARY KEY, session_id TEXT, user_id INTEGER, csrf_token TEXT NOT NULL)" + +type + Db1Sql* = enum + #Reminders + SelectAllReminders = "SELECT * FROM Reminders" + InsertReminder = """INSERT INTO Reminders (title, message, notify_via, repeats, repeat_freq, weekly_on, monthly_on_day, monthly_on_weekday, monthly_on_week, yearly_on_month, yearly_on_day, yearly_on_week, yearly_on_weekday, yearly_on_month2, send_date, send_time_hr, send_time_min, send_time_am_pm) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)""" + UpdateReminder = """UPDATE Reminders SET title = ?, message = ?, notify_via = ?, repeats = ?, repeat_freq = ?, weekly_on = ?, monthly_on_day = ?, monthly_on_weekday = ?, monthly_on_week = ?, yearly_on_month = ?, yearly_on_day = ?, yearly_on_week = ?, yearly_on_weekday = ?, yearly_on_month2 = ?, send_date = ?, send_time_hr = ?, send_time_min = ?, send_time_am_pm = ? WHERE id = ?""" + UpdateReminderSendDate = """UPDATE Reminders SET send_date = ? WHERE id = ?""" + DeleteReminder = """DELETE FROM Reminders WHERE id = ?""" + #Users + SelectUsersByEmail = """SELECT * FROM Users WHERE email = ?""" + SelectUserById = """SELECT * FROM Users WHERE id = ? LIMIT 1""" + InsertUser = """INSERT INTO Users (email, password) VALUES (?,?)""" + #Sessions + SelectSessions = "SELECT * FROM Sessions" + SelectSessionBySessionId = "SELECT * FROM Sessions WHERE session_id = ?" + InsertUserSession = """INSERT INTO Sessions (session_id, user_id, csrf_token) VALUES (?,?,?)""" + DeleteSessionBySessionId = """DELETE FROM Sessions WHERE session_id = ?""" + DeleteSessions = """DELETE FROM Sessions""" + SelectSessionByCsrfToken = """SELECT * FROM Sessions WHERE csrf_token = ?""" + InsertVisitorSession = """INSERT INTO Sessions (csrf_token) VALUES (?)""" + +var + db1*: SQLiteral diff --git a/helpers/form.nim b/helpers/form.nim new file mode 100644 index 0000000..3d8c99a --- /dev/null +++ b/helpers/form.nim @@ -0,0 +1,211 @@ +#[Copyright 2025 ITwrx. +This file is part of Simple Site Manager. +Simple Site Manager is released under the GNU Affero General Public License 3.0. +See COPYING or for details.]# + +import std/[cgi, strtabs, strutils, cookies, uri, tables] +import jsony, guildenstern/httpserver, sqliteral +import "auth", "global" + +type + FormError* = object + fieldName*, fieldMessage*: string +type + FormOldInput* = object + fieldName*, fieldOldInput*: string +type + FormResult* = object + id*: int + message*, messageClass*, errors*, oldInputs*: string + +var formError*: FormError +var formErrors*: seq[FormError] +var formOldInput*: FormOldInput +var formOldInputs*: seq[FormOldInput] +var formResult*: FormResult + +#might still be in use by cookie FR type. too lazy to investigate now. +proc clearFormResult*() = + formResult = FormResult(message : "", + messageClass : "", + errors : "", + oldInputs : "") + +proc assignErrorFR*(formErrors: seq[FormError], formOldInputs: seq[FormOldInput]): FormResult = + {.gcsafe.}: + formResult.message = "Error(s) encountered while validating form input(s)." + formResult.messageClass = "form-error" + formResult.errors = toJson(formErrors) + formResult.oldInputs = toJson(formOldInputs) + +proc assignGeneralErrorFR*(errorMsg: string): FormResult = + {.gcsafe.}: + formResult.message = errorMsg + formResult.messageClass = "form-error" + +proc assignGeneralSuccessFR*(successMsg: string): FormResult = + {.gcsafe.}: + formResult.message = successMsg + formResult.messageClass = "form-success" + +proc assignLoginSuccessFR*(): FormResult = + {.gcsafe.}: + formResult.message = "You have logged in successfully." + formResult.messageClass = "form-success" + +proc assignCECreateSuccessFR*(): FormResult = + {.gcsafe.}: + formResult.message = "Content Entity successfully created." + formResult.messageClass = "form-success" + +proc assignCEEditSuccessFR*(): FormResult = + {.gcsafe.}: + formResult.message = "Content Entity successfully edited." + formResult.messageClass = "form-success" + +proc assignCEDeleteSuccessFR*(): FormResult = + {.gcsafe.}: + formResult.message = "Content Entity successfully deleted." + formResult.messageClass = "form-success" + +#using cookie to store login page formResult, because there's no session to use as formResult id yet. +proc getCookieFormResult*(): FormResult = + let cookieString = http.headers.getOrDefault("cookie") + let cookiesTable = parseCookies(cookieString) + var frJsonString: string + if cookiesTable.hasKey("form_result"): + frJsonString = cookiesTable["form_result"] + var formResult: FormResult + if frJsonString.len > 0: + formResult = frJsonString.fromJson(FormResult) + formErrors = @[] + clearFormResult() + if not formResult.message.len > 0: + formResult.id = 0 + formResult.message = "" + formResult.messageClass = "" + formResult.errors = "" + formResult.oldInputs = "" + return formResult + +#using strtabs for storing all other formResults. +proc getFormResult*(): FormResult = + let sessionId = getSessionIdFromCookies() + var frJsonString, strTabSessionId: string + if frStrTab.hasKey("sessionId"): + strTabSessionId = frStrTab["sessionId"] + if strTabSessionId == sessionId: + if frStrTab.hasKey("frJson"): + frJsonString = frStrTab["frJson"] + var newFormResult: FormResult + if frJsonString.len > 0: + newFormResult = frJsonString.fromJson(FormResult) + #reset formErrors seq variable used in form handlers. + formErrors = @[] + #clear the existing formResult so it won't show on next page's GET (without new POST). + clear(frStrTab, modeCaseSensitive) + if not newFormResult.message.len > 0: + newFormResult.id = 0 + newFormResult.message = "" + newFormResult.messageClass = "" + newFormResult.errors = "" + newFormResult.oldInputs = "" + return newFormResult + +proc setFR*() = + let sessionId = getSessionIdFromCookies() + let frJson = formResult.toJson() + frStrTab = {"sessionId": sessionId, "frJson": frJson}.newStringTable + +proc formInput*(input: string): string = + {.gcsafe.}: + if server.contenttype == Compact: + #readData:cgi, getBody:Guildenstern, getOrDefault:strtabs. + return readData(getBody()).getOrDefault(input) + else: + #getMPStringInput(input: string) + echo "not url-encoded" + +proc formInputAll*(): Table[string, string] = + {.gcsafe.}: + if server.contenttype == Compact: + #getBody:Guildenstern + let formDataStr = getBody() + var formData = initTable[string, string]() + # Use decodeQuery from the uri module + for (key, value) in decodeQuery(formDataStr): + formData[key] = value + return formData + else: + echo "not url-encoded" + +proc formInputInt*(input: string): int = + {.gcsafe.}: + let readInput = readData(getBody()).getOrDefault(input) + return parseIntIf(readInput) + +template formInputSeq*(input: string): seq[string] = + {.gcsafe.}: + readData(getBody()).getOrDefault(input) + +proc addFormError*(inputName: string, msgString: string) = + {.gcsafe.}: + formError.fieldName = inputName + formError.fieldMessage = msgString + formErrors.add(formError) + +proc addFormOldInput*(inputName: string, inputData: string) = + {.gcsafe.}: + formOldInput.fieldName = inputName + formOldInput.fieldOldInput = inputData + formOldInputs.add(formOldInput) + +#takes a fieldName and returns the fieldMessage. +proc fFieldMsg*(fr: FormResult, fieldName: string): string = + {.gcsafe.}: + if fr.errors.len() > 0: + let errors = fromJson(fr.errors, seq[FormError]) + for error in errors: + if error.fieldName == fieldName: + return error.fieldMessage + +#this may need to handle more than one message per form field at some point, but not for this app (yet). +proc fErrorMsg*(fr: FormResult, fieldName:string): string = + {.gcsafe.}: + if fFieldMsg(fr, fieldName).len > 0: + return """""" & fFieldMsg(fr, fieldName) & "
      " + +#takes a fieldName and returns the fieldOldInput. +proc fOldInput*(fr: FormResult, fieldName: string, defaultValue = ""): string = + {.gcsafe.}: + var fieldOldInput: string + if fr.oldInputs.len() > 0: + let oldInputs = fromJson(fr.oldInputs, seq[FormOldInput]) + for oldInput in oldInputs: + if oldInput.fieldName == fieldName: + fieldOldInput = oldInput.fieldOldInput + return fieldOldInput + else: + return defaultValue + +proc getOldInputJson*(): string = + {.gcsafe.}: + let postData = readData(getBody()) + #pairs is a strtabs iterator. + for key,value in pairs(postData): + if key.len() > 0: + if key != "password" and key != "csrf_token": + addFormOldInput(key, value) + return toJson(formOldInputs) + +#the empty string defaultValue makes it possible to optionally supply a value from the DB: as needed in edit forms. +#checked proc works on radios and checboxes. +proc checked*(fr: FormResult, groupName: string, targetValue: string, defaultValue = ""): string = + {.gcsafe.}: + if fOldInput(fr, groupName, defaultValue) == targetValue: + return "checked" + +proc selected*(fr: FormResult, selectName: string, targetValue: string, defaultValue = ""): string = + {.gcsafe.}: + if fOldInput(fr, selectName, defaultValue) == targetValue: + return "selected='selected'" diff --git a/helpers/global.nim b/helpers/global.nim new file mode 100644 index 0000000..505b9db --- /dev/null +++ b/helpers/global.nim @@ -0,0 +1,90 @@ +#import std/[times, logging] +import std/[times, strutils, re, uri, paths, random, strtabs] + +#universal +const APP_PATH* = "/var/www/forget-me-not-gs" +const ASSETS_PATH* = "/var/www/forget-me-not-gs/app/assets" +const APP_NAME* = "Forget-Me-Not" +const APP_MODE* = "dev" +#dev +const APP_URL* = "http://fmn-gs" +#const SITE_URL* = "http://" +const ASSETS_URL* = "http://assets.fmn-gs" +#prod +#const APP_URL* = "https://ssm.itwrx.org" +#const SITE_URL* = "https://itwrx.org" +#const ASSETS_URL* = "https://assets.itwrx.org" + +var frStrTab* = newStringTable() + +#Guildensterns logger is conflicting with my, evidently incorrect, usage of the std lib logger so i'll just write some lines to a file for now. +#var logger* = newFileLogger("errors.log") + +let dt = now() +let nowDT* = dt.format("M-d-YYYY h:mm:ss tt") + +proc writeLogLine*(errorMsg: string) = + {.gcsafe.}: + let logFile = open("errors.log", fmAppend) + defer: logFile.close() + logFile.writeLine(errorMsg) + +#template location*(slug: string, csrfToken: string, fr: FormResult): untyped = +template location*(slug: string): untyped = + "location: " & APP_URL & slug + +template locationBack*(): string = + "location: " & http.headers.getOrDefault("referer") + +template locationOrigin*(origin: string): untyped = + "location: " & origin + +proc filenameToSentence*(filename: string): string = + #remove file extension. + let filePath = Path filename + let filePathEnum = splitFile(filePath) + var name = filePathEnum[1].string + #replace dashes and underscores with spaces. + name = name.replace(re"_", " ") + name = name.replace(re"-", " ") + #strip numbers. + name = name.replace(re"[0-9]", "") + return name + +proc titleToSlug*(title: string): string = + #replace one or more spaces with dash + var dataString = title.replace(re" +", "-") + #replace anything that is not a letter, number or underscore with nothing. + dataString = dataString.replace(re"[^a-zA-Z0-9-]", "") + #convert to all lowercase. + dataString = dataString.toLowerAscii() + return dataString + +proc getIdFromURI*(uri: string): int = + #let parsedUri = parseUri(uri) + let pathSeq = parseUri(uri).path.split('/') + result = strutils.parseInt(pathSeq[2]) + +proc parseIntIf*(input: string): int = + if input.len > 0: + return parseInt(input) + else: + return 0 + +proc parseFloatIf*(input: string): float = + if input.len > 0: + return parseFloat(input) + else: + return 0.0 + +#not cryptographically secure. +proc rndStr20*(): string = + for _ in 0..20: + add(result, char(rand(int('A') .. int('z')))) + +proc boolToInt*(myBool: bool): int = + if myBool == true: + return 1 + else: + return 0 + diff --git a/helpers/reminder.nim b/helpers/reminder.nim new file mode 100644 index 0000000..2a7ac31 --- /dev/null +++ b/helpers/reminder.nim @@ -0,0 +1,90 @@ +import std/[times, osproc, strutils], smtp +import ../models/reminder, ../models/user, datetime + +proc setFutureSendDate(reminderId: int) = + var reminder: Reminder + reminder = getReminderById(reminderId) + var newSendDate: DateTime + case reminder.repeatFreq: + of "day": + newSendDate = now() + 1.days + reminder.sendDate = $format(newSendDate, "yyyy-MM-dd") + updateReminderSendDate(reminder) + of "week": + newSendDate = nextWeekday(reminder.weeklyOn) + reminder.sendDate = $format(newSendDate, "yyyy-MM-dd") + updateReminderSendDate(reminder) + of "month": + if reminder.monthlyOnDay > 0: + #create DateTime with current month and year and reminder.monthlyOnDay + newSendDate = dateTime(year(now()), month(now()), reminder.monthlyOnDay) + #add 1 month only if monthlyOnDay hasn't occured in current month yet. + if reminder.monthlyOnDay < monthDay(now()): + newSendDate = newSendDate + 1.months + reminder.sendDate = $format(newSendDate, "yyyy-MM-dd") + updateReminderSendDate(reminder) + else: + #monthly on week number and weekday. e.g. "third thursday of every month". + newSendDate = nextMonthlyOnWeekdayOfWeek($reminder.monthlyOnWeekday, $reminder.monthlyOnWeek) + reminder.sendDate = $format(newSendDate, "yyyy-MM-dd") + updateReminderSendDate(reminder) + of "year": + #yearly on month and day. + #string zeros (db artifacts) have a length of 1... + if reminder.yearlyOnMonth.len() > 1: + newSendDate = nextYearlyDate(reminder.yearlyOnMonth, reminder.yearlyOnDay) + reminder.sendDate = $format(newSendDate, "yyyy-MM-dd") + updateReminderSendDate(reminder) + #yearly on weekday of week of month. e.g. third thursday of november of each year. + else: + newSendDate = nextYearlyOnWeekdayOfWeekOfMonth($reminder.yearlyOnWeekday, $reminder.yearlyOnWeek, $reminder.yearlyOnMonth2) + reminder.sendDate = $format(newSendDate, "yyyy-MM-dd") + updateReminderSendDate(reminder) + else: + echo "Invalid value for reminder.repeatFreq in setFutureSendDate()" + clearAllReminders() + +proc sendEmail(reminderMsg: string) = + let userEmailAddress = getEmailByUserId("1") + let headers = @[("From", "mailer@itwrx.org")] + let msg = createMessage("Reminder from Forget-Me-Not", reminderMsg, @[userEmailAddress], mCc = @[""], otherHeaders = headers) + {.cast(raises: []).}: + let smtpConn = newSmtp(debug=false) + smtpConn.connect("email.itwrx.org", Port 587) + smtpConn.startTls() + smtpConn.auth("mailer@itwrx.org", ".AQ8u((xB(AgZh^a`jEJ~W~{0Eq?fd$") + #loop through email messages and send to reuse connection? + smtpConn.sendmail("mailer@itwrx.org", @[userEmailAddress], $msg) + #manually closing not necessary? + smtpConn.close() + +proc sendXMPP(reminderMsg: string) = + var output: string + var status: int + (output, status) = execCmdEx("xmppc -m message chat itwrx@sec-chat.itwrx.org \"" & reminderMsg & "\"") + if status != 0: + #log this later instead. + echo output + echo "error sending XMPP msg" + +#send reminders that haven't been sent yet and set new sendDate (if repeating). +proc sendReminders*() = + let nowDT = now() + let reminders = getAllReminders() + for reminder in reminders: + let sendDateDTString = $reminder.sendDate & " " & $reminder.sendTimeHr & ":" & $reminder.sendTimeMin & ":" & $reminder.sendTimeAmPm + #single digits for minutes, as db send_time_min is integer and won't use "00", which results in runtime parse error. + let sendDateDT = parse(sendDateDTString, "yyyy-M-d h:m:tt") + #if sendDate is not in the future, it hasn't been sent yet (we are changing sendDate to future date during each send) and needs to be sent. + if sendDateDT <= nowDT: + #send reminder notification + case reminder.notifyVia: + of "email": + sendEmail(reminder.message) + of "xmpp": + sendXMPP(reminder.message) + else: + sendXMPP(reminder.message) + sendEmail(reminder.message) + if reminder.repeats == 1: + setFutureSendDate(reminder.id) diff --git a/helpers/validation.nim b/helpers/validation.nim new file mode 100644 index 0000000..25e350d --- /dev/null +++ b/helpers/validation.nim @@ -0,0 +1,226 @@ +#[Copyright 2024 ITwrx. +This file is part of ITwrxorg-SiteUpdata. +ITwrxorg-SiteUpdata is released under the GNU Affero General Public License 3.0. +See COPYING or for details.]# + +import std/[strutils, re, typetraits, times, tables] +import valido/[email, password] +import "form", "global" + +var msgString{.threadvar.}: string + +proc vSize(sizeName: string, sizeValue: int, inputName: string, inputData: string, inputType: string) = + case sizeName: + of "min": + #how we determine size depends on input type. + case inputType: + of "string": + if not (inputData.len >= sizeValue): + msgString = inputName & " must have a character count of at least " & $sizeValue & " ." + addFormError(inputName, msgString) + of "integer": + if not (parseIntIf(inputData) >= sizeValue): + msgString = inputName & " must have a value of at least " & $sizeValue & " ." + addFormError(inputName, msgString) + of "float": + if not (parseFloat(inputData) >= sizeValue.float): + msgString = inputName & " must have a value of at least " & $sizeValue & " ." + addFormError(inputName, msgString) + of "max": + #how we determine size depends on input type. + case inputType: + of "string": + if inputData.len > sizeValue: + msgString = inputName & " must have a character count that is no greater than " & $sizeValue & " ." + addFormError(inputName, msgString) + of "integer": + if parseIntIf(inputData) > sizeValue: + msgString = inputName & " must have a value that is no greater than " & $sizeValue & " ." + addFormError(inputName, msgString) + of "float": + if parseFloat(inputData) > sizeValue.float: + msgString = inputName & " must have a value that is no greater than " & $sizeValue & " ." + addFormError(inputName, msgString) + +proc vType(inputName: string, inputData: string, validators: seq[string]): string = + var inputType: string + if "integer" in validators: + try: + #don't try to parse empty string as int. + if inputData.len > 0: + discard parseIntIf(inputData) + inputType = "integer" + except: + msgString = inputName & " must be a whole number." + addFormError(inputName, msgString) + elif "float" in validators: + try: + discard parseFloat(inputData) + inputType = "float" + except: + msgString = inputName & " must be a floating point number; a number with a decimal point. i.e. '1.5'" + addFormError(inputName, msgString) + elif "boolean" in validators: + if (inputData == "true") or not (inputData == "false"): + msgString = inputName & " must be interpretable as a boolean. i.e. true, or false." + addFormError(inputName, msgString) + inputType = "boolean" + else: + inputType = "string" + return inputType + +proc vRegex(inputName: string, inputData: string, inputType: string, validators: seq[string]) = + #check for regex validators. + for v in validators: + if match(v, re"^(min):([0-9]+)$"): + #get size's value from the string. + let vNameSeq = v.split(':') + let sizeName = vNameSeq[0] + let sizeValue = parseIntIf(vNameSeq[1]) + vSize(sizeName, sizeValue, inputName, inputData, inputType) + if match(v, re"^(max):([0-9]+)$"): + let vNameSeq = v.split(':') + let sizeName = vNameSeq[0] + let sizeValue = parseIntIf(vNameSeq[1]) + vSize(sizeName, sizeValue, inputName, inputData, inputType) + #ex. matches: "required_without:parent_id" + if match(v, re"^(required_without):([a-z_]+)$"): + let vNameSeq = v.split(':') + #skip 0 index, as that's just the name of the validator. + let conditionField = vNameSeq[1] + var conditionFieldInputData{.threadvar.}: string + conditionFieldInputData = formInput(conditionField) + if conditionFieldInputData.len == 0: + if inputData.len == 0: + msgString = inputName & " is required when " & conditionField & " isn't set." + addFormError(inputName, msgString) + if match(v, re"^(must_unset_with):([a-z_]+)$"): + let vNameSeq = v.split(':') + #skip 0 index, as that's just the name of the validator. + let conditionField = vNameSeq[1] + var conditionFieldInputData: string + conditionFieldInputData = formInput(conditionField) + if conditionFieldInputData.len > 0: + if inputData.len > 0: + msgString = inputName & " must be empty if " & conditionField & " is not." + addFormError(inputName, msgString) + if match(v, re"^(required_with):([a-z_]+)$"): + let vNameSeq = v.split(':') + #skip 0 index, as that's just the name of the validator. + let conditionField = vNameSeq[1] + var conditionFieldInputData: string + conditionFieldInputData = formInput(conditionField) + if conditionFieldInputData.len > 0: + if inputData.len == 0: + msgString = inputName & " is also required when " & conditionField & " is set." + addFormError(inputName, msgString) + if match(v, re"^(required_with):([a-z_]+):(without):([a-z_]+)$"): + let vNameSeq = v.split(':') + #skip 0 index, as that's just the name of the validator. + let conditionField1 = vNameSeq[1] + var conditionField1InputData: string + conditionField1InputData = formInput(conditionField1) + let conditionField2 = vNameSeq[3] + var conditionField2InputData: string + conditionField2InputData = formInput(conditionField2) + if conditionField1InputData.len > 0 and not conditionField2InputData.len > 0: + if inputData.len == 0: + msgString = inputName & " is required when " & conditionField1 & " is set and " & conditionField2 & " isn't set." + addFormError(inputName, msgString) + if match(v, re"^(required_with):([a-z_]+):(without):([a-z_]+):(and_without):([a-z_]+)$"): + let vNameSeq = v.split(':') + #skip 0 index, as that's just the name of the validator. + let conditionField1 = vNameSeq[1] + var conditionField1InputData: string + conditionField1InputData = formInput(conditionField1) + let conditionField2 = vNameSeq[3] + var conditionField2InputData: string + conditionField2InputData = formInput(conditionField2) + let conditionField3 = vNameSeq[5] + var conditionField3InputData: string + conditionField3InputData = formInput(conditionField3) + if conditionField1InputData.len > 0 and not conditionField2InputData.len > 0 and not conditionField3InputData.len > 0: + if inputData.len == 0: + msgString = inputName & " is required when " & conditionField1 & " is set and " & conditionField2 & " and " & conditionField3 & " aren't set." + addFormError(inputName, msgString) + if match(v, re"^(required_when):([a-z_]+):(equals):([a-z_]+)$"): + let vNameSeq = v.split(':') + #skip 0 index, as that's just the name of the validator. + let conditionField1 = vNameSeq[1] + var conditionField1InputData: string + conditionField1InputData = formInput(conditionField1) + let conditionField2 = vNameSeq[3] + if conditionField1InputData.len > 0 and conditionField1InputData == conditionField2: + if inputData.len == 0: + msgString = inputName & " is required when " & conditionField1 & " equals " & conditionField2 + addFormError(inputName, msgString) + if match(v, re"^(required_when):([a-z_]+):(equals):([a-z_]+):(without):([a-z_]+)$"): + let vNameSeq = v.split(':') + #skip 0 index, as that's just the name of the validator. + let conditionField1 = vNameSeq[1] + var conditionField1InputData: string + conditionField1InputData = formInput(conditionField1) + let conditionField2 = vNameSeq[3] + let conditionField3 = vNameSeq[5] + var conditionField3InputData: string + conditionField3InputData = formInput(conditionField3) + if conditionField1InputData.len > 0 and conditionField1InputData == conditionField2 and conditionField3InputData.len == 0: + if inputData.len == 0: + msgString = inputName & " is required when " & conditionField1 & " equals " & conditionField2 & " and " & conditionField3 & " is not set." + addFormError(inputName, msgString) + +proc vStandard(inputName: string, inputData: string, inputType: string, validators: seq[string]) = + if "email" in validators: + if not isEmail(inputData): + msgString = inputName & " is not recognized as a valid email address." + addFormError(inputName, msgString) + if "min_complexity" in validators: + if not isStrongPassword(inputData): + msgString = inputName & " is not random/complex enough. Try to make your " & inputName & " more unpredictable by adding random numbers, random letter casing, unrelated words, special characters, etc." + addFormError(inputName, msgString) + +proc vHardcoded*(inputDataAll: Table[string, string], validators: seq[string]) = + ##Warning: this validator requires specific (hardcoded) input names to exist in the posted form data. + if "future_datetime" in validators: + let nowDT = now() + var inputDT: DateTime + let inputDateString = inputDataAll.getOrDefault("send_date", "") + let inputTimeHrString = inputDataAll.getOrDefault("send_time_hr", "") + let inputTimeMinString = inputDataAll.getOrDefault("send_time_min", "") + let inputTimeAmPmString = inputDataAll.getOrDefault("send_time_am_pm", "") + if inputDateString.len > 0 and inputTimeHrString.len > 0 and inputTimeMinString.len > 0 and inputTimeAmPmString.len > 0: + let inputDatetimeString = inputDateString & " " & inputTimeHrString & ":" & inputTimeMinString & ":" & inputTimeAmPmString + inputDT = parse(inputDatetimeString, "yyyy-M-d h:m:tt") + else: + inputDT = now() + if inputDT <= nowDT: + msgString = "send_date and send_time combined must be a DateTime in the future (compared to the DateTime at form submit)." + addFormError("send_date", msgString) + +proc vInput*(inputName: string, validators: seq[string]) = + var inputType: string + var inputData: string + var inputDataAll: Table[string, string] + inputData = formInput(inputName) + inputDataAll = formInputAll() + #check if 'required' is set and validate input if it exists. otherwise return error. + if "required" in validators: + if (inputData.len == 0): + msgString = inputName & " is required." + addFormError(inputName, msgString) + else: + #proceed with validation. + #get inputType. + inputType = vType(inputName, inputData, validators) + #check for other validators and run if they exist. + vStandard(inputName, inputData, inputType, validators) + vHardcoded(inputDataAll, validators) + vRegex(inputName, inputData, inputType, validators) + #required is not set, but input could still exist. validate it. + else: + #get inputType. + inputType = vType(inputName, inputData, validators) + #check for other validators and run if they exist. + vStandard(inputName, inputData, inputType, validators) + vHardcoded(inputDataAll, validators) + vRegex(inputName, inputData, inputType, validators) diff --git a/models/human_checker.nim b/models/human_checker.nim new file mode 100644 index 0000000..fab210c --- /dev/null +++ b/models/human_checker.nim @@ -0,0 +1,66 @@ +#[Copyright 2024 ITwrx. +This file is part of Simple Site Manager. +Simple Site Manager is released under the GNU Affero General Public License 3.0. +See COPYING or for details.]# + +import std/random +#import sqliteral, "../helpers/db" + +type + HumanChecker* = object + question*: string + id*, answer*: int + +var humanCheckers: seq[HumanChecker] +humanCheckers = @[ + HumanChecker(id: 1, question: "26 + four, minus 10", answer: 20), + HumanChecker(id: 2, question: "10 minus 2, + 14", answer: 22), + HumanChecker(id: 3, question: "15 + five, minus 3", answer: 17), + HumanChecker(id: 4, question: "9 + nine, minus 6", answer: 12), + HumanChecker(id: 5, question: "13 - three, plus 5", answer: 15), + HumanChecker(id: 6, question: "7 + six, plus one", answer: 14), + HumanChecker(id: 7, question: "22 + 8, - 2", answer: 28), + HumanChecker(id: 8, question: "4 - four, + ten", answer: 10), + HumanChecker(id: 9, question: "16 + four, minus three", answer: 17), + HumanChecker(id: 10, question: "twelve minus four, plus 8", answer: 16) + ] + +proc getHumanChecker*(): HumanChecker = + {.gcsafe.}: + randomize() + return sample(humancheckers) + +proc getHCById*(id: int): HumanChecker = + {.gcsafe.}: + for hc in humanCheckers: + if hc.id == id: + return hc + +#for some reason we are creating the humanCheckers here and then checking them from the DB, instead of one data location or the other, like we probably should have. +#the below was probably supposed to be a test, but then it just stayed like that. +#[proc getHumanChecker*(): HumanChecker = + {.gcsafe.}: + randomize() + var humanCheckers{.threadvar.}: seq[HumanChecker] + humanCheckers.add(HumanChecker(id: 1, question: "26 + four, minus 10", answer: 20)) + humanCheckers.add(HumanChecker(id: 2, question: "10 minus 2, + 14", answer: 22)) + humanCheckers.add(HumanChecker(id: 3, question: "15 + five, minus 3", answer: 17)) + humanCheckers.add(HumanChecker(id: 4, question: "9 + nine, minus 6", answer: 12)) + humanCheckers.add(HumanChecker(id: 5, question: "13 - three, plus 5", answer: 15)) + humanCheckers.add(HumanChecker(id: 6, question: "7 + six, plus one", answer: 14)) + humanCheckers.add(HumanChecker(id: 7, question: "22 + 8, - 2", answer: 28)) + humanCheckers.add(HumanChecker(id: 8, question: "4 - four, + ten", answer: 10)) + humanCheckers.add(HumanChecker(id: 9, question: "16 + four, minus three", answer: 17)) + humanCheckers.add(HumanChecker(id: 10, question: "twelve minus four, plus 8", answer: 16)) + return sample(humancheckers) + +proc getHCById*(id: int): HumanChecker = + {.gcsafe.}: + var hc {.threadvar.}: HumanChecker + #prepareDb2SQL() + for row in db2.rows(SelectHumanCheckerById, id): + hc.id = row.getInt(0) + hc.question = row.getString(1) + hc.answer = row.getInt(2) + return hc]# + diff --git a/models/reminder.nim b/models/reminder.nim new file mode 100644 index 0000000..3fe35e8 --- /dev/null +++ b/models/reminder.nim @@ -0,0 +1,52 @@ +#[Copyright 2024 ITwrx. +This file is part of Simple Site Manager. +Simple Site Manager is released under the GNU Affero General Public License 3.0. +See COPYING or for details.]# + +import sqliteral, "../helpers/db", "../helpers/global.nim", sequtils + +type + Reminder* = object + title*, message*, notifyVia*, repeatFreq*, sendDate*, sendTimeAmPm*, monthlyOnWeek*, yearlyOnWeek*, weeklyOn*, monthlyOnWeekday*, yearlyOnMonth*, yearlyOnWeekday*, yearlyOnMonth2*: string + id*, repeats*, monthlyOnDay*, yearlyOnDay*, sendTimeHr*, sendTimeMin*: int + +var allReminders: seq[Reminder] + +proc getAllReminders*(): seq[Reminder] = + {.gcsafe.}: + if allReminders.len == 0: + for row in db1.rows(SelectAllReminders): + allReminders.add(Reminder(id: row.getInt(0), title: row.getString(1), message: row.getString(2), notifyVia: row.getString(3), repeats: row.getInt(4), repeatFreq: row.getString(5), weeklyOn: row.getString(6), monthlyOnDay: row.getInt(7), monthlyOnWeekday: row.getString(8), monthlyOnWeek: row.getString(9), yearlyOnMonth: row.getString(10), yearlyOnDay: row.getInt(11), yearlyOnWeek: row.getString(12), yearlyOnWeekday: row.getString(13), yearlyOnMonth2: row.getString(14), sendDate: row.getString(15), sendTimeHr: row.getInt(16), sendTimeMin: row.getInt(17), sendTimeAmPm: row.getString(18))) + return allReminders + +proc clearAllReminders*() = + {.gcsafe.}: + allReminders.setLen(0) + +proc getReminderById*(id: int): Reminder = + {.gcsafe.}: + for reminder in getAllReminders(): + if reminder.id == id: + return reminder + +proc createReminder*(reminder: Reminder): int = + {.gcsafe.}: + var reminderId: int + db1.transaction: + reminderId = db1.insert(InsertReminder, reminder.title, reminder.message, reminder.notifyVia, reminder.repeats, reminder.repeatFreq, reminder.weeklyOn, reminder.monthlyOnDay, reminder.monthlyOnWeekday, reminder.monthlyOnWeek, reminder.yearlyOnMonth, reminder.yearlyOnDay, reminder.yearlyOnWeek, reminder.yearlyOnWeekday, reminder.yearlyOnMonth2, reminder.sendDate, reminder.sendTimeHr, reminder.sendTimeMin, reminder.sendTimeAmPm) + return reminderId + +proc updateReminder*(reminder: Reminder) = + {.gcsafe.}: + db1.transaction: + db1.exec(UpdateReminder, reminder.title, reminder.message, reminder.notifyVia, reminder.repeats, reminder.repeatFreq, reminder.weeklyOn, reminder.monthlyOnDay, reminder.monthlyOnWeekday, reminder.monthlyOnWeek, reminder.yearlyOnMonth, reminder.yearlyOnDay, reminder.yearlyOnWeek, reminder.yearlyOnWeekday, reminder.yearlyOnMonth2, reminder.sendDate, reminder.sendTimeHr, reminder.sendTimeMin, reminder.sendTimeAmPm, reminder.id) + +proc updateReminderSendDate*(reminder: Reminder) = + {.gcsafe.}: + db1.transaction: + db1.exec(UpdateReminderSendDate, reminder.sendDate, reminder.id) + +proc deleteReminder*(id: int) = + {.gcsafe.}: + db1.transaction: + db1.exec(DeleteReminder, id) diff --git a/models/session.nim b/models/session.nim new file mode 100644 index 0000000..4f8c06f --- /dev/null +++ b/models/session.nim @@ -0,0 +1,33 @@ +#[Copyright 2024 ITwrx. +This file is part of Simple Site Manager. +Simple Site Manager is released under the GNU Affero General Public License 3.0. +See COPYING or for details.]# + +import sqliteral, "../helpers/db" + +type + Session* = object + sessionId*, csrfToken*: string + id*, userId*: int + +proc deleteSessions*() = + {.gcsafe.}: + db1.transaction: + db1.exec(DeleteSessions) + +proc getSessionByCsrfToken*(csrfToken: string): Session = + {.gcsafe.}: + var session: Session + for row in db1.rows(SelectSessionByCsrfToken, csrfToken): + session.id = row.getInt(0) + session.sessionId = row.getString(1) + session.userId = row.getInt(2) + session.csrfToken = row.getString(3) + return session + +proc createVisitorSession*(visitorSession: Session): int = + {.gcsafe.}: + var visitorSessionId: int + db1.transaction: + visitorSessionId = db1.insert(InsertVisitorSession, visitorSession.csrfToken) + return visitorSessionId diff --git a/models/user.nim b/models/user.nim new file mode 100644 index 0000000..5edd177 --- /dev/null +++ b/models/user.nim @@ -0,0 +1,33 @@ +#[Copyright 2025 ITwrx. +This file is part of Simple Site Manager. +Simple Site Manager is released under the GNU Affero General Public License 3.0. +See COPYING or for details.]# + +import sqliteral, "../helpers/db" + +type + User* = object + email*, password*: string + id*: int + +proc getUserByEmail*(email: string): User = + {.gcsafe.}: + var user: User + for row in db1.rows(SelectUsersByEmail, email): + user.id = row.getInt(0) + user.email = row.getString(1) + user.password = row.getString(2) + return user + +proc getEmailByUserId*(id: string): string = + {.gcsafe.}: + var user: User + for row in db1.rows(SelectUserById, id): + user.id = row.getInt(0) + user.email = row.getString(1) + return user.email + +proc createUser*(email: string, encodedHash: string) = + {.gcsafe.}: + db1.transaction: + discard db1.insert(InsertUser, email, encodedHash) diff --git a/post_handlers/login_post_handler.nim b/post_handlers/login_post_handler.nim new file mode 100644 index 0000000..8500174 --- /dev/null +++ b/post_handlers/login_post_handler.nim @@ -0,0 +1,106 @@ +#[Copyright 2025 ITwrx. +This file is part of Simple Site Manager. +Simple Site Manager is released under the GNU Affero General Public License 3.0. +See COPYING or for details.]# + +import guildenstern/httpserver +import nimword, jsony +import std/[base64, sysrand] +import "../helpers/form", "../helpers/validation", "../helpers/auth", "../helpers/global", "../models/user", "../models/session" + +proc loginPostHandler*() = + try: + var cookieHeader1, cookieHeader2: string + let email = formInput("email") + let password = formInput("password") + #validate form inputs + vInput("email", @["required", "string", "email", "max:75"]) + vInput("password", @["required", "string", "min_complexity", "max:100"]) + var csrfTokenInput = formInput("csrf_token") + #create formResult and redirect on validation errors. + if formErrors.len > 0: + addFormOldInput("email", formInput("email")) + #discard assignErrorFR(formErrors, formOldInputs, csrfTokenInput) + discard assignErrorFR(formErrors, formOldInputs) + let frJson = formResult.toJson() + #let cookieHeader = "Set-Cookie: form_result=" & frJson & ";" & "HttpOnly;" & "path=/;" + if APP_MODE == "dev": + cookieHeader1 = "Set-Cookie: form_result=" & frJson & ";" & "HttpOnly;" & "path=/;" & "SameSite=Lax;" + else: + cookieHeader1 = "Set-Cookie: form_result=" & frJson & ";" & "HttpOnly;" & "Secure=true;" & "path=/;" & "SameSite=Lax;" + reply(Http303, [locationBack(), cookieHeader1]) + else: + #inputs pass validation rules. let's see if the creds supplied are valid. + let registeredUser = getUserByEmail(email) + if registeredUser.email.len > 0: + if password.isValidPassword(registeredUser.password): + #create sessionId + var sessionId = $urandom(32) + sessionId = base64.encode(sessionId) + #create session + var userSession: Session + userSession.sessionId = sessionId + userSession.userId = registeredUser.id + userSession.csrfToken = newCsrfToken() + createUserSession(userSession) + discard assignLoginSuccessFR() + let frJson = formResult.toJson() + #redirect, and set session cookie. + #will probably need to detect requested url for redirect (with static fallback) instead of just static location. + #Set-Cookie: =; Domain=; Secure; HttpOnly + #dev + #let cookieHeader1 = "Set-Cookie: " & APP_NAME & "_session=" & sessionId & ";" & "HttpOnly;" & "SameSite=Lax;" + #let cookieHeader2 = "Set-Cookie: form_result=" & frJson & ";" & "HttpOnly;" & "path=/;" & "SameSite=Lax;" + #prod + #let cookieHeader1 = "Set-Cookie: " & APP_NAME & "_session=" & sessionId & ";" & "HttpOnly;" & "Secure=true;" & "SameSite=Lax;" + #let cookieHeader2 = "Set-Cookie: form_result=" & frJson & ";" & "HttpOnly;" & "Secure=true;" & "path=/;" & "SameSite=Lax;" + if APP_MODE == "dev": + cookieHeader1 = "Set-Cookie: " & APP_NAME & "_session=" & sessionId & ";" & "HttpOnly;" & "SameSite=Lax;" + cookieHeader2 = "Set-Cookie: form_result=" & frJson & ";" & "HttpOnly;" & "path=/;" & "SameSite=Lax;" + else: + cookieHeader1 = "Set-Cookie: " & APP_NAME & "_session=" & sessionId & ";" & "HttpOnly;" & "Secure=true;" & "SameSite=Lax;" + cookieHeader2 = "Set-Cookie: form_result=" & frJson & ";" & "HttpOnly;" & "Secure=true;" & "path=/;" & "SameSite=Lax;" + #headers are just an openarray of strings. + reply(Http303, [location("/"), cookieHeader1, cookieHeader2]) + else: + #password supplied did not match password in DB for supplied email address. redirect back to login with creds error. + #create a formError. + formError.fieldName = "password" + formError.fieldMessage = "Entered password is not valid." + #add it to formErrors seq. + formErrors.add(formError) + formResult.message = "Authentication error." + formResult.messageClass = "text-red-500" + formResult.errors = toJson(formErrors) + formResult.oldInputs = getOldInputJson() + let frJson = formResult.toJson() + #let cookieHeader = "Set-Cookie: form_result=" & frJson & ";" & "HttpOnly;" + #let cookieHeader = "Set-Cookie: form_result=" & frJson & ";" & "HttpOnly;" & "path=/;" + if APP_MODE == "dev": + cookieHeader1 = "Set-Cookie: form_result=" & frJson & ";" & "HttpOnly;" & "path=/;" & "SameSite=Lax;" + else: + cookieHeader1 = "Set-Cookie: form_result=" & frJson & ";" & "HttpOnly;" & "Secure=true;" & "path=/;" & "SameSite=Lax;" + reply(Http303, [locationBack(), cookieHeader1]) + else: + formError.fieldName = "email" + formError.fieldMessage = "No user found with supplied email address." + #add it to formErrors seq. + formErrors.add(formError) + formResult.message = "Authentication error." + formResult.messageClass = "text-red-500" + formResult.errors = toJson(formErrors) + formResult.oldInputs = getOldInputJson() + let frJson = formResult.toJson() + #let cookieHeader = "Set-Cookie: form_result=" & frJson & ";" & "HttpOnly;" & "path=/;" + if APP_MODE == "dev": + cookieHeader1 = "Set-Cookie: form_result=" & frJson & ";" & "HttpOnly;" & "path=/;" & "SameSite=Lax;" + else: + cookieHeader1 = "Set-Cookie: form_result=" & frJson & ";" & "HttpOnly;" & "Secure=true;" & "path=/;" & "SameSite=Lax;" + reply(Http303, [locationBack(), cookieHeader1]) + + except Exception as e: + echo e.msg + #reply(Http500) + discard assignGeneralErrorFR(e.msg) + setFR() + reply(Http303, [location("/500")]) diff --git a/post_handlers/reminder_post_handler.nim b/post_handlers/reminder_post_handler.nim new file mode 100644 index 0000000..930ff3d --- /dev/null +++ b/post_handlers/reminder_post_handler.nim @@ -0,0 +1,196 @@ +#[Copyright 2024 ITwrx. +This file is part of Simple Site Manager. +Simple Site Manager is released under the GNU Affero General Public License 3.0. +See COPYING or for details.]# + +import guildenstern/httpserver, jsony +import "../helpers/form", "../helpers/global", "../helpers/validation", "../helpers/auth" +import "../models/reminder" + +proc reminderCreatePostHandler*() = + #try to save to DB. + try: + #attempt validation first. + vInput("title", @["required", "string", "max:150"]) + #vInput("subject", @["string", "max:175"]) + vInput("message", @["required", "string", "max:255"]) + vInput("notify_via", @["required", "string", "max:5"]) + vInput("repeats", @["required", "integer", "max:1"]) + vInput("repeat_freq", @["required_with:repeats", "string", "max:10"]) + vInput("weekly_on", @["required_when:repeat_freq:equals:week", "string", "max:10"]) + vInput("monthly_on_day", @["required_when:repeat_freq:equals:month:without:monthly_on_week", "integer", "max:31"]) + vInput("monthly_on_weekday", @["required_with:monthly_on_week", "string", "max:10"]) + vInput("monthly_on_week", @["required_when:repeat_freq:equals:month:without:monthly_on_day", "string", "max:4"]) + vInput("yearly_on_month", @["required_when:repeat_freq:equals:year:without:yearly_on_week", "string", "max:12"]) + vInput("yearly_on_day", @["required_with:yearly_on_month", "integer", "max:31"]) + vInput("yearly_on_week", @["required_when:repeat_freq:equals:year:without:yearly_on_month", "string", "max:4"]) + vInput("yearly_on_weekday", @["required_with:yearly_on_week", "string", "max:10"]) + vInput("yearly_on_month2", @["required_with:yearly_on_week", "string", "max:12"]) + vInput("send_date", @["required", "string", "max:10"]) + vInput("send_time_hr", @["required", "integer", "max:12"]) + vInput("send_time_min", @["required", "integer", "max:60"]) + vInput("send_time_am_pm", @["required", "string", "max:2"]) + #create formResult and redirect on validation errors. + if formErrors.len > 0: + addFormOldInput("title", formInput("title")) + #addFormOldInput("subject", formInput("subject")) + addFormOldInput("message", formInput("message")) + addFormOldInput("notify_via", formInput("notify_via")) + addFormOldInput("repeats", formInput("repeats")) + addFormOldInput("repeat_freq", formInput("repeat_freq")) + addFormOldInput("weekly_on", formInput("weekly_on")) + addFormOldInput("monthly_on_day", formInput("monthly_on_day")) + addFormOldInput("monthly_on_weekday", formInput("monthly_on_weekday")) + addFormOldInput("monthly_on_week", formInput("monthly_on_week")) + addFormOldInput("yearly_on_month", formInput("yearly_on_month")) + addFormOldInput("yearly_on_day", formInput("yearly_on_day")) + addFormOldInput("yearly_on_week", formInput("yearly_on_week")) + addFormOldInput("yearly_on_weekday", formInput("yearly_on_weekday")) + addFormOldInput("yearly_on_month2", formInput("yearly_on_month2")) + addFormOldInput("send_date", formInput("send_date")) + addFormOldInput("send_time_hr", formInput("send_time_hr")) + addFormOldInput("send_time_min", formInput("send_time_min")) + addFormOldInput("send_time_am_pm", formInput("send_time_am_pm")) + discard assignErrorFR(formErrors, formOldInputs) + setFR() + reply(Http303, [locationBack()]) + #validation passed. Save posted data to db. + else: + var reminder: Reminder + reminder.title = formInput("title") + #reminder.subject = formInput("subject") + reminder.message = formInput("message") + reminder.notifyVia = formInput("notify_via") + reminder.repeats = formInputInt("repeats") + reminder.repeatFreq = formInput("repeat_freq") + reminder.weeklyOn = formInput("weekly_on") + reminder.monthlyOnDay = formInputInt("monthly_on_day") + reminder.monthlyOnWeekday = formInput("monthly_on_weekday") + reminder.monthlyOnWeek = formInput("monthly_on_week") + reminder.yearlyOnMonth = formInput("yearly_on_month") + reminder.yearlyOnDay = formInputInt("yearly_on_day") + reminder.yearlyOnWeek = formInput("yearly_on_week") + reminder.yearlyOnWeekday = formInput("yearly_on_weekday") + reminder.yearlyOnMonth2 = formInput("yearly_on_month2") + reminder.sendDate = formInput("send_date") + reminder.sendTimeHr = formInputInt("send_time_hr") + reminder.sendTimeMin = formInputInt("send_time_min") + reminder.sendTimeAmPm = formInput("send_time_am_pm") + let reminderId = createReminder(reminder) + clearAllReminders() + discard assignCEEditSuccessFR() + setFR() + reply(Http303, [location("/")]) + except CatchableError as e: + echo e.msg + #reply(Http500) + discard assignGeneralErrorFR(e.msg) + setFR() + reply(Http303, [location("/500")]) + +proc reminderUpdatePostHandler*() = + try: + #var origin = http.headers.getOrDefault("origin") + #attempt validation first. + vInput("title", @["required", "string", "max:150"]) + #vInput("subject", @["string", "max:175"]) + vInput("message", @["required", "string", "max:255"]) + vInput("notify_via", @["required", "string", "max:5"]) + vInput("repeats", @["required", "integer", "max:1"]) + vInput("repeat_freq", @["required_with:repeats", "string", "max:10"]) + vInput("weekly_on", @["required_when:repeat_freq:equals:week", "string", "max:10"]) + vInput("monthly_on_day", @["required_when:repeat_freq:equals:month:without:monthly_on_week", "must_unset_with:monthly_on_week", "must_unset_with:monthly_on_weekday", "integer", "max:31"]) + vInput("monthly_on_weekday", @["required_with:monthly_on_week", "must_unset_with:monthly_on_day", "string", "max:10"]) + vInput("monthly_on_week", @["required_when:repeat_freq:equals:month:without:monthly_on_day", "must_unset_with:monthly_on_day", "string", "max:4"]) + vInput("yearly_on_month", @["required_when:repeat_freq:equals:year:without:yearly_on_week", "must_unset_with:yearly_on_week", "must_unset_with:yearly_on_weekday", "must_unset_with:yearly_on_month2", "string", "max:12"]) + vInput("yearly_on_day", @["required_with:yearly_on_month", "must_unset_with:yearly_on_week", "must_unset_with:yearly_on_weekday", "must_unset_with:yearly_on_month2", "integer", "max:31"]) + vInput("yearly_on_week", @["required_when:repeat_freq:equals:year:without:yearly_on_month", "must_unset_with:yearly_on_month", "must_unset_with:yearly_on_day", "string", "max:4"]) + vInput("yearly_on_weekday", @["required_with:yearly_on_week", "must_unset_with:yearly_on_month", "must_unset_with:yearly_on_day", "string", "max:10"]) + vInput("yearly_on_month2", @["required_with:yearly_on_week", "must_unset_with:yearly_on_month", "must_unset_with:yearly_on_day", "string", "max:12"]) + vInput("send_date", @["required", "string", "max:10", "future_datetime"]) + vInput("send_time_hr", @["required", "integer", "max:12"]) + vInput("send_time_min", @["required", "integer", "max:60"]) + vInput("send_time_am_pm", @["required", "string", "max:2"]) + #create formResult and redirect on validation errors. + if formErrors.len > 0: + #since validation failed we better keep add the old inputs. + addFormOldInput("title", formInput("title")) + #addFormOldInput("subject", formInput("subject")) + addFormOldInput("message", formInput("message")) + addFormOldInput("notify_via", formInput("notify_via")) + addFormOldInput("repeats", formInput("repeats")) + addFormOldInput("repeat_freq", formInput("repeat_freq")) + addFormOldInput("weekly_on", formInput("weekly_on")) + addFormOldInput("monthly_on_day", formInput("monthly_on_day")) + addFormOldInput("monthly_on_weekday", formInput("monthly_on_weekday")) + addFormOldInput("monthly_on_week", formInput("monthly_on_week")) + addFormOldInput("yearly_on_month", formInput("yearly_on_month")) + addFormOldInput("yearly_on_day", formInput("yearly_on_day")) + addFormOldInput("yearly_on_week", formInput("yearly_on_week")) + addFormOldInput("yearly_on_weekday", formInput("yearly_on_weekday")) + addFormOldInput("yearly_on_month2", formInput("yearly_on_month2")) + addFormOldInput("send_date", formInput("send_date")) + addFormOldInput("send_time_hr", formInput("send_time_hr")) + addFormOldInput("send_time_min", formInput("send_time_min")) + addFormOldInput("send_time_am_pm", formInput("send_time_am_pm")) + discard assignErrorFR(formErrors, formOldInputs) + setFR() + reply(Http303, [locationBack()]) + #validation passed. Save posted data to db and redirect back with success message. + else: + var reminder: Reminder + reminder.id = formInputInt("reminder_id") + reminder.title = formInput("title") + #reminder.subject = formInput("subject") + reminder.message = formInput("message") + reminder.notifyVia = formInput("notify_via") + reminder.repeats = formInputInt("repeats") + reminder.repeatFreq = formInput("repeat_freq") + reminder.weeklyOn = formInput("weekly_on") + reminder.monthlyOnDay = formInputInt("monthly_on_day") + reminder.monthlyOnWeekday = formInput("monthly_on_weekday") + reminder.monthlyOnWeek = formInput("monthly_on_week") + reminder.yearlyOnMonth = formInput("yearly_on_month") + reminder.yearlyOnDay = formInputInt("yearly_on_day") + reminder.yearlyOnWeek = formInput("yearly_on_week") + reminder.yearlyOnWeekday = formInput("yearly_on_weekday") + reminder.yearlyOnMonth2 = formInput("yearly_on_month2") + reminder.sendDate = formInput("send_date") + reminder.sendTimeHr = formInputInt("send_time_hr") + reminder.sendTimeMin = formInputInt("send_time_min") + reminder.sendTimeAmPm = formInput("send_time_am_pm") + updateReminder(reminder) + clearAllReminders() + discard assignCEEditSuccessFR() + setFR() + reply(Http303, [location("/")]) + except CatchableError as e: + echo e.msg + #reply(Http500) + discard assignGeneralErrorFR(e.msg) + setFR() + reply(Http303, [location("/500")]) + +proc reminderDeletePostHandler*() = + try: + vInput("reminder_id", @["integer", "max:200000"]) + #create formResult and redirect on validation errors. + if formErrors.len > 0: + #since validation failed we better add the old inputs. + discard assignErrorFR(formErrors, formOldInputs) + setFR() + reply(Http303, [locationBack()]) + #validation passed. Save posted data to db and redirect back with success message. + else: + let reminderId = formInputInt("reminder_id") + deleteReminder(reminderId) + clearAllReminders() + discard assignCEDeleteSuccessFR() + setFR() + reply(Http303, [location("/")]) + except CatchableError as e: + echo e.msg + #reply(Http500) + discard assignGeneralErrorFR(e.msg) + setFR() + reply(Http303, [location("/500")]) diff --git a/post_handlers/send_reminders_post_handler.nim b/post_handlers/send_reminders_post_handler.nim new file mode 100644 index 0000000..0ddf441 --- /dev/null +++ b/post_handlers/send_reminders_post_handler.nim @@ -0,0 +1,18 @@ +#[Copyright 2025 ITwrx. +This file is part of Simple Site Manager. +Simple Site Manager is released under the GNU Affero General Public License 3.0. +See COPYING or for details.]# + +import guildenstern/httpserver, "../helpers/reminder", "../helpers/form" + +proc sendRemindersPostHandler*() = + try: + if formInput("send_reminders_key") == "wpsU5CY1Tn5PkMjN6OBC7cdPVZbaW3x": + sendReminders() + reply(Http200) + else: + echo "'send_reminders_key' not valid" + reply(Http403) + except CatchableError as e: + echo e.msg + reply(Http500) diff --git a/post_handlers/user_session_post_handler.nim b/post_handlers/user_session_post_handler.nim new file mode 100644 index 0000000..2448e90 --- /dev/null +++ b/post_handlers/user_session_post_handler.nim @@ -0,0 +1,18 @@ +#[Copyright 2025 ITwrx. +This file is part of Simple Site Manager. +Simple Site Manager is released under the GNU Affero General Public License 3.0. +See COPYING or for details.]# + +import guildenstern/httpserver, "../models/user_session", "../helpers/form" + +proc userSessionDeletePostHandler*() = + try: + if formInput("delete_user_sessions_key") == "XR5yLeigb4PFXOZBh3PBOuQXc8d7NE6": + deleteUserSessions() + reply(Http200) + else: + echo "'delete_user_sessions_key' not valid" + reply(Http403) + except CatchableError as e: + echo e.msg + reply(Http500) diff --git a/templates/error403.nimf b/templates/error403.nimf new file mode 100644 index 0000000..60285b5 --- /dev/null +++ b/templates/error403.nimf @@ -0,0 +1,14 @@ +#? stdtmpl(subsChar = '$', metaChar = '#') +#import "main_template_top.nimf", "main_template_bottom.nimf" +#proc error403Template*(mode: string, csrfToken: string): string = +# result = "" +${mainTemplateTop("Error! Status Code: 403", "", mode, csrfToken)} +
      +

      Error! Status Code: 403


      +

      You are not authorized for the resource your browser requested.

      If you feel this is in error please report to web your host.

      Thanks!

      +
      +${mainTemplateBottom(mode)} +
      + + +#end proc diff --git a/templates/error404.nimf b/templates/error404.nimf new file mode 100644 index 0000000..1e2a4a0 --- /dev/null +++ b/templates/error404.nimf @@ -0,0 +1,14 @@ +#? stdtmpl(subsChar = '$', metaChar = '#') +#import "main_template_top.nimf", "main_template_bottom.nimf" +#proc error404Template*(csrfToken: string): string = +# result = "" +${mainTemplateTop("Error! Status Code: 404", csrfToken)} +
      +

      Error! Status Code: 404


      +

      The page or resource requested does not exist.

      Please try again, or report to site admin.

      Thanks!

      +
      +${mainTemplateBottom()} +
      + + +#end proc diff --git a/templates/error500.nimf b/templates/error500.nimf new file mode 100644 index 0000000..f02db16 --- /dev/null +++ b/templates/error500.nimf @@ -0,0 +1,17 @@ +#? stdtmpl(subsChar = '$', metaChar = '#') +#import "main_template_top.nimf", "main_template_bottom.nimf", "../helpers/form" +#proc error500Template*(csrfToken: string, fr: FormResult): string = +# result = "" +${mainTemplateTop("Error! Status Code: 500", csrfToken)} +
      +

      Error! Status Code: 500


      + #if fr.message.len > 0: +

      Application Error Message: ${fr.message}

      + #end if +

      If you're seeing this, unfortunately, you've found a bug.

      Please report that you received a "500 page", including any Application Error Message above, to your web host.

      Thank You!

      +
      +${mainTemplateBottom()} +
      + + +#end proc diff --git a/templates/login.nimf b/templates/login.nimf new file mode 100644 index 0000000..54b90bb --- /dev/null +++ b/templates/login.nimf @@ -0,0 +1,45 @@ +#? stdtmpl(subsChar = '$', metaChar = '#') +#import "../helpers/global", "../helpers/form" +#import "main_template_top.nimf", "main_template_bottom.nimf" +#proc loginTemplate*(csrfToken: string, fr: FormResult): string = +# result = "" +${mainTemplateTop("Log In", csrfToken)} +
      +
      +
       
      +
      +

      Log In

      + #if fr.message.len > 0: +

      ${fr.message}

      + #end if + + + * + #if fErrorMsg(fr, "email").len > 0: + ${fErrorMsg(fr, "email")} + #end if +
      +
      + * + #if fErrorMsg(fr, "password").len > 0: + ${fErrorMsg(fr, "password")} + #end if +
      +
      +
      +
      +
      +
      +
      + +
      +
      + +
      +
       
      +
      +
      + ${mainTemplateBottom()} + ##leave this even when empty. +
      +#end proc diff --git a/templates/main_template_bottom.nimf b/templates/main_template_bottom.nimf new file mode 100644 index 0000000..07ae039 --- /dev/null +++ b/templates/main_template_bottom.nimf @@ -0,0 +1,35 @@ +#? stdtmpl(subsChar = '$', metaChar = '#') +#import "../helpers/global" +#proc mainTemplateBottom*(): string = +# result = "" + +
      + + +
      + + +
      + + +
      + + +#end proc diff --git a/templates/main_template_top.nimf b/templates/main_template_top.nimf new file mode 100644 index 0000000..15035b7 --- /dev/null +++ b/templates/main_template_top.nimf @@ -0,0 +1,32 @@ +#? stdtmpl(subsChar = '$', metaChar = '#') +#import "../helpers/global", "../models/reminder", "../helpers/auth" +#proc mainTemplateTop*(title, csrfToken: string): string = +#let sections = getAllReminders() +# result = "" + + + + +${title} + + + + + +
      +
      +
      +
      +
      + + +
      +
      +
      +#end proc diff --git a/templates/reminder_create.nimf b/templates/reminder_create.nimf new file mode 100644 index 0000000..0fa39a0 --- /dev/null +++ b/templates/reminder_create.nimf @@ -0,0 +1,351 @@ +#? stdtmpl(subsChar = '$', metaChar = '#') +#import "../helpers/global", "../helpers/form", "../helpers/auth", "../models/reminder" +#import "main_template_top.nimf", "main_template_bottom.nimf" +#proc reminderCreateTemplate*(csrfToken: string, fr: FormResult): string = +#let pageTitle = "Create a Reminder" +# result = "" + ${mainTemplateTop(pageTitle, csrfToken)} +

      ${pageTitle}

      + #if fr.message.len > 0: +

      ${fr.message}

      + #end if +
      + + +
      + +
      +
      + * + ${fErrorMsg(fr, "notify_via")} + + + +
      +
      + +
      +
      + ${fErrorMsg(fr, "send_time_hr")} + ${fErrorMsg(fr, "send_time_min")} + ${fErrorMsg(fr, "send_time_am_pm")} + *Send Time:  + + + +
      +
      + +
      + + + + +
      +
      + +
      +

      +
      + ${mainTemplateBottom()} +
      + +
      +#end proc diff --git a/templates/reminder_update.nimf b/templates/reminder_update.nimf new file mode 100644 index 0000000..9ee0378 --- /dev/null +++ b/templates/reminder_update.nimf @@ -0,0 +1,361 @@ +#? stdtmpl(subsChar = '$', metaChar = '#') +#import "../helpers/global", "../helpers/form", "../helpers/auth", "../models/reminder" +#import "main_template_top.nimf", "main_template_bottom.nimf" +#proc reminderUpdateTemplate*(reminderId:int, csrfToken: string, fr: FormResult): string = +#let reminder = getReminderById(reminderId) +#let pageTitle = "Update Reminder: " & reminder.title +# result = "" + ${mainTemplateTop(pageTitle, csrfToken)} +

      ${pageTitle}

      +
      +
      + + + +
      +
      + #if fr.message.len > 0: +

      ${fr.message}

      + #end if +
      + + + +
      + +
      +
      + * + ${fErrorMsg(fr, "notify_via")} + + + +
      +
      + +
      +
      + ${fErrorMsg(fr, "send_time_hr")} + ${fErrorMsg(fr, "send_time_min")} + ${fErrorMsg(fr, "send_time_am_pm")} + *Send Time:  + + + +
      +
      + +
      + + + + +
      +
      + +
      +


      + +
      + +
      + ${mainTemplateBottom()} +#end proc diff --git a/templates/reminders.nimf b/templates/reminders.nimf new file mode 100644 index 0000000..6a3ff1c --- /dev/null +++ b/templates/reminders.nimf @@ -0,0 +1,44 @@ +#? stdtmpl(subsChar = '$', metaChar = '#') +#import "../helpers/global", "../helpers/form", "../helpers/auth", "../models/reminder" +#import "main_template_top.nimf", "main_template_bottom.nimf" +#proc remindersTemplate*(allReminders: seq[Reminder], csrfToken: string, fr: FormResult): string = +# result = "" + ${mainTemplateTop("Upcoming Reminders",csrfToken)} +
      + Upcoming Reminders+ New Reminder +
      + #if allReminders.len > 0: +
      +
      Title
      +
      Repeats?
      +
      Next Send Date
      +
      Actions
      +
      + #else: +

      You don't have any Reminders yet.

      + #end if + #for reminder in allReminders: +
      +
      ${reminder.title}
      +
      + #if reminder.repeats == 0: + No + #else: + Yes + #end if +
      +
      ${reminder.sendDate}
      +
      + View/Edit +
      + + + +
      +
      +
      + #end for + +
      + ${mainTemplateBottom()} +#end proc