From 3b552010b394de4061ee69ce8a1410d4a5aab468 Mon Sep 17 00:00:00 2001 From: sktbrd <sktbrd.eth@gmail.com> Date: Fri, 30 Aug 2024 12:27:48 -0300 Subject: [PATCH 01/23] changed min-width and clean console.logs --- src/fidgets/ui/Links.tsx | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/fidgets/ui/Links.tsx b/src/fidgets/ui/Links.tsx index 4310b900..8d9dfc36 100644 --- a/src/fidgets/ui/Links.tsx +++ b/src/fidgets/ui/Links.tsx @@ -66,7 +66,7 @@ export const linkConfig: FidgetProperties = { }, { fieldName: "viewMode", - default: "grid", + default: "list", required: false, inputSelector: SwitchButton, group: "style", @@ -129,9 +129,9 @@ export const linkConfig: FidgetProperties = { }, ], size: { - minHeight: 1, + minHeight: 2, maxHeight: 36, - minWidth: 4, + minWidth: 2, maxWidth: 36, }, }; @@ -141,12 +141,7 @@ export const Links: React.FC<FidgetArgs<LinkFidgetSettings>> = ({ }) => { const links = Array.isArray(settings.links) ? settings.links : []; const isGridView = settings.viewMode === "grid"; - useEffect(() => { - console.log("Links fidget settings:", settings.links); - }, [settings.links]); - useEffect(() => { - console.log("Links fidget settings:", settings.links); - }, [settings.links]); + return ( <div style={{ From 475e7e7ba82460fa8f85130e81c8229618476685 Mon Sep 17 00:00:00 2001 From: sktbrd <sktbrd.eth@gmail.com> Date: Fri, 30 Aug 2024 12:28:12 -0300 Subject: [PATCH 02/23] clean unused import --- src/fidgets/ui/Links.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/fidgets/ui/Links.tsx b/src/fidgets/ui/Links.tsx index 8d9dfc36..1ddee40f 100644 --- a/src/fidgets/ui/Links.tsx +++ b/src/fidgets/ui/Links.tsx @@ -4,7 +4,6 @@ import CSSInput from "@/common/components/molecules/CSSInput"; import ColorSelector from "@/common/components/molecules/ColorSelector"; import FontSelector from "@/common/components/molecules/FontSelector"; import { FidgetArgs, FidgetProperties, FidgetModule } from "@/common/fidgets"; -import { defaultStyleFields } from "../helpers"; import { FidgetSettingsStyle } from "@/common/fidgets"; import { CardHeader, From f216c19330c485b6e9286bcb23fb9bac034bde41 Mon Sep 17 00:00:00 2001 From: sktbrd <sktbrd.eth@gmail.com> Date: Fri, 30 Aug 2024 12:50:48 -0300 Subject: [PATCH 03/23] Links description Colors, replace avatar url --- .../components/molecules/LinksInput.tsx | 6 ++--- src/fidgets/ui/Links.tsx | 23 ++++++++++++++----- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/common/components/molecules/LinksInput.tsx b/src/common/components/molecules/LinksInput.tsx index c2a69a27..72889495 100644 --- a/src/common/components/molecules/LinksInput.tsx +++ b/src/common/components/molecules/LinksInput.tsx @@ -94,12 +94,12 @@ const LinksInput = forwardRef<HTMLInputElement, LinksInputProps>( const newLink = { text: "New Link", url: "https://", - avatar: "/images/chainEmoji.png", + avatar: "https://www.nounspace.com/images/chainEmoji.png", description: "Description", }; onChange?.([...value, newLink]); - setVisibleFields([...visibleFields, true]); // Automatically expand new link + setVisibleFields([...visibleFields, true]); }; const removeLink = (index: number) => { @@ -133,7 +133,7 @@ const LinksInput = forwardRef<HTMLInputElement, LinksInputProps>( value={link.url} onChange={(e: any) => { handleLinkChange(index, { ...link, url: e.target.value }); - showAdditionalFields(index); // Show fields when URL is updated + showAdditionalFields(index); }} /> <TextFieldSlot> diff --git a/src/fidgets/ui/Links.tsx b/src/fidgets/ui/Links.tsx index 1ddee40f..1a94533d 100644 --- a/src/fidgets/ui/Links.tsx +++ b/src/fidgets/ui/Links.tsx @@ -36,6 +36,8 @@ export type LinkFidgetSettings = { itemBackground: string; viewMode: ViewMode; description?: string; + DescriptionColor: string; + HeaderColor: string; } & FidgetSettingsStyle; export const linkConfig: FidgetProperties = { @@ -55,7 +57,7 @@ export const linkConfig: FidgetProperties = { { text: "Nouns", url: "https://nouns.wtf", - avatar: "/images/nouns.svg", + avatar: "https://nouns.wtf/static/media/noggles.7644bfd0.svg", description: "Funds ideas", }, ], @@ -78,7 +80,14 @@ export const linkConfig: FidgetProperties = { group: "style", }, { - fieldName: "fontColor", + fieldName: "HeaderColor", + default: "black", + required: false, + inputSelector: ColorSelector, + group: "style", + }, + { + fieldName: "DescriptionColor", default: "black", required: false, inputSelector: ColorSelector, @@ -153,6 +162,7 @@ export const Links: React.FC<FidgetArgs<LinkFidgetSettings>> = ({ overflow: "auto", scrollbarWidth: "none", padding: "0.5rem", + borderRadius: "1rem", }} > {settings?.title && ( @@ -161,7 +171,7 @@ export const Links: React.FC<FidgetArgs<LinkFidgetSettings>> = ({ className="text-2xl font-bold" style={{ fontFamily: settings.headingsFontFamily, - color: settings.fontColor, + color: settings.HeaderColor, }} > {settings.title} @@ -223,12 +233,12 @@ export const Links: React.FC<FidgetArgs<LinkFidgetSettings>> = ({ className="items-start text-base font-normal text-black dark:text-white flex-grow" style={{ fontFamily: settings.fontFamily, - color: settings.fontColor, + color: settings.HeaderColor, textAlign: "left", wordWrap: "break-word", overflow: "hidden", textOverflow: "ellipsis", - maxHeight: "3rem", // Adjust this value to limit the height of the text + maxHeight: "3rem", display: "-webkit-box", WebkitLineClamp: 2, WebkitBoxOrient: "vertical", @@ -242,11 +252,12 @@ export const Links: React.FC<FidgetArgs<LinkFidgetSettings>> = ({ </CardDescription> {link.description && ( <p - className="text-sm font-normal text-gray-500 dark:text-gray-400" + className="text-sm font-normal" style={{ wordWrap: "break-word", overflow: "hidden", textOverflow: "ellipsis", + color: settings.DescriptionColor, }} > {link.description} From e87db7f963c5f799806e1d9e9a3aae395500521a Mon Sep 17 00:00:00 2001 From: sktbrd <sktbrd.eth@gmail.com> Date: Fri, 30 Aug 2024 13:12:25 -0300 Subject: [PATCH 04/23] Links input handling focus --- src/common/components/molecules/LinksInput.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/common/components/molecules/LinksInput.tsx b/src/common/components/molecules/LinksInput.tsx index 72889495..b0cdfb69 100644 --- a/src/common/components/molecules/LinksInput.tsx +++ b/src/common/components/molecules/LinksInput.tsx @@ -135,6 +135,7 @@ const LinksInput = forwardRef<HTMLInputElement, LinksInputProps>( handleLinkChange(index, { ...link, url: e.target.value }); showAdditionalFields(index); }} + onFocus={() => showAdditionalFields(index)} /> <TextFieldSlot> <p From bca4e3f7957aa3a98d52450dc2377f5d661dc426 Mon Sep 17 00:00:00 2001 From: Jesse Paterson <jesse.r.pat@gmail.com> Date: Sun, 1 Sep 2024 13:47:19 -0500 Subject: [PATCH 05/23] should fix initial feed settings (#391) --- src/fidgets/farcaster/Feed.tsx | 2 +- src/pages/homebase/index.tsx | 4 ++-- supabase/migrations/20240821215436_spaceOrderings.sql | 2 -- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/fidgets/farcaster/Feed.tsx b/src/fidgets/farcaster/Feed.tsx index 66b6d37d..b901e66b 100644 --- a/src/fidgets/farcaster/Feed.tsx +++ b/src/fidgets/farcaster/Feed.tsx @@ -109,7 +109,7 @@ const feedProperties: FidgetProperties<FeedFidgetSettings> = { displayName: "Username", inputSelector: TextInput, required: false, - disabledIf: (settings) => settings.selectPlatform.name === "Farcaster", + disabledIf: (settings) => settings.selectPlatform.name === "farcaster", default: "thenounspace", }, { diff --git a/src/pages/homebase/index.tsx b/src/pages/homebase/index.tsx index 958c1841..4e9d4031 100644 --- a/src/pages/homebase/index.tsx +++ b/src/pages/homebase/index.tsx @@ -65,8 +65,8 @@ const Homebase: NextPageWithLayout = () => { args.feed = ( <FeedModule.fidget settings={{ - feedType: FeedType.Filter, - users: String(currentFid), + feedType: FeedType.Following, + users: "", filterType: FilterType.Users, selectPlatform: { name: "farcaster", icon: "/images/farcaster.jpeg" }, Xhandle: "", diff --git a/supabase/migrations/20240821215436_spaceOrderings.sql b/supabase/migrations/20240821215436_spaceOrderings.sql index cb813731..9d305628 100644 --- a/supabase/migrations/20240821215436_spaceOrderings.sql +++ b/supabase/migrations/20240821215436_spaceOrderings.sql @@ -10,8 +10,6 @@ create table "public"."spaceOrderings" ( alter table "public"."spaceOrderings" enable row level security; -alter table "public"."spaceRegistrations" drop column "isDefault"; - CREATE INDEX "fidRegistrations_fid_idx" ON public."fidRegistrations" USING btree (fid); CREATE UNIQUE INDEX "spaceOrderings_pkey" ON public."spaceOrderings" USING btree (id); From b30df1729cb4b5c163914c5cc61107fb45dc3a1a Mon Sep 17 00:00:00 2001 From: Jesse Paterson <jesse.r.pat@gmail.com> Date: Sun, 1 Sep 2024 13:50:55 -0500 Subject: [PATCH 06/23] Feed fix (#392) --- src/fidgets/farcaster/Feed.tsx | 4 ++-- src/pages/homebase/index.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/fidgets/farcaster/Feed.tsx b/src/fidgets/farcaster/Feed.tsx index b901e66b..3658d051 100644 --- a/src/fidgets/farcaster/Feed.tsx +++ b/src/fidgets/farcaster/Feed.tsx @@ -93,7 +93,7 @@ const feedProperties: FidgetProperties<FeedFidgetSettings> = { displayName: "Select App", inputSelector: PlatformSelector, required: false, - default: { name: "farcaster", icon: "/images/farcaster.jpeg" }, + default: { name: "Farcaster", icon: "/images/farcaster.jpeg" }, }, { fieldName: "feedType", @@ -206,7 +206,7 @@ export const FEED_TYPES = [ const Feed: React.FC<FidgetArgs<FeedFidgetSettings>> = ({ settings }) => { const { - selectPlatform = { name: "farcaster", icon: "/images/farcaster.jpeg" }, + selectPlatform = { name: "Farcaster", icon: "/images/farcaster.jpeg" }, Xhandle, style, } = settings; diff --git a/src/pages/homebase/index.tsx b/src/pages/homebase/index.tsx index 4e9d4031..232610b4 100644 --- a/src/pages/homebase/index.tsx +++ b/src/pages/homebase/index.tsx @@ -68,7 +68,7 @@ const Homebase: NextPageWithLayout = () => { feedType: FeedType.Following, users: "", filterType: FilterType.Users, - selectPlatform: { name: "farcaster", icon: "/images/farcaster.jpeg" }, + selectPlatform: { name: "Farcaster", icon: "/images/farcaster.jpeg" }, Xhandle: "", style: "", }} From 56b7d3c2c58ce991fa30203750c2e6dbe28d6012 Mon Sep 17 00:00:00 2001 From: Vlad 2 <116202536+sktbrd@users.noreply.github.com> Date: Tue, 3 Sep 2024 18:41:36 -0300 Subject: [PATCH 07/23] =?UTF-8?q?link=20=E2=8C=90=E2=97=A8-=E2=97=A8=20log?= =?UTF-8?q?o=20to=20@wtfisnouns=20space=20(#395)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Willy Ogorzaly <willy@ogorzaly.com> --- src/common/components/molecules/BrandHeader.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/components/molecules/BrandHeader.tsx b/src/common/components/molecules/BrandHeader.tsx index 260bc12c..828c32d5 100644 --- a/src/common/components/molecules/BrandHeader.tsx +++ b/src/common/components/molecules/BrandHeader.tsx @@ -18,7 +18,7 @@ const BrandHeader = () => { <TooltipProvider> <Tooltip> <Link - href="/homebase" + href="https://nounspace.com/s/wtfisnouns" className="flex items-center ps-2.5" rel="noopener noreferrer" > From 1ed504a9906ed3f20b74ad07c905a7aa9c1345ff Mon Sep 17 00:00:00 2001 From: Vlad 2 <116202536+sktbrd@users.noreply.github.com> Date: Wed, 4 Sep 2024 16:59:24 -0300 Subject: [PATCH 08/23] the whole link card is clicable now (#379) --- src/fidgets/ui/Links.tsx | 103 +++++++++++++++++++++------------------ 1 file changed, 56 insertions(+), 47 deletions(-) diff --git a/src/fidgets/ui/Links.tsx b/src/fidgets/ui/Links.tsx index 1a94533d..0e949c31 100644 --- a/src/fidgets/ui/Links.tsx +++ b/src/fidgets/ui/Links.tsx @@ -182,53 +182,62 @@ export const Links: React.FC<FidgetArgs<LinkFidgetSettings>> = ({ <div className={isGridView ? "grid grid-cols-3 gap-4" : "flex flex-col"}> {links.length > 0 && links.map((link, index) => ( - <CardContent - style={{ - background: settings.itemBackground, - wordWrap: "break-word", - maxHeight: "200px", - height: "auto", - display: "flex", - flexDirection: isGridView ? "column" : "row", - padding: isGridView ? "1rem" : "0.5rem", - margin: isGridView ? "0.25rem" : "0.5rem", - overflow: "hidden", - textOverflow: "ellipsis", - transition: "transform 0.3s", - }} - className={ - isGridView - ? "p-4 flex flex-col items-start justify-between m-1 bg-gradient-to-r from-gray-100 to-gray-300 rounded-md hover:scale-105" - : "p-2 flex items-center justify-between m-2 bg-gradient-to-r from-gray-100 to-gray-300 rounded-md hover:scale-105" - } + <a key={index} + href={link.url} + target="_blank" + rel="noopener noreferrer" > - {link.avatar ? ( - <Avatar className={isGridView ? "mb-2" : "mr-2 flex-shrink-0"}> - <AvatarImage - style={{ padding: "5px" }} - src={link.avatar} - alt={link.text} - /> - <AvatarFallback> - <span className="sr-only">{link.text}</span> - </AvatarFallback> - </Avatar> - ) : ( - <Avatar className={isGridView ? "mb-2" : "mr-2 flex-shrink-0"}> - <AvatarImage - src="/images/chainEmoji.png" - style={{ padding: "5px" }} - alt={link.text} - /> - <AvatarFallback> - <span className="sr-only">{link.text}</span> - </AvatarFallback> - </Avatar> - )} + <CardContent + style={{ + background: settings.itemBackground, + wordWrap: "break-word", + maxHeight: "200px", + height: "auto", + display: "flex", + flexDirection: isGridView ? "column" : "row", + padding: isGridView ? "1rem" : "0.5rem", + margin: isGridView ? "0.25rem" : "0.5rem", + overflow: "hidden", + textOverflow: "ellipsis", + transition: "transform 0.3s", + }} + className={ + isGridView + ? "p-4 flex flex-col items-start justify-between m-1 bg-gradient-to-r from-gray-100 to-gray-300 rounded-md hover:scale-105" + : "p-2 flex items-center justify-between m-2 bg-gradient-to-r from-gray-100 to-gray-300 rounded-md hover:scale-105" + } + key={index} + > + {link.avatar ? ( + <Avatar + className={isGridView ? "mb-2" : "mr-2 flex-shrink-0"} + > + <AvatarImage + style={{ padding: "5px" }} + src={link.avatar} + alt={link.text} + /> + <AvatarFallback> + <span className="sr-only">{link.text}</span> + </AvatarFallback> + </Avatar> + ) : ( + <Avatar + className={isGridView ? "mb-2" : "mr-2 flex-shrink-0"} + > + <AvatarImage + src="/images/chainEmoji.png" + style={{ padding: "5px" }} + alt={link.text} + /> + <AvatarFallback> + <span className="sr-only">{link.text}</span> + </AvatarFallback> + </Avatar> + )} - <div style={{ flex: 1, minWidth: 0 }}> - <a href={link.url} target="_blank" rel="noopener noreferrer"> + <div style={{ flex: 1, minWidth: 0 }}> <CardDescription className="items-start text-base font-normal text-black dark:text-white flex-grow" style={{ @@ -263,9 +272,9 @@ export const Links: React.FC<FidgetArgs<LinkFidgetSettings>> = ({ {link.description} </p> )} - </a> - </div> - </CardContent> + </div> + </CardContent> + </a> ))} </div> </div> From 123a019765dc2251746bc694faf5bb975070574b Mon Sep 17 00:00:00 2001 From: Gleb Surinov <glebovsky@gmail.com> Date: Thu, 5 Sep 2024 02:00:08 +0600 Subject: [PATCH 09/23] fix: Hydration error for space loading (#369) --- src/common/components/templates/SpaceLoading.tsx | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/common/components/templates/SpaceLoading.tsx b/src/common/components/templates/SpaceLoading.tsx index 992fbc97..dd49d653 100644 --- a/src/common/components/templates/SpaceLoading.tsx +++ b/src/common/components/templates/SpaceLoading.tsx @@ -1,15 +1,17 @@ -import React, { ReactNode, useMemo } from "react"; +import React, { ReactNode, useState, useEffect } from "react"; import { isUndefined } from "lodash"; import useWindowSize from "@/common/lib/hooks/useWindowSize"; export default function SpaceLoading({ profile }: { profile?: ReactNode }) { + const [rowHeight, setRowHeight] = useState(70); + const { height } = useWindowSize(); const maxRows = 12; const cols = 12; const margin = [16, 16]; const containerPadding = [16, 16]; - const { height } = useWindowSize(); - const rowHeight = useMemo( - () => + + useEffect(() => { + setRowHeight( height ? Math.round( // The 64 magic number here is the height of the tabs bar above the grid @@ -17,8 +19,9 @@ export default function SpaceLoading({ profile }: { profile?: ReactNode }) { maxRows, ) : 70, - [height], - ); + ), + [height]; + }); return ( <> From e0f457c92c70298da6eb25a0b62602d3007167cc Mon Sep 17 00:00:00 2001 From: Willy Ogorzaly <willy@ogorzaly.com> Date: Fri, 6 Sep 2024 13:54:46 -0500 Subject: [PATCH 10/23] Revert commit 56b7d3c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit no longer planning to link ⌐◨-◨ to the wtfisnouns page. instead, will link to the homepage (that users can currently only see when not logged in) and add a link to the wtfisnouns page from there --- src/common/components/molecules/BrandHeader.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/components/molecules/BrandHeader.tsx b/src/common/components/molecules/BrandHeader.tsx index 828c32d5..260bc12c 100644 --- a/src/common/components/molecules/BrandHeader.tsx +++ b/src/common/components/molecules/BrandHeader.tsx @@ -18,7 +18,7 @@ const BrandHeader = () => { <TooltipProvider> <Tooltip> <Link - href="https://nounspace.com/s/wtfisnouns" + href="/homebase" className="flex items-center ps-2.5" rel="noopener noreferrer" > From bd234c49dc84aff6fc094d6b4937c461631869b2 Mon Sep 17 00:00:00 2001 From: r4to <gustavo-kuhl@hotmail.com> Date: Fri, 6 Sep 2024 16:01:19 -0300 Subject: [PATCH 11/23] wip: Solves cast modal channel selector bug (#394) --- src/common/components/molecules/Modal.tsx | 4 +- .../components/organisms/Navigation.tsx | 4 +- .../farcaster/components/CreateCast.tsx | 37 +++++++++++++----- src/fidgets/farcaster/utils.ts | 29 ++++++++++++++ .../api/farcaster/neynar/active-channels.ts | 38 +++++++++++++++++++ .../api/farcaster/neynar/search-channels.ts | 38 +++++++++++++++++++ 6 files changed, 137 insertions(+), 13 deletions(-) create mode 100644 src/pages/api/farcaster/neynar/active-channels.ts create mode 100644 src/pages/api/farcaster/neynar/search-channels.ts diff --git a/src/common/components/molecules/Modal.tsx b/src/common/components/molecules/Modal.tsx index 38a5393e..d3d7d2dd 100644 --- a/src/common/components/molecules/Modal.tsx +++ b/src/common/components/molecules/Modal.tsx @@ -23,11 +23,11 @@ const Modal = ({ title, description, children, - focusMode, + focusMode = true, showClose = true, overlay = true, }: ModalProps) => ( - <Dialog.Root open={open} onOpenChange={setOpen} modal={focusMode || true}> + <Dialog.Root open={open} onOpenChange={setOpen} modal={focusMode}> <Dialog.Portal> {overlay && open && ( <Dialog.Overlay className="bg-muted/95 data-[state=open]:animate-overlayShow fixed inset-0 z-50" /> diff --git a/src/common/components/organisms/Navigation.tsx b/src/common/components/organisms/Navigation.tsx index 33ce0475..ab474683 100644 --- a/src/common/components/organisms/Navigation.tsx +++ b/src/common/components/organisms/Navigation.tsx @@ -163,10 +163,10 @@ const Navigation: React.FC<NavProps> = ({ isEditable, enterEditMode }) => { <Modal open={showCastModal} setOpen={setShowCastModal} - focusMode + focusMode={false} showClose={false} > - <CreateCast /> + <CreateCast afterSubmit={() => setShowCastModal(false)} /> </Modal> <SearchModal ref={searchRef} /> <div className="pt-12 pb-12 h-full md:block hidden"> diff --git a/src/fidgets/farcaster/components/CreateCast.tsx b/src/fidgets/farcaster/components/CreateCast.tsx index d74d0997..98041fff 100644 --- a/src/fidgets/farcaster/components/CreateCast.tsx +++ b/src/fidgets/farcaster/components/CreateCast.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from "react"; +import React, { useCallback, useEffect, useState } from "react"; import { useEditor, EditorContent } from "@mod-protocol/react-editor"; import { EmbedsEditor } from "@mod-protocol/react-ui-shadcn/dist/lib/embeds"; import { @@ -34,21 +34,20 @@ import { PhotoIcon } from "@heroicons/react/20/solid"; import { FarcasterEmbed, isFarcasterUrlEmbed } from "@mod-protocol/farcaster"; import { CastType, Signer } from "@farcaster/core"; import { useFarcasterSigner } from ".."; -import { submitCast } from "../utils"; +import { + fetchChannelsByName, + fetchChannelsForUser, + submitCast, +} from "../utils"; import { bytesToHex } from "@noble/ciphers/utils"; const API_URL = process.env.NEXT_PUBLIC_MOD_PROTOCOL_API_URL!; const getMentions = getFarcasterMentions(API_URL); + const debouncedGetMentions = debounce(getMentions, 200, { leading: true, trailing: false, }); -const getChannels = getFarcasterChannels(API_URL); -const debouncedGetChannels = debounce(getChannels, 200, { - leading: true, - trailing: false, -}); - const getUrlMetadata = fetchUrlMetadata(API_URL); const getMentionFids = getMentionFidsByUsernames(API_URL); @@ -82,6 +81,7 @@ export type DraftType = { type CreateCastProps = { initialDraft?: Partial<DraftType>; + afterSubmit?: () => void; }; export type ModProtocolCastAddBody = Exclude< @@ -117,7 +117,10 @@ async function publishPost(draft: DraftType, fid: number, signer: Signer) { } } -const CreateCast: React.FC<CreateCastProps> = ({ initialDraft }) => { +const CreateCast: React.FC<CreateCastProps> = ({ + initialDraft, + afterSubmit = () => {}, +}) => { const [currentMod, setCurrentMod] = useState<ModManifest | null>(null); const [initialEmbeds, setInitialEmbeds] = useState<FarcasterEmbed[]>(); const [draft, setDraft] = useState<DraftType>({ @@ -131,10 +134,26 @@ const CreateCast: React.FC<CreateCastProps> = ({ initialDraft }) => { const { signer, isLoadingSigner, fid } = useFarcasterSigner("create-cast"); + const debouncedGetChannels = useCallback( + debounce( + async (query: string) => { + if (query && query !== "") { + return await fetchChannelsByName(query); + } else { + return await fetchChannelsForUser(fid); + } + }, + 200, + { leading: true, trailing: false }, + ), + [fid], + ); + const onSubmitPost = async (): Promise<boolean> => { if ((!draft?.text && !draft?.embeds?.length) || isUndefined(signer)) return false; await publishPost(draft, fid, signer); + afterSubmit(); return true; }; diff --git a/src/fidgets/farcaster/utils.ts b/src/fidgets/farcaster/utils.ts index 118005c5..7bae5bc9 100644 --- a/src/fidgets/farcaster/utils.ts +++ b/src/fidgets/farcaster/utils.ts @@ -28,6 +28,7 @@ import { mnemonicToAccount } from "viem/accounts"; import { optimismChaninClient } from "@/constants/optimismChainClient"; import axiosBackend from "@/common/data/api/backend"; import { ModProtocolCastAddBody } from "./components/CreateCast"; +import { type Channel } from "@mod-protocol/farcaster"; export const WARPCAST_RECOVERY_PROXY: `0x${string}` = "0x00000000FcB080a4D6c39a9354dA9EB9bC104cd7"; @@ -404,3 +405,31 @@ export const getSignatureForUsernameProof = async ( }); return signature; }; + +export async function fetchChannelsForUser( + fid: number, + limit: number = 20, +): Promise<Channel[]> { + try { + const channelsResponse = await axiosBackend.get( + `/api/farcaster/neynar/active-channels/?limit=${limit}&fid=${fid}`, + ); + return channelsResponse.data.channels as Channel[]; + } catch (e) { + return [] as Channel[]; + } +} + +export async function fetchChannelsByName( + query: string, + limit: number = 20, +): Promise<Channel[]> { + try { + const channelsResponse = await axiosBackend.get( + `/api/farcaster/neynar/search-channels?limit=${limit}&q=${query}`, + ); + return channelsResponse.data.channels as Channel[]; + } catch (e) { + return [] as Channel[]; + } +} diff --git a/src/pages/api/farcaster/neynar/active-channels.ts b/src/pages/api/farcaster/neynar/active-channels.ts new file mode 100644 index 00000000..a99f6a8c --- /dev/null +++ b/src/pages/api/farcaster/neynar/active-channels.ts @@ -0,0 +1,38 @@ +import requestHandler from "@/common/data/api/requestHandler"; +import axios, { AxiosRequestConfig, isAxiosError } from "axios"; +import Error from "next/error"; +import { NextApiRequest, NextApiResponse } from "next/types"; + +async function loadUserChannels(req: NextApiRequest, res: NextApiResponse) { + try { + const options: AxiosRequestConfig = { + method: "GET", + url: `https://api.neynar.com/v2/farcaster/channel/user`, + headers: { + accept: "application/json", + api_key: process.env.NEYNAR_API_KEY!, + }, + params: req.query, + }; + + const { data } = await axios.request(options); + + if (data.status && data.status !== 200) { + return res.status(data.status).json(data); + } + + res.status(200).json(data); + } catch (e) { + if (isAxiosError(e)) { + res + .status(e.response!.data.status || 500) + .json(e.response!.data || "An unknown error occurred"); + } else { + res.status(500).json("An unknown error occurred"); + } + } +} + +export default requestHandler({ + get: loadUserChannels, +}); diff --git a/src/pages/api/farcaster/neynar/search-channels.ts b/src/pages/api/farcaster/neynar/search-channels.ts new file mode 100644 index 00000000..c3b191f6 --- /dev/null +++ b/src/pages/api/farcaster/neynar/search-channels.ts @@ -0,0 +1,38 @@ +import requestHandler from "@/common/data/api/requestHandler"; +import axios, { AxiosRequestConfig, isAxiosError } from "axios"; +import Error from "next/error"; +import { NextApiRequest, NextApiResponse } from "next/types"; + +async function searchChannels(req: NextApiRequest, res: NextApiResponse) { + try { + const options: AxiosRequestConfig = { + method: "GET", + url: `https://api.neynar.com/v2/farcaster/channel/search`, + headers: { + accept: "application/json", + api_key: process.env.NEYNAR_API_KEY!, + }, + params: req.query, + }; + + const { data } = await axios.request(options); + + if (data.status && data.status !== 200) { + return res.status(data.status).json(data); + } + + res.status(200).json(data); + } catch (e) { + if (isAxiosError(e)) { + res + .status(e.response!.data.status || 500) + .json(e.response!.data || "An unknown error occurred"); + } else { + res.status(500).json("An unknown error occurred"); + } + } +} + +export default requestHandler({ + get: searchChannels, +}); From a1e4e061ee237a97edf6839bfc545c4486d708a7 Mon Sep 17 00:00:00 2001 From: r4to <gustavo-kuhl@hotmail.com> Date: Fri, 6 Sep 2024 16:13:08 -0300 Subject: [PATCH 12/23] style: update metadata image preview style (#365) --- src/common/lib/utils/generateUserMetadataHtml.tsx | 5 ++--- src/pages/api/metadata/spaces.tsx | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/common/lib/utils/generateUserMetadataHtml.tsx b/src/common/lib/utils/generateUserMetadataHtml.tsx index 3e742a01..9a6aafb2 100644 --- a/src/common/lib/utils/generateUserMetadataHtml.tsx +++ b/src/common/lib/utils/generateUserMetadataHtml.tsx @@ -31,7 +31,6 @@ export const generateUserMetadataHtml = (userMetadata?: UserMetadata) => { <meta property="twitter:domain" content="https://nounspace.com/" /> <meta property="og:url" content={spaceUrl} /> <meta property="twitter:url" content={spaceUrl} /> - <meta property="og:image" content={ogImageUrl} /> {bio && ( <> <meta name="description" content={bio} /> @@ -41,9 +40,9 @@ export const generateUserMetadataHtml = (userMetadata?: UserMetadata) => { )} {pfpUrl && ( <> - <meta property="og:image" content={pfpUrl} /> <meta name="twitter:card" content={pfpUrl} /> - <meta name="twitter:image" content={pfpUrl} /> + <meta property="og:image" content={ogImageUrl} /> + <meta name="twitter:image" content={ogImageUrl} /> </> )} </> diff --git a/src/pages/api/metadata/spaces.tsx b/src/pages/api/metadata/spaces.tsx index 153b3a63..9d5a8a8f 100644 --- a/src/pages/api/metadata/spaces.tsx +++ b/src/pages/api/metadata/spaces.tsx @@ -53,8 +53,8 @@ const ProfileCard = ({ userMetadata }: { userMetadata: UserMetadata }) => { > <img src={userMetadata.pfpUrl} - width={"120px"} - height={"120px"} + width={"180px"} + height={"180px"} style={{ borderRadius: "300px" }} /> <p From 3c52044b891f02279390e31307e232b95d8ef349 Mon Sep 17 00:00:00 2001 From: Vlad 2 <116202536+sktbrd@users.noreply.github.com> Date: Mon, 9 Sep 2024 12:56:52 -0300 Subject: [PATCH 13/23] fix tabbar background and add tab button index (#403) --- src/common/components/organisms/TabBar.tsx | 2 +- src/common/components/templates/Space.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/common/components/organisms/TabBar.tsx b/src/common/components/organisms/TabBar.tsx index 088327ba..983bdac2 100644 --- a/src/common/components/organisms/TabBar.tsx +++ b/src/common/components/organisms/TabBar.tsx @@ -352,7 +352,7 @@ const TabBar = memo(function TabBar({ </Reorder.Group> {inEditMode ? ( - <div className="flex flex-row pr-32"> + <div className="flex flex-row pr-32 z-infinity"> <NogsGateButton onClick={handleCreateTab} className="items-center flex rounded-xl p-2 m-3 px-auto bg-[#F3F4F6] hover:bg-sky-100 text-[#1C64F2] font-semibold" diff --git a/src/common/components/templates/Space.tsx b/src/common/components/templates/Space.tsx index 252757a1..8abd857e 100644 --- a/src/common/components/templates/Space.tsx +++ b/src/common/components/templates/Space.tsx @@ -109,7 +109,6 @@ export default function Space({ return ( <div className="user-theme-background w-full h-full relative flex-col"> - <CustomHTMLBackground html={config.theme?.properties.backgroundHTML} /> {isNil(profile) && ( <TabBar hasProfile={!isNil(profile)} @@ -117,6 +116,7 @@ export default function Space({ profileFid={fid ? fid : 0} /> )} + <CustomHTMLBackground html={config.theme?.properties.backgroundHTML} /> <div className="w-full transition-all duration-100 ease-out h-[calc(100vh-64px)]"> <div className="flex flex-col h-full"> <div style={{ position: "fixed", zIndex: 9999 }}> From 3071ec880003399f5d8da3f39a3cde9268a295e8 Mon Sep 17 00:00:00 2001 From: Vlad 2 <116202536+sktbrd@users.noreply.github.com> Date: Mon, 9 Sep 2024 12:57:27 -0300 Subject: [PATCH 14/23] video fidget and iframe fidget improvements (#402) --- src/common/fidgets/FidgetWrapper.tsx | 1 - src/fidgets/helpers.tsx | 13 +++ src/fidgets/index.ts | 3 +- src/fidgets/ui/IFrame.tsx | 9 +- src/fidgets/ui/Video.tsx | 121 +++++++++++++++++++++++++++ 5 files changed, 140 insertions(+), 7 deletions(-) create mode 100644 src/fidgets/ui/Video.tsx diff --git a/src/common/fidgets/FidgetWrapper.tsx b/src/common/fidgets/FidgetWrapper.tsx index 1da7842f..971749c1 100644 --- a/src/common/fidgets/FidgetWrapper.tsx +++ b/src/common/fidgets/FidgetWrapper.tsx @@ -70,7 +70,6 @@ export function FidgetWrapper({ homebaseConfig: state.homebase.homebaseConfig, })); - console.log(homebaseConfig); function onClickEdit() { setSelectedFidgetID(bundle.id); setCurrentFidgetSettings( diff --git a/src/fidgets/helpers.tsx b/src/fidgets/helpers.tsx index ea2dcb1d..c5dafa5d 100644 --- a/src/fidgets/helpers.tsx +++ b/src/fidgets/helpers.tsx @@ -34,3 +34,16 @@ export const defaultStyleFields: FidgetFieldConfig[] = [ group: "style", }, ]; + +export const transformUrl = (url: string) => { + if (url && url.match(/youtube\.com\/watch\?v=/)) { + return url.replace("watch?v=", "embed/"); + } + if (url && url.match(/vimeo\.com\/\d+/)) { + return url.replace("vimeo.com", "player.vimeo.com/video"); + } + if (url && url.match(/odysee\.com\/@/)) { + return url.replace("odysee.com", "odysee.com/$/embed"); + } + return url; +}; diff --git a/src/fidgets/index.ts b/src/fidgets/index.ts index bb5c83c0..03ed83e2 100644 --- a/src/fidgets/index.ts +++ b/src/fidgets/index.ts @@ -12,7 +12,7 @@ import Feed from "./farcaster/Feed"; import CreateCast from "./farcaster/CreateCast"; import Links from "./ui/Links"; import snapShot from "./snapshot/SnapShot"; - +import VideoFidget from "./ui/Video"; export const CompleteFidgets = { // example: @@ -33,6 +33,7 @@ export const CompleteFidgets = { links: Links, // zora: zoraEmbed, -> 500 server error -Frame ancestors block SnapShot: snapShot, + Video: VideoFidget, }; export const LayoutFidgets = { diff --git a/src/fidgets/ui/IFrame.tsx b/src/fidgets/ui/IFrame.tsx index 734721c2..e641e8a5 100644 --- a/src/fidgets/ui/IFrame.tsx +++ b/src/fidgets/ui/IFrame.tsx @@ -9,9 +9,8 @@ import { import { isValidUrl } from "@/common/lib/utils/url"; import useSafeUrl from "@/common/lib/hooks/useSafeUrl"; import { defaultStyleFields } from "@/fidgets/helpers"; -import WidthSlider from "@/common/components/molecules/ScaleSliderSelector"; import IFrameWidthSlider from "@/common/components/molecules/IframeScaleSlider"; - +import { transformUrl } from "@/fidgets/helpers"; export type IFrameFidgetSettings = { url: string; size: number; @@ -69,7 +68,7 @@ const IFrame: React.FC<FidgetArgs<IFrameFidgetSettings>> = ({ }) => { const isValid = isValidUrl(url); const sanitizedUrl = useSafeUrl(url, DISALLOW_URL_PATTERNS); - + const transformedUrl = transformUrl(sanitizedUrl || ""); if (!url) { return <ErrorWrapper icon="➕" message="Provide a URL to display here." />; } @@ -78,7 +77,7 @@ const IFrame: React.FC<FidgetArgs<IFrameFidgetSettings>> = ({ return <ErrorWrapper icon="❌" message={`This URL is invalid (${url}).`} />; } - if (!sanitizedUrl) { + if (!transformedUrl) { return ( <ErrorWrapper icon="🔒" @@ -92,7 +91,7 @@ const IFrame: React.FC<FidgetArgs<IFrameFidgetSettings>> = ({ return ( <div style={{ overflow: "hidden", width: "100%", height: "100%" }}> <iframe - src={sanitizedUrl} + src={transformedUrl} title="IFrame Fidget" sandbox="allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox" style={{ diff --git a/src/fidgets/ui/Video.tsx b/src/fidgets/ui/Video.tsx new file mode 100644 index 00000000..60ce6934 --- /dev/null +++ b/src/fidgets/ui/Video.tsx @@ -0,0 +1,121 @@ +import React from "react"; +import TextInput from "@/common/components/molecules/TextInput"; +import { + FidgetArgs, + FidgetProperties, + FidgetModule, + type FidgetSettingsStyle, +} from "@/common/fidgets"; +import { isValidUrl } from "@/common/lib/utils/url"; +import useSafeUrl from "@/common/lib/hooks/useSafeUrl"; +import { defaultStyleFields } from "@/fidgets/helpers"; +import IFrameWidthSlider from "@/common/components/molecules/IframeScaleSlider"; +import { transformUrl } from "@/fidgets/helpers"; + +export type VideoFidgetSettings = { + url: string; + size: number; +} & FidgetSettingsStyle; + +const DISALLOW_URL_PATTERNS = [ + /javascript:/i, + /^data:/i, + /<script/i, + /%3Cscript/i, +]; + +const frameConfig: FidgetProperties = { + fidgetName: "Video", + icon: 0x1f4fa, // 📺 + fields: [ + { + fieldName: "url", + required: true, + default: "https://www.youtube.com/watch?v=lOzCA7bZG_k", + inputSelector: TextInput, + group: "settings", + }, + ...defaultStyleFields, + { + fieldName: "size", + required: false, + inputSelector: IFrameWidthSlider, + group: "style", + }, + ], + size: { + minHeight: 2, + maxHeight: 36, + minWidth: 2, + maxWidth: 36, + }, +}; + +const ErrorWrapper: React.FC<{ + message: React.ReactNode; + icon?: React.ReactNode; +}> = ({ message, icon }) => { + return ( + <div className="flex flex-col gap-1 size-full items-center justify-center text-center p-4 absolute top-0 right-0 bottom-0 left-0"> + {icon && <div className="text-[20px]">{icon}</div>} + <p className="text-gray-400 font-semibold text-sm leading-tight max-w-[60ch]"> + {message} + </p> + </div> + ); +}; + +const VideoFidget: React.FC<FidgetArgs<VideoFidgetSettings>> = ({ + settings: { url, size = 1 }, +}) => { + const isValid = isValidUrl(url); + const sanitizedUrl = useSafeUrl(url, DISALLOW_URL_PATTERNS); + const transformedUrl = transformUrl(sanitizedUrl || ""); + + if (!url) { + return ( + <ErrorWrapper + icon="➕" + message="Provide a YouTube/Vimeo URL to display here." + /> + ); + } + + if (!isValid) { + return <ErrorWrapper icon="❌" message={`This URL is invalid (${url}).`} />; + } + + if (!transformedUrl) { + return ( + <ErrorWrapper + icon="🔒" + message={`This URL cannot be displayed due to security restrictions (${url}).`} + /> + ); + } + + const scaleValue = size; + + return ( + <div style={{ overflow: "hidden", width: "100%", height: "100%" }}> + <iframe + src={transformedUrl} + title="IFrame Fidget" + sandbox="allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox" + allowFullScreen + style={{ + transform: `scale(${scaleValue})`, + transformOrigin: "0 0", + width: `${100 / scaleValue}%`, + height: `${100 / scaleValue}%`, + }} + className="size-full" + /> + </div> + ); +}; + +export default { + fidget: VideoFidget, + properties: frameConfig, +} as FidgetModule<FidgetArgs<VideoFidgetSettings>>; From d549adf2e8772d54b9408250aa5bb9cfa2ba65a9 Mon Sep 17 00:00:00 2001 From: Vlad 2 <116202536+sktbrd@users.noreply.github.com> Date: Mon, 9 Sep 2024 14:04:12 -0300 Subject: [PATCH 15/23] Rss fidget (#373) Co-authored-by: Jesse Paterson <jesse.r.pat@gmail.com> --- package.json | 1 + src/common/fidgets/index.d.ts | 3 + src/fidgets/index.ts | 5 + src/fidgets/ui/rss.tsx | 240 ++++++++++++++++++++++++++++++++++ yarn.lock | 31 +++++ 5 files changed, 280 insertions(+) create mode 100644 src/fidgets/ui/rss.tsx diff --git a/package.json b/package.json index 028206c7..78fb06f6 100644 --- a/package.json +++ b/package.json @@ -145,6 +145,7 @@ "remark": "^15.0.1", "remark-gfm": "^4.0.0", "remark-html": "^16.0.1", + "rss-parser": "^3.13.0", "sharp": "^0.33.4", "sonner": "^1.4.41", "tailwind-merge": "^2.2.0", diff --git a/src/common/fidgets/index.d.ts b/src/common/fidgets/index.d.ts index dcb70b3f..0da79dd4 100644 --- a/src/common/fidgets/index.d.ts +++ b/src/common/fidgets/index.d.ts @@ -15,6 +15,9 @@ export type FidgetSettingsStyle = { fidgetBorderWidth?: string; fidgetBorderColor?: Color; fidgetShadow?: string; + itemBorderWidth?: string; + itemBorderColor?: Color; + itemBackground?: Color; }; export type FidgetData = Record<string, any>; diff --git a/src/fidgets/index.ts b/src/fidgets/index.ts index 03ed83e2..154720e4 100644 --- a/src/fidgets/index.ts +++ b/src/fidgets/index.ts @@ -12,7 +12,10 @@ import Feed from "./farcaster/Feed"; import CreateCast from "./farcaster/CreateCast"; import Links from "./ui/Links"; import snapShot from "./snapshot/SnapShot"; +import Swap from "./swap/Swap"; +import rss from "./ui/rss"; import VideoFidget from "./ui/Video"; + export const CompleteFidgets = { // example: @@ -33,6 +36,8 @@ export const CompleteFidgets = { links: Links, // zora: zoraEmbed, -> 500 server error -Frame ancestors block SnapShot: snapShot, + // Swap: Swap, + Rss: rss, Video: VideoFidget, }; diff --git a/src/fidgets/ui/rss.tsx b/src/fidgets/ui/rss.tsx new file mode 100644 index 00000000..b9691ff1 --- /dev/null +++ b/src/fidgets/ui/rss.tsx @@ -0,0 +1,240 @@ +import React, { useEffect, useState } from "react"; +import RSSParser from "rss-parser"; +import TextInput from "@/common/components/molecules/TextInput"; +import CSSInput from "@/common/components/molecules/CSSInput"; +import ColorSelector from "@/common/components/molecules/ColorSelector"; +import FontSelector from "@/common/components/molecules/FontSelector"; +import { FidgetArgs, FidgetProperties, FidgetModule } from "@/common/fidgets"; +import ReactMarkdown from "react-markdown"; +import { defaultStyleFields } from "../helpers"; +import { FidgetSettingsStyle } from "@/common/fidgets"; +import { + CardHeader, + CardContent, + CardTitle, +} from "@/common/components/atoms/card"; +import { MarkdownRenderers } from "@/common/lib/utils/markdownRenderers"; + +export type TextFidgetSettings = { + title?: string; + rssUrl: string; +} & FidgetSettingsStyle; + +export const textConfig: FidgetProperties = { + fidgetName: "Rss", + icon: 0x1f6f0, + fields: [ + { + fieldName: "rssUrl", + default: "https://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml", + required: true, + inputSelector: TextInput, + group: "settings", + }, + { + fieldName: "fontFamily", + default: "var(--user-theme-font)", + required: false, + inputSelector: FontSelector, + group: "style", + }, + { + fieldName: "fontColor", + default: "var(--user-theme-font-color)", + required: false, + inputSelector: ColorSelector, + group: "style", + }, + { + fieldName: "headingsFontFamily", + default: "var(--user-theme-headings-font)", + required: false, + inputSelector: FontSelector, + group: "style", + }, + { + fieldName: "headingsFontColor", + default: "var(--user-theme-headings-font-color)", + required: false, + inputSelector: ColorSelector, + group: "style", + }, + + ...defaultStyleFields, + { + fieldName: "itemBackground", + default: "var(--user-theme-fidget-background)", + required: false, + inputSelector: ColorSelector, + group: "style", + }, + { + fieldName: "itemBorderColor", + default: "var(--user-theme-fidget-border-color)", + required: false, + inputSelector: ColorSelector, + group: "style", + }, + { + fieldName: "css", + default: "", + required: false, + inputSelector: CSSInput, + group: "code", + }, + ], + size: { + minHeight: 2, + maxHeight: 36, + minWidth: 3, + maxWidth: 36, + }, +}; + +export const Rss: React.FC<FidgetArgs<TextFidgetSettings>> = ({ settings }) => { + const [rssItems, setRssItems] = useState<any[]>([]); + const [rssFeed, setRssFeed] = useState<any>(null); + const [isLoading, setIsLoading] = useState(true); + + useEffect(() => { + const fetchRssFeed = async () => { + try { + const parser = new RSSParser(); + const feed = await parser.parseURL(settings.rssUrl); + + if (feed.items && feed.items.length > 0) { + setRssItems(feed.items); + setRssFeed(feed); + } else { + console.warn("No items found in the RSS feed."); + } + } catch (error) { + console.error("Error fetching RSS feed:", error); + } finally { + setIsLoading(false); + } + }; + + fetchRssFeed(); + }, [settings.rssUrl]); + + return ( + <div + style={{ + background: settings.background, + height: "100%", + borderWidth: settings.fidgetBorderWidth, + borderColor: settings.fidgetBorderColor, + boxShadow: settings.fidgetShadow, + overflow: "auto", + scrollbarWidth: "none", + }} + > + {rssFeed?.title && ( + <CardHeader className="p-2 ml-5"> + <div className="flex-col items-center"> + {rssFeed?.image && ( + <img + src={rssFeed.image.url} + alt={rssFeed.title} + className="mt-4 h-auto rounded w-10" + /> + )} + + <CardTitle + className="text-2xl font-bold mt-4 ml-1" + style={{ + fontFamily: settings.headingsFontFamily, + color: settings.headingsFontColor, + }} + > + {rssFeed.title || settings.title} + </CardTitle> + </div> + </CardHeader> + )} + <CardContent className="p-4 pt-2"> + {isLoading ? ( + <p>Loading RSS feed...</p> + ) : rssItems.length > 0 ? ( + rssItems.map((item, index) => ( + <div + key={index} + className="mb-6 p-4 rounded-lg border" + style={{ + borderWidth: settings.fidgetBorderWidth, + borderColor: settings.itemBorderColor, + backgroundColor: settings.itemBackground, + boxShadow: settings.fidgetShadow, + }} + > + <div className="flex-row items-center "> + <div className="flex flex-col justify-between"> + <h3 + className="text-xl font-semibold mb-2" + style={{ + fontFamily: settings.headingsFontFamily, + color: settings.headingsFontColor, + }} + > + {item.title} + </h3> + {item.pubDate && ( + <p + className="text-xs text-gray-500 mb-2" + style={{ fontFamily: settings.fontFamily }} + > + Published on:{" "} + {new Date(item.pubDate).toLocaleDateString()} + </p> + )} + </div> + </div> + + {item.contentSnippet && ( + <div + className="mb-4" + style={{ + fontFamily: settings.fontFamily, + color: settings.fontColor, + }} + > + <ReactMarkdown components={MarkdownRenderers}> + {item.contentSnippet} + </ReactMarkdown> + </div> + )} + {item.link && ( + <a + href={item.link} + target="_blank" + rel="noopener noreferrer" + style={{ + color: settings.fontColor, + textDecoration: "underline", + }} + className="text-sm" + > + Read more + </a> + )} + </div> + )) + ) : ( + <div> + <p>No RSS items found.</p> + <p> + It seems that there are no articles available from this feed. + Please check the feed URL or try again later. + </p> + </div> + )} + </CardContent> + </div> + ); +}; + +export default { + fidget: Rss, + properties: textConfig, +} as FidgetModule<FidgetArgs<TextFidgetSettings>>; diff --git a/yarn.lock b/yarn.lock index 05a6ecef..21cfe875 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8764,6 +8764,11 @@ enhanced-resolve@^5.14.1: graceful-fs "^4.2.4" tapable "^2.2.0" +entities@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + entities@^4.2.0, entities@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" @@ -14228,6 +14233,14 @@ rrweb-cssom@^0.7.0: resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz#c73451a484b86dd7cfb1e0b2898df4b703183e4b" integrity sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg== +rss-parser@^3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/rss-parser/-/rss-parser-3.13.0.tgz#f1f83b0a85166b8310ec531da6fbaa53ff0f50f0" + integrity sha512-7jWUBV5yGN3rqMMj7CZufl/291QAhvrrGpDNE4k/02ZchL0npisiYYqULF71jCEKoIiHvK/Q2e6IkDwPziT7+w== + dependencies: + entities "^2.0.3" + xml2js "^0.5.0" + run-async@^2.4.0: version "2.4.1" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" @@ -14330,6 +14343,11 @@ satori@0.10.9: postcss-value-parser "^4.2.0" yoga-wasm-web "^0.3.3" +sax@>=0.6.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" + integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== + saxes@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" @@ -16233,6 +16251,19 @@ xml-name-validator@^5.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== +xml2js@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" + integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + xmlchars@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" From 9e649a95725873a4f43e031e877a63c89ad4f3e8 Mon Sep 17 00:00:00 2001 From: Jesse Paterson <jesse.r.pat@gmail.com> Date: Mon, 9 Sep 2024 13:57:19 -0500 Subject: [PATCH 16/23] Added template library icon --- src/common/lib/theme/ThemeCard.tsx | 2 +- src/common/lib/theme/ThemeSettingsEditor.tsx | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/common/lib/theme/ThemeCard.tsx b/src/common/lib/theme/ThemeCard.tsx index 5db97ba0..379a1665 100644 --- a/src/common/lib/theme/ThemeCard.tsx +++ b/src/common/lib/theme/ThemeCard.tsx @@ -25,7 +25,7 @@ export const ThemeCard = ({ return ( <div - className={`bg-gray-50 hover:bg-gray-100 rounded-lg grid [grid-template-areas:'cell'] h-11 cursor-pointer relative ${active ? activeRingBeforeElementClasses : ""}`} + className={`shadow-md w-full bg-gray-50 hover:bg-gray-100 rounded-lg grid [grid-template-areas:'cell'] h-11 cursor-pointer relative ${active ? activeRingBeforeElementClasses : ""}`} style={{ backgroundColor: themeProps.background, }} diff --git a/src/common/lib/theme/ThemeSettingsEditor.tsx b/src/common/lib/theme/ThemeSettingsEditor.tsx index 81570206..73254484 100644 --- a/src/common/lib/theme/ThemeSettingsEditor.tsx +++ b/src/common/lib/theme/ThemeSettingsEditor.tsx @@ -34,6 +34,9 @@ import { FaInfoCircle } from "react-icons/fa"; import { THEMES } from "@/constants/themes"; import { ThemeCard } from "@/common/lib/theme/ThemeCard"; import { FONT_FAMILY_OPTIONS_BY_NAME } from "@/common/lib/theme/fonts"; +import { GiOpenBook } from "react-icons/gi"; +import { FaBook } from "react-icons/fa"; +import { MdMenuBook } from "react-icons/md"; export type ThemeSettingsEditorArgs = { theme: ThemeSettings; @@ -153,9 +156,16 @@ export function ThemeSettingsEditor({ type="checkbox" /> {/* Templates Dropdown */} - <span className="block max-h-12 max-w-xs overflow-hidden rounded-lg transition-all duration-300 peer-checked/showLabel:max-h-full p-1"> - {/* Theme Card Example */} - <ThemeCard themeProps={theme.properties} /> + <span className="block max-h-14 max-w-xs overflow-hidden rounded-lg transition-all duration-300 peer-checked/showLabel:max-h-full p-1"> + <div className="flex flex-row w-full"> + <div className="flex basis-3/4 grow"> + {/* Theme Card Example */} + <ThemeCard themeProps={theme.properties} /> + </div> + <div className="flex basis-1/4 items-center justify-center"> + <MdMenuBook className="w-6 h-6" /> + </div> + </div> <div className="grid grid-cols-2 gap-3 pb-3 pt-3"> {THEMES.map((theme, i) => ( From 6b9ea28e4086b9c616b9dd12a9d85adb2d7f0d0f Mon Sep 17 00:00:00 2001 From: Willy Ogorzaly <willy@ogorzaly.com> Date: Mon, 9 Sep 2024 17:30:42 -0500 Subject: [PATCH 17/23] small copy change --- src/common/components/organisms/NogsChecker.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/components/organisms/NogsChecker.tsx b/src/common/components/organisms/NogsChecker.tsx index 1fdca0ce..eb11508b 100644 --- a/src/common/components/organisms/NogsChecker.tsx +++ b/src/common/components/organisms/NogsChecker.tsx @@ -21,7 +21,7 @@ export default function NogsChecker() { return ( <> <p className="mb-2"> - Tabs are only for early supporters holding a nounspace OG NFT (nOGs){" "} + For now Tabs are only for early supporters holding a nounspace OG NFT (nOGs){" "} <br /> Mint a pair{" "} <a From ee65ebbb821042fde820407b7d267945dab2416b Mon Sep 17 00:00:00 2001 From: Vlad 2 <116202536+sktbrd@users.noreply.github.com> Date: Tue, 10 Sep 2024 15:27:41 -0300 Subject: [PATCH 18/23] Fix: URL workBreak and add hability of changing url colors in Text Fidget (#413) --- src/common/lib/utils/markdownRenderers.tsx | 31 ++++++++++++------- .../snapshot/components/ProposalItem.tsx | 2 +- src/fidgets/ui/Text.tsx | 10 +++++- src/fidgets/ui/rss.tsx | 2 +- 4 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/common/lib/utils/markdownRenderers.tsx b/src/common/lib/utils/markdownRenderers.tsx index a55ed7a3..0d735805 100644 --- a/src/common/lib/utils/markdownRenderers.tsx +++ b/src/common/lib/utils/markdownRenderers.tsx @@ -14,7 +14,7 @@ type RendererProps = MarkdownProps & { href?: any; }; -export const MarkdownRenderers = { +export const MarkdownRenderers = (linkColor?: string) => ({ img: ({ alt, src, title, ...props }: RendererProps) => ( <span style={{ @@ -45,15 +45,24 @@ export const MarkdownRenderers = { {children} </div> ), - a: ({ href, children, ...props }: RendererProps) => ( - <a - style={{ color: "blue", textWrap: "wrap", wordBreak: "break-all" }} - href={href} - {...props} - > - {children} - </a> - ), + a: ({ href, children, ...props }: RendererProps) => { + const isPrettyLink = href !== children; + + const style: React.CSSProperties = isPrettyLink + ? { color: linkColor, wordBreak: "keep-all", overflowWrap: "normal" } + : { + color: linkColor, + wordBreak: "break-all", + overflowWrap: "break-word", + }; + + return ( + <a href={href} style={style} {...props}> + {children} + </a> + ); + }, + h1: ({ children, ...props }: RendererProps) => ( <h1 {...props} @@ -248,4 +257,4 @@ export const MarkdownRenderers = { {children} </code> ), -}; +}); diff --git a/src/fidgets/snapshot/components/ProposalItem.tsx b/src/fidgets/snapshot/components/ProposalItem.tsx index b708f921..f19eca03 100644 --- a/src/fidgets/snapshot/components/ProposalItem.tsx +++ b/src/fidgets/snapshot/components/ProposalItem.tsx @@ -196,7 +196,7 @@ const ProposalItem: React.FC<ProposalItemProps> = ({ proposal, space }) => { <ReactMarkdown rehypePlugins={[rehypeRaw]} remarkPlugins={[remarkGfm]} - components={MarkdownRenderers} + components={MarkdownRenderers()} > {proposal.body} </ReactMarkdown> diff --git a/src/fidgets/ui/Text.tsx b/src/fidgets/ui/Text.tsx index f7427fce..3ce9a4bb 100644 --- a/src/fidgets/ui/Text.tsx +++ b/src/fidgets/ui/Text.tsx @@ -20,6 +20,7 @@ import { MarkdownRenderers } from "@/common/lib/utils/markdownRenderers"; export type TextFidgetSettings = { title?: string; text: string; + urlColor: string; } & FidgetSettingsStyle; export const textConfig: FidgetProperties = { @@ -54,6 +55,13 @@ export const textConfig: FidgetProperties = { inputSelector: ColorSelector, group: "style", }, + { + fieldName: "urlColor", + required: false, + inputSelector: ColorSelector, + default: "blue", + group: "style", + }, { fieldName: "headingsFontFamily", default: "var(--user-theme-headings-font)", @@ -126,7 +134,7 @@ export const Text: React.FC<FidgetArgs<TextFidgetSettings>> = ({ <ReactMarkdown rehypePlugins={[rehypeRaw]} remarkPlugins={[remarkGfm]} - components={MarkdownRenderers} + components={MarkdownRenderers(settings.urlColor)} > {settings.text} </ReactMarkdown> diff --git a/src/fidgets/ui/rss.tsx b/src/fidgets/ui/rss.tsx index b9691ff1..6bca4976 100644 --- a/src/fidgets/ui/rss.tsx +++ b/src/fidgets/ui/rss.tsx @@ -199,7 +199,7 @@ export const Rss: React.FC<FidgetArgs<TextFidgetSettings>> = ({ settings }) => { color: settings.fontColor, }} > - <ReactMarkdown components={MarkdownRenderers}> + <ReactMarkdown components={MarkdownRenderers()}> {item.contentSnippet} </ReactMarkdown> </div> From 00d6915b5b14e690b2106fa45d4d6446017eac37 Mon Sep 17 00:00:00 2001 From: Vlad 2 <116202536+sktbrd@users.noreply.github.com> Date: Tue, 10 Sep 2024 15:28:02 -0300 Subject: [PATCH 19/23] Image Button with Scale (#410) --- .../components/molecules/ImageScaleSlider.tsx | 32 ++++++++++ src/common/fidgets/index.d.ts | 7 ++- src/fidgets/ui/gallery.tsx | 61 ++++++++++++++++--- 3 files changed, 88 insertions(+), 12 deletions(-) create mode 100644 src/common/components/molecules/ImageScaleSlider.tsx diff --git a/src/common/components/molecules/ImageScaleSlider.tsx b/src/common/components/molecules/ImageScaleSlider.tsx new file mode 100644 index 00000000..d84357be --- /dev/null +++ b/src/common/components/molecules/ImageScaleSlider.tsx @@ -0,0 +1,32 @@ +import React from "react"; +import { Slider } from "@mui/material"; + +export type ImageScaleSliderProps = { + min: number; + max: number; + step?: number; + defaultValue?: number; + onChange: (value: number) => void; +}; + +const ImageScaleSlider: React.FC<ImageScaleSliderProps> = ({ + min = 0.2, + max = 3, + step = 0.1, + defaultValue = 1, + onChange, +}) => { + return ( + <div className="ml-3 mr-3"> + <Slider + defaultValue={defaultValue} + step={step} + min={min} + max={max} + onChange={(_, value) => onChange(value as number)} + /> + </div> + ); +}; + +export default ImageScaleSlider; diff --git a/src/common/fidgets/index.d.ts b/src/common/fidgets/index.d.ts index 0da79dd4..c9a5dff9 100644 --- a/src/common/fidgets/index.d.ts +++ b/src/common/fidgets/index.d.ts @@ -4,7 +4,8 @@ import HTMLInput from "@/common/ui/molecules/HTMLInput"; import ColorSelector from "@/common/components/molecules/ColorSelector"; import FontSelector from "@/common/components/molecules/FontSelector"; import type { ThemeSettings, FontFamily, Color } from "@/common/lib/theme"; - +import SwitchButton from "../components/molecules/ViewSelector"; +import ImageScaleSlider from "@/common/components/molecules/ImageScaleSlider"; export type FidgetSettings = Record<string, any>; export type FidgetSettingsStyle = { background?: Color; @@ -41,7 +42,9 @@ export type FidgetFieldConfig<S extends FidgetSettings = FidgetSettings> = { | typeof ColorSelector | typeof FontSelector | typeof CSSInput - | typeof HTMLInput; + | typeof HTMLInput + | typeof ImageScaleSlider + | typeof SwitchButton; // change the name of ViewSelector.tsx file in next link fidget PR readonly default?: any; readonly required: boolean; readonly group?: FidgetGroup; diff --git a/src/fidgets/ui/gallery.tsx b/src/fidgets/ui/gallery.tsx index a4db2125..f6cbadee 100644 --- a/src/fidgets/ui/gallery.tsx +++ b/src/fidgets/ui/gallery.tsx @@ -7,13 +7,16 @@ import { type FidgetSettingsStyle, } from "@/common/fidgets"; import { defaultStyleFields } from "@/fidgets/helpers"; +import ImageScaleSlider from "@/common/components/molecules/ImageScaleSlider"; export type GalleryFidgetSettings = { imageUrl: string; + RedirectionURL: string; + Scale: number; } & FidgetSettingsStyle; const galleryConfig: FidgetProperties = { - fidgetName: "Gallery", + fidgetName: "gallery", icon: 0x1f5bc, fields: [ { @@ -24,6 +27,20 @@ const galleryConfig: FidgetProperties = { "https://storage.googleapis.com/papyrus_images/d467b07030969fab95a8f44b1de596ab.png", group: "settings", }, + { + fieldName: "RedirectionURL", + required: false, + inputSelector: TextInput, + default: "", + group: "settings", + }, + { + fieldName: "Scale", + required: false, + inputSelector: ImageScaleSlider, + default: 1, + group: "style", + }, ...defaultStyleFields, ], size: { @@ -34,18 +51,42 @@ const galleryConfig: FidgetProperties = { }, }; -const Gallery: React.FC<FidgetArgs<GalleryFidgetSettings>> = ({ - settings: { imageUrl }, -}) => { - const imageUrlStyle = { - "--image-url": `url(${imageUrl})`, +const Gallery: React.FC<FidgetArgs<GalleryFidgetSettings>> = ({ settings }) => { + const contentStyle = { + backgroundImage: `url(${settings.imageUrl})`, + transform: `scale(${settings.Scale})`, + transition: "transform 0.3s ease", + } as CSSProperties; + + const wrapperStyle = { + overflow: "hidden", } as CSSProperties; - return ( - <div className="rounded-md flex-1 items-center justify-center overflow-hidden relative size-full bg-cover"> + return settings.RedirectionURL ? ( + <a + href={settings.RedirectionURL} + target="_blank" + rel="noopener noreferrer" + className="absolute inset-0" + > + <div + className="rounded-md flex-1 items-center justify-center relative size-full" + style={wrapperStyle} + > + <div + className="bg-cover bg-center w-full h-full" + style={contentStyle} + ></div> + </div> + </a> + ) : ( + <div + className="rounded-md flex-1 items-center justify-center relative size-full" + style={wrapperStyle} + > <div - className="bg-[image:var(--image-url)] bg-cover size-full overflow-hidden" - style={imageUrlStyle} + className="bg-cover bg-center w-full h-full" + style={contentStyle} ></div> </div> ); From 5f6e8f405a5a7622c3ef0ee42c9187e983a27061 Mon Sep 17 00:00:00 2001 From: Vlad 2 <116202536+sktbrd@users.noreply.github.com> Date: Tue, 10 Sep 2024 15:29:06 -0300 Subject: [PATCH 20/23] build clean up - unused imports and commented functions (#409) --- src/common/components/atoms/reorderable-tab.tsx | 1 - src/common/components/molecules/DaoSelector.tsx | 3 --- src/common/components/organisms/TabBar.tsx | 1 - src/common/components/templates/Space.tsx | 2 +- src/constants/intialHomebase.ts | 1 - src/fidgets/farcaster/Frame.tsx | 1 - src/fidgets/farcaster/components/CastRow.tsx | 12 ++++++------ src/fidgets/farcaster/components/CreateCast.tsx | 2 +- src/fidgets/index.ts | 2 +- src/fidgets/layout/Grid.tsx | 1 - src/fidgets/ui/Links.tsx | 2 +- src/pages/api/farcaster/neynar/active-channels.ts | 1 - src/pages/api/farcaster/neynar/search-channels.ts | 1 - src/pages/api/space/homebase/tabs/[tabName].ts | 7 +++---- src/pages/api/space/homebase/tabs/index.ts | 2 +- src/pages/explore/index.tsx | 5 +---- src/pages/homebase/index.tsx | 1 - 17 files changed, 15 insertions(+), 30 deletions(-) diff --git a/src/common/components/atoms/reorderable-tab.tsx b/src/common/components/atoms/reorderable-tab.tsx index c432d457..714c484d 100644 --- a/src/common/components/atoms/reorderable-tab.tsx +++ b/src/common/components/atoms/reorderable-tab.tsx @@ -2,7 +2,6 @@ import * as React from "react"; import { motion, Reorder } from "framer-motion"; import { CloseIcon } from "./icons/CloseIcon"; import EditableText from "./editable-text"; -import { FaX } from "react-icons/fa6"; interface Props { tabName: string; diff --git a/src/common/components/molecules/DaoSelector.tsx b/src/common/components/molecules/DaoSelector.tsx index f45e3067..b7d33c02 100644 --- a/src/common/components/molecules/DaoSelector.tsx +++ b/src/common/components/molecules/DaoSelector.tsx @@ -1,13 +1,10 @@ import React from "react"; import { Select, - SelectGroup, SelectValue, SelectTrigger, SelectContent, - SelectLabel, SelectItem, - SelectSeparator, } from "@/common/components/atoms/select"; import { DAO_OPTIONS } from "@/constants/basedDaos"; diff --git a/src/common/components/organisms/TabBar.tsx b/src/common/components/organisms/TabBar.tsx index 983bdac2..affc544b 100644 --- a/src/common/components/organisms/TabBar.tsx +++ b/src/common/components/organisms/TabBar.tsx @@ -1,5 +1,4 @@ import React from "react"; -import AddFidgetIcon from "@/common/components/atoms/icons/AddFidget"; import { FaPlus } from "react-icons/fa6"; import { first, map } from "lodash"; import { useLoadFarcasterUser } from "@/common/data/queries/farcaster"; diff --git a/src/common/components/templates/Space.tsx b/src/common/components/templates/Space.tsx index 8abd857e..47a1cd0d 100644 --- a/src/common/components/templates/Space.tsx +++ b/src/common/components/templates/Space.tsx @@ -1,4 +1,4 @@ -import React, { ReactNode, useEffect, useMemo } from "react"; +import React, { ReactNode, useEffect } from "react"; import { FidgetConfig, FidgetInstanceData, diff --git a/src/constants/intialHomebase.ts b/src/constants/intialHomebase.ts index de68ab01..95e9af12 100644 --- a/src/constants/intialHomebase.ts +++ b/src/constants/intialHomebase.ts @@ -1,6 +1,5 @@ import { SpaceConfig } from "@/common/components/templates/Space"; import DEFAULT_THEME from "@/common/lib/theme/defaultTheme"; -import { FeedType } from "@neynar/nodejs-sdk"; const layoutID = ""; const INITIAL_HOMEBASE_CONFIG: SpaceConfig = { diff --git a/src/fidgets/farcaster/Frame.tsx b/src/fidgets/farcaster/Frame.tsx index e33c35f1..3680c971 100644 --- a/src/fidgets/farcaster/Frame.tsx +++ b/src/fidgets/farcaster/Frame.tsx @@ -9,7 +9,6 @@ import { import FrameEmbed from "./components/Embeds/FrameEmbed"; import { isValidUrl } from "@/common/lib/utils/url"; import useSafeUrl from "@/common/lib/hooks/useSafeUrl"; -import { defaultStyleFields } from "@/fidgets/helpers"; import ColorSelector from "@/common/components/molecules/ColorSelector"; import BorderSelector from "@/common/components/molecules/BorderSelector"; import ShadowSelector from "@/common/components/molecules/ShadowSelector"; diff --git a/src/fidgets/farcaster/components/CastRow.tsx b/src/fidgets/farcaster/components/CastRow.tsx index 46496de5..92cae368 100644 --- a/src/fidgets/farcaster/components/CastRow.tsx +++ b/src/fidgets/farcaster/components/CastRow.tsx @@ -4,7 +4,6 @@ import { mergeClasses as classNames } from "@/common/lib/utils/mergeClasses"; import { ArrowPathRoundedSquareIcon, ArrowTopRightOnSquareIcon, - ChatBubbleLeftIcon, HeartIcon, ChatBubbleLeftRightIcon, } from "@heroicons/react/24/outline"; @@ -381,11 +380,12 @@ const CastReactions = ({ cast }: { cast: CastWithInteractions }) => { const reactions = getReactions(); - const linksCount = cast?.embeds ? cast.embeds.length : 0; - const isOnchainLink = - linksCount > 0 && "url" in cast.embeds[0] - ? cast.embeds[0].url.startsWith("chain:") - : false; + // const linksCount = cast?.embeds ? cast.embeds.length : 0; + + // const isOnchainLink = + // linksCount > 0 && "url" in cast.embeds[0] + // ? cast.embeds[0].url.startsWith("chain:") + // : false; return ( <> diff --git a/src/fidgets/farcaster/components/CreateCast.tsx b/src/fidgets/farcaster/components/CreateCast.tsx index 98041fff..6d52d3e8 100644 --- a/src/fidgets/farcaster/components/CreateCast.tsx +++ b/src/fidgets/farcaster/components/CreateCast.tsx @@ -10,7 +10,7 @@ import { } from "@mod-protocol/core"; import { getFarcasterMentions, - getFarcasterChannels, + // getFarcasterChannels, formatPlaintextToHubCastMessage, getMentionFidsByUsernames, } from "@mod-protocol/farcaster"; diff --git a/src/fidgets/index.ts b/src/fidgets/index.ts index 154720e4..7da82e50 100644 --- a/src/fidgets/index.ts +++ b/src/fidgets/index.ts @@ -12,7 +12,7 @@ import Feed from "./farcaster/Feed"; import CreateCast from "./farcaster/CreateCast"; import Links from "./ui/Links"; import snapShot from "./snapshot/SnapShot"; -import Swap from "./swap/Swap"; +// import Swap from "./swap/Swap"; import rss from "./ui/rss"; import VideoFidget from "./ui/Video"; diff --git a/src/fidgets/layout/Grid.tsx b/src/fidgets/layout/Grid.tsx index b564c0af..8d3e3553 100644 --- a/src/fidgets/layout/Grid.tsx +++ b/src/fidgets/layout/Grid.tsx @@ -24,7 +24,6 @@ import { analytics, AnalyticsEvent, } from "@/common/providers/AnalyticsProvider"; -import TabBar from "@/common/components/organisms/TabBar"; import AddFidgetIcon from "@/common/components/atoms/icons/AddFidget"; export const resizeDirections = ["s", "w", "e", "n", "sw", "nw", "se", "ne"]; diff --git a/src/fidgets/ui/Links.tsx b/src/fidgets/ui/Links.tsx index 0e949c31..86b59ebd 100644 --- a/src/fidgets/ui/Links.tsx +++ b/src/fidgets/ui/Links.tsx @@ -1,4 +1,4 @@ -import React, { useEffect } from "react"; +import React from "react"; import TextInput from "@/common/components/molecules/TextInput"; import CSSInput from "@/common/components/molecules/CSSInput"; import ColorSelector from "@/common/components/molecules/ColorSelector"; diff --git a/src/pages/api/farcaster/neynar/active-channels.ts b/src/pages/api/farcaster/neynar/active-channels.ts index a99f6a8c..6a2e7288 100644 --- a/src/pages/api/farcaster/neynar/active-channels.ts +++ b/src/pages/api/farcaster/neynar/active-channels.ts @@ -1,6 +1,5 @@ import requestHandler from "@/common/data/api/requestHandler"; import axios, { AxiosRequestConfig, isAxiosError } from "axios"; -import Error from "next/error"; import { NextApiRequest, NextApiResponse } from "next/types"; async function loadUserChannels(req: NextApiRequest, res: NextApiResponse) { diff --git a/src/pages/api/farcaster/neynar/search-channels.ts b/src/pages/api/farcaster/neynar/search-channels.ts index c3b191f6..c8633bfc 100644 --- a/src/pages/api/farcaster/neynar/search-channels.ts +++ b/src/pages/api/farcaster/neynar/search-channels.ts @@ -1,6 +1,5 @@ import requestHandler from "@/common/data/api/requestHandler"; import axios, { AxiosRequestConfig, isAxiosError } from "axios"; -import Error from "next/error"; import { NextApiRequest, NextApiResponse } from "next/types"; async function searchChannels(req: NextApiRequest, res: NextApiResponse) { diff --git a/src/pages/api/space/homebase/tabs/[tabName].ts b/src/pages/api/space/homebase/tabs/[tabName].ts index 43eea23a..cc822b30 100644 --- a/src/pages/api/space/homebase/tabs/[tabName].ts +++ b/src/pages/api/space/homebase/tabs/[tabName].ts @@ -9,9 +9,8 @@ import { import { NextApiRequest, NextApiResponse } from "next/types"; import supabase from "@/common/data/database/supabase/clients/server"; import stringify from "fast-json-stable-stringify"; -import { homebasePath, homebaseTabsPath } from "@/constants/supabase"; -import { findIndex, isArray, isUndefined } from "lodash"; -import { listTabsForIdentity } from "."; +import { homebaseTabsPath } from "@/constants/supabase"; +import { isArray, isUndefined } from "lodash"; export type UpdateHomebaseResponse = NounspaceResponse<boolean>; export type UpdateHomebaseRequest = SignedFile; @@ -59,7 +58,7 @@ async function updateHomebaseTab( }); return; } - const tabs = await listTabsForIdentity(file.publicKey); + // const tabs = await listTabsForIdentity(file.publicKey); // if (findIndex(tabs, tabName) === -1) { // res.status(500).json({ diff --git a/src/pages/api/space/homebase/tabs/index.ts b/src/pages/api/space/homebase/tabs/index.ts index 6aa51450..abba66d8 100644 --- a/src/pages/api/space/homebase/tabs/index.ts +++ b/src/pages/api/space/homebase/tabs/index.ts @@ -8,7 +8,7 @@ import { } from "@/common/lib/signedFiles"; import { NextApiRequest, NextApiResponse } from "next/types"; import supabase from "@/common/data/database/supabase/clients/server"; -import { homebaseTabsPath, homebasePath } from "@/constants/supabase"; +import { homebaseTabsPath } from "@/constants/supabase"; import { isArray, isNil, isUndefined, map } from "lodash"; import { StorageError } from "@supabase/storage-js"; import stringify from "fast-json-stable-stringify"; diff --git a/src/pages/explore/index.tsx b/src/pages/explore/index.tsx index 2569a4fb..c07d6ee3 100644 --- a/src/pages/explore/index.tsx +++ b/src/pages/explore/index.tsx @@ -3,10 +3,7 @@ import { groupBy } from "lodash"; import Link from "next/link"; import Image from "next/image"; import { getAllMarkdownFiles } from "@/common/data/explore/loadExploreMarkdown"; -import { - analytics, - AnalyticsEvent, -} from "@/common/providers/AnalyticsProvider"; // Import analytics +import { AnalyticsEvent } from "@/common/providers/AnalyticsProvider"; // Import analytics import { trackAnalyticsEvent } from "@/common/lib/utils/analyticsUtils"; export async function getStaticProps() { diff --git a/src/pages/homebase/index.tsx b/src/pages/homebase/index.tsx index 232610b4..b7d1beca 100644 --- a/src/pages/homebase/index.tsx +++ b/src/pages/homebase/index.tsx @@ -5,7 +5,6 @@ import USER_NOT_LOGGED_IN_HOMEBASE_CONFIG from "@/constants/userNotLoggedInHomeb import SpacePage, { SpacePageArgs } from "@/common/components/pages/SpacePage"; import FeedModule, { FilterType } from "@/fidgets/farcaster/Feed"; import { FeedType } from "@neynar/nodejs-sdk"; -import { Platform } from "@/common/components/molecules/PlatformSelector"; import { noop } from "lodash"; import useCurrentFid from "@/common/lib/hooks/useCurrentFid"; From 66bb1e4d82a0c9d4392b84e70dc28f32f48b1d70 Mon Sep 17 00:00:00 2001 From: Vlad 2 <116202536+sktbrd@users.noreply.github.com> Date: Thu, 12 Sep 2024 10:36:47 -0300 Subject: [PATCH 21/23] Connect farcaster style (#417) --- public/images/farcaster_nude.png | Bin 0 -> 76074 bytes .../NounspaceManagedSignerAuthenticator.tsx | 29 ++++++++++++++++-- src/common/components/molecules/Modal.tsx | 4 +-- 3 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 public/images/farcaster_nude.png diff --git a/public/images/farcaster_nude.png b/public/images/farcaster_nude.png new file mode 100644 index 0000000000000000000000000000000000000000..3e113a3e998775cf7d0e2330c1a333555ac84960 GIT binary patch literal 76074 zcmV){Kz+Z7P)<h;3K|Lk000e1NJLTq00EEy00EE)1^@s6fWJ1(00009a7bBm000&x z000&x0ZCFM@Bjb+0drDELIAGL9O(c600d`2O+f$vv5yP<VFdsID8ETWK~#7F?7ex^ zW!ZHXw)cHseO1-7WP=@o)ooiVi5(+}00ClSD-)2c1RNZ%tQCSS53H4BC9#|kh!@6c zVS+G|%^w6<21}U9ARC*(1{*MvCy<R%ORafqN!Bb`EvZ{QRDEyf-FwbH`?vSm_rCX4 zS9e#{ySw|VcZYNK+2@=+p6N2J@QlDKUh?|;=n~QP@zZ+-dh(uOv$==Q=pGt~nB<-< z?XGtqOuP4dx8>w}q`pI7k^ATnU^*<_tqQ#R6FNS)LF&CD<6#kccwahUekji`?fI7E z)2z5gxw%^M?5g?jmd><{hn}E&9=`uoU%a=>6`ndUt#HjS8ig&L-g99%dyyIeX1;e+ z`n%Wnk;v|zQUkEU3J1Zl8o=uSYP{4qjmAh=-ZyM_24~9;ZBNb~e&Xsq53I)K+F>;y zd*J?;y!W1q^vH`&hV6^acHaCz!@WDh@S@c)tgynZ1pL4l$p~%Vun~Ib>UR6UE|OV| z%N|$_2*7A8F4JdU%o};}E=In0=drwaG7_s7c<aI1r#BBgi+wdlF~t19cDsEoZFj$P z;eqdX)t5a)D@<_I24plCx6x<6mNxV?I|hC6b(=3ZgyC;k1$I8dc9GaFAfp=>RztDE z^@oRcf3Ml`)oahT7hZGB2Ic4s$SYp*;EPWN`WhMdYe}{*q8lAj4SlUzQM>!Rc@HQr zO){77y!6kcZ*3FbpQqf_!rWN!RQuz={MXg<86%VJYvpYFW8d+r-}o9jA~*^IG8v7N zG0Kpa=JOV%846Dc<%;%D<umt;=&-P4E*;{%9!l@&5j5VVm&Np@-2LhDd{4~?F6BGa z2qpQZq!O<8<U!oChLC8#@r=*(=344PhtYdb`s+!<Q*lHN;hXCz|HDH>+t-|(U3mF1 zL?*Ya0U3v<ZXZ7L65`?a3XO9bktq&Q7;|Z^MVV)L<`jvhA)2RYpHN*VFF#F32hc#Y ztgPt(JXyYd?GX)>&(j;Oa~PzipnZN*JWKR0)$tHMTSz}^<md2YvVgG9VC|D7qP=x; zMl-{;k7gw+@8`qn{B+AdKd>Y2FZ|&jc)_da7KK~RfPC*u-+RxKk9_8(gYdUWSx!sK z%HbReB<6I?du=$3hJ6Yk;y*;W93m9wd8V%p@t6-W3g<Dz{rlx8=A24+kHYa~9in`4 zJQdj<g?|X1B_nXH{2u#bAFib`u7wBA`wZV9oTm=Yi2Oe^(D0foXPa9tD!FA0$oKxw zZ@us8)hqY!`tuv@=^+dp;XI1$5Kru>z<Io)efjL2_n5D>4!P&QoEDxOIMj9c^Fv_H z5XWcNTGl>Ak{QgUi0;~)gt2WWjB*}2vNQy=EyH|&o`+8sOQ4+Q^YPvJ$~lA%I*^tE z1JSFl+(N@!H@yKFBaXArK63w-<lD-VxiFLHFhxgnzA!bzp&>c}zJ;{2bkhO(7E&EJ z&rs53bY3q(J+y95dB|V}-BPrK@9DsDlD6%Jcn;}9gr&BhDRUO@oT8=Vo@l>fp0CgO z=dzaY%^T3EoQYJU$<J9V$<d7{|HG>;T-dz)+yC;-ZAflf12XN|7<NNdJPuVoiyQhD zhjWMyXV|48mWEI0oMkTIJ`|T1u4O@fDrFx^j{+KkL(*R_2#RjeXw9MElDg$3dS+-} zf~TYWef)IZyw5T`Mfn$|mv670yy|9+NN!34@@K#0!JW~N`-|boJgO05*nB8F8%#P! z<2V^SoI}YzRoWvR=ZhH5XAtI$XN(4z&Rwr=j^SF2F5d4qOnKd(ZeHpQ_WY#sGXYOW znfv7TmXQC4c9!JjH{)dcO=Up7_Yc1LMNe+ezIR9Ti|y%LxQY-xx-3*Zl-aWU+52l{ z;H;c$q2sCICfbiP3R}Tjl-QQ8t=@C=@HyYb=lkxn{6zD-a%jHzR*0WAu{%Gnd3vG& zz1H%hF~fHeV%c-;tj^Sy@_xJ}<o}@y7cTs#H`B1zO<_Q$9pjtN+`l9D+wv5?vwCkZ zQyxTfoo_;Q9wol--4bK%Q-b@MFjq|b6vA@3_AkxQdZ_Z=_wKyP9n(Z3HkWScmuSDx z?@>@Y<wmncQ<O6Ut~q=(Lp$xK<6P<E`>ajRs|e3;#GX2?TTA|Tw7>jxd)N1U`%Q2T z*9~t#{>-;N_~KoIzH-;B_fhpgctP3p9@P>f9IChlp7KIoe0PYV?4Nt3O|)Nl_b8(} zoYM=%VL~)-m^h(C(?+E(A=gs*8NMYW*5~T^AuD@H(fhJ|3uJW9DFdHYX_@C&3OHlh z>mjg9yv5|(AStyQ^Y5u@^>jvcNrBGM8PXq@{6DnQd*A#=e&9v_l5Svl>iqaL!Tm3N z?>(13{h9lRL8Fd&!JLOfnY6!;jA+brm>BoUk2>7FLa}o8DQ;u5{YtgNHR*s{aT#s< zRo9&IvwGFSf*>w?VnqAf7jZ@JzNdzg`t*hZ(`RL6N{TBcNpWHOWbNt=?l$lk(Q>=Q zwxpSMkc3OJcK3Z^*fV*U;}fD~`H<u-@8P42zmG@$h2`ac<gdQ)e!4+ne@i?I@ZI0~ zhA%!9{?Q$AFYFaW?j`meKhGR?*DE%U$$%$sDk>MEeGGNTnD?A;8Vx4KnZoGH(Apg$ zm_CnzmXoR8UQyX|BHAPL^U+Oa4CV|?9BNS9v0oS3e)6Wblo^x0o^wWIp8<=MFGU=@ zkc;;6(Og>@pDfWaU&g%Oobf`|PDH-%2J(v4=bKmFcpq`z((?b%=?ywJGSCeMf96}? z@X|}d|F#$p^X;&c?XLgVV7b$j0gW9wWd*MP=`fHfRV_1Pw^$BAUTVK(ZM!K`k3+EZ zh7IXO8vFeAT+7duV!YDSTSAk7IOmK9k*_fUT>><-s|V)B){_1m8(!lKY!7T>B5SW) z@O46#fi~}Z``$Ckypn3^nA5VjyB3FWj(d!DPL#B#$goRSqP8+azQ`M~zSQv|b@$k6 zSRQqy_l}7;-ZNgYJo;{x{~eC|u3WkD`tRB4M!La(=>~x~QJ#A@-dfLFZoDs8ydOp+ zPOy0P7jYF#h|k26oH~mhk>-p-&<pea$iPa#TG*Q&m(@Muh_vNV3o3hZiZjw^wCYMM zq$&2>QeS#ij?lM-ZzJi-)OvcVu~qzaCKjzt!(_Q{Lrh78JwQo)iI)35!$fJT^vZLN zkC!0wI6j->rdSV7=<3_q==5nbd0XWl+hrK!FZ`kJf8h;dNNxxNvWq&tcw2|8tOLDB zTF3dW>Onf@(5F;!%(KUQiijP5iF(zCOkr3fh15~t*(_)1x%~5ry4)=(5`llQ{inGS z&J7CB;>rahD#WPZ(WuRvs^xZwbog@F)p5z#7!GWYSo7Y1MZO^FRWZ$Q7VYIXUkBe_ z_HQ&+IWA60@682~=M4m`9paz6&!x~~Tjl>C`QHs`o!$^bTF<%x8TWQv*`EFA?()9z ze#xWh6=F%*DJh|Pl7JU(>l|?%rLg2xMa44TbWymYvg=ig&n@H?)R;`yzt7Pc6=UC4 z=qpjetazU({`{HG6^)RuSNWIIQv15MGOGc@{Bt}a)GIk6>eNYQSa>$~enXzo(C(+E zk(m;rsmlA06TI^ZG<O_w)8G{=(LMt}T^%K(yRH1|`O@R)v9I!fu>9W;dq$qsIgmg7 z&2N0k)$Q58lyQkJL5E8D2Q4;r%&a52B^|deVRsA-6M8HJY3&Wy|D^th_f{r14C3gD zzlK*!)#nn#Mne4v@E|VPZX2E0NKIIv4n!FfGEj~6&F_hNVd@o_ubVzWT+;rHb+dNF zcSPR%(#mNc52GMKe@kdVChE09n$GtvJCVj7$9D1k9u<o~&0?AMujgOmacQOD{spgs z>of5si7UC5!ls_Eu2C7cHV{mU6ndlQ^3*52(p4JsS|cAZMfquoXqErH@_*lxSDt+R zE57;lFQI1<o;3rqn-IEx*B-CjwZ}cZ#V!9#O$ui~NivazY)F6w1rvpRUa9romI`lK z^6Hrs6$gR<%QQw3P*P&pF@LEhx2iEP-1xW&GoylFC<4_NHzDR$4lt~U6J$#2kwNC6 z`FbbqA&?GUwRBR_%qd(fbGzMAW+b)0r(doDET%G>Iu$KXT%82)VXKK?-wUClXUA9U z@F54<@Spewpj<%{$GQnN%Y+Zhw^jnq7H?KcKVW+Y&)7}=i~Em&dNe{>?`TkjyizV@ zQ%4KR$14BVEdTfHoT^uT&$m8!|Bgma{4)d_dWK=_jN3l=`|jVh#mlnyop3~Vg1ka% z3Im^41)>Mk^=0_7OwHJ^31-wG6zgzKs5W{~y)uR5>=kdLfQ>;?qJ<nIxw=xK{Mid- z6X&UJIj^C5Xl)?W&4C~-)?OUaTK{2RMzvmxBiF31iCHZ}tCm22c_h#(OhK`*2_J*v z5wEn+h>!|w!=1IY=cWvr=jiGrK6^{Y-a(jXWUIfU5ATVPc{rn2Uo-M+O_8y6UXxPZ zL=zY{kWK7PwikeAhG%J&f9OIF%kux?pZ^CRrGNhVzx*0{hT$1EAQ#{N-@SYwepzD- zPFl<<BBrz_0@HR(mNBVzupmAZhN@N~(>6M#7c{(AoDqMP7I9MV`*<a53dHA&b;G>m zj74KS?n}b=t?j`epjX~21P=B03RgnM807*&0WTsuxc22)MaS5%mF_@RNDB&_6O{V8 z@r$)VSEit$vA0pLyD~T_G^-ohGWHQm+7RUVBvat%%{G2=@<^_hSqnDf0g0PY2D-i2 z8f~lm)Af~qq8I;{zwv+JXWEE7lS5eiJ>UF>`!@rBS7~E`jzF7DQv+ErEabV89HV1y zuS3LTv9v<yojYZsp|yAquOtD5<7!2HIYC%~(;HUB*?Ead<y0Qj-IX8f#&8SaIa_kC zcq(2og@mXyKi6xm0fy9;sSo|#Fah?RNF5IFf|&Im`Kq<D{6h|9TBbJKAtCE{DU#rD z#54t8Ch<*+x4dHQ9rYT)bCq?cTnl1C<?I!<s|sY1z$(BaQASvMOtag6IxIAm-joq2 zG9lPACysL0n01)Y*b#<$LURV8Smpm|kpJD!%SIhbJ(W)zJYxoAH`y~r9WR@1Knpd7 zBlCcpXo9|o9YGQqOI(B6umOWiRUB@j5&(4x3n)|a9+CbEGCieGgg%yM6%*PAmEPuo zAa`ng$cOq+L=4AU^J*PuB?2Z5Q6Mcdq?4{(r-%_XL-#uY*wYdW__Xiaua>EOCB84A z2<<Nk!rKf(P-=~hRKYSTUUK!8gkY&Sy+SjEWgNkdT*`*D8>^wYVQ6E9Ki?5<R-?UU ziiZw*#a`%W!|SbyxYa{C11ha;bx4j}4QZACr&Iom5qTLsL%{S5z$<oEaTtvUT2WvQ zZKM{W*9P&5iG#vJ1eOjxto90jldQh1^3dafv0o^OqT+1ja84hN8wWf-2Y8909o!f# z2(&j8^<}Fw)M=JwlRR_%7232Ls%o_0b-*!4L+0tB)?;{?)fvk{JYB!wbLyYD{8o>y zt>^Gg?`nT9uub=@Yn#x99qpms9gV1f#OFgkBHGhFc_&(qto~Sy1%6uP|GLY+(Dsl2 zKY#5-_Y=(u{B?n+I|AWxwbj7mgn6wX7;u{`)XJLz!=VE8N?3&<cufTdlX)6Q0sM9h zjb$l1sbm1Xg2OR0+Rv2}7^|fbsE@Cgz%wg*#=F;o7#=fw+(=eM?uTwLEr&L(FGGK! zz!`F)Zm6nVX2gVYT{a1wM<DnSuY{;e`f}Q1Hk!rrit$CQpxC7w>ZoPmY9>dU03P91 z6_aUpJV#I@rA^PqA6QQ<M>y~r@Pkt(V(A?3L7KVw7y?=~T59E&3(1%cfE(^r{+~(t z-{JhOXCe}LS`ElJY(?9h@n}p}JGz1`uN#3||EN<Ep%1T#G^yc`PN%pqb7C6I!7i<z zL`;;e;M#qnRDLqWhLx)o)R0;nZIDfZ6f?F#FGQGB6@()LCjuiAqjH<o2So|`Ww21^ zBzY=tY~}jLYN5z@#VK2MZItbjkBX0LTcKAPJvtM5@kGKfiQ_%2mu73v#B7BgdD4_) z!oS$(?pI*mREYqF=Rhm+*=!$5ZYbiAAQ9S5ppk8XMIwi3iD<Z1`G2P6|7Fv5iKh{m zo+kL7Z++mKc3#pCOgFJ1^o~*9VGNY<*@S@F4+;nSXAPh0h<d|){*oS)>hvsxh)FqK zK!rfkn=+ctOhW2|yq9D^8?=F|cgLKq2p96F447U=4FPSBkSPW3`)M|B>_b)1ouLw6 zDWxs8eY_^}^{co$-HCONmFf5@@5_#VD50q;r8dWcl}!6E47E^SmK(l^O_TCw-?zRl z@PPe<IzI2(STd^;2;l`)vdaInD*s#Ae$#jSz;ApNJq^J0G{AVa)z10)w=#aS97|Ya z0AT7}*kU0%q(wYLv&yA-e}QqZCy?1CDz(!2_$f|fDy~J%j8TTV6b68@mXuIZuU0N4 zLZGxGM?pc>2IQWXyow0v3++JIbo$OUFkDmU9}ucZ(QH9sZ9(89&_&c6l~7+NygbVT zUa-a5gaXbcfCF4p4~}<*yaCoC#Q3(AOSNpAB#w3LY3=IbDi}M6`g_L~UdeTQl|u3^ zQBGD>pj*=r(JKEpg#17J1Yh~jzU#03me<pDhU-3r_1%Bqbzi*Q%1`gw?Vk29(PP%o zUY45>J7FtnIYY<+@7SGFyGG_`Cq(7XdV`@8qDL)6E^paSL6gF;FQf?+scG5js)(?& zIg}DemZ)G+5Lz9hV6YdUmLG8FIC4}_t=-F?1r1E*RWX!J)G76j!A(GI{y>0aP~2D# z?&-0{WM6*kP+w(0So;dfZuK9GaI8z5>!5%S+RQJx1pMH!`xQpw`!4cF1LX;(PJ?#! zl#b5Mf2jCPDUqL}h`9TTd)cgY?<TE9C{_3bG_UgiOv?W~7wPoxkB&WEXSm)5gikMA z`sv-zeFRK8K`M}36_p7as1{4i(i*3|<ABR4pyYXDY_>F2u^4%^jHp<XTLFbu#(CK* zC|3m#*bbjqnW!*Ps6p7A_fK|Tju|g`9K$zHDAWa%TWecJ3ax?LfritVzL58_n4IF9 z-f>c1cVTVU4FOPJM}<yVGbjgc&zZspfMlkA&Zuc!fLD>poI>;Uur`Et7xK@rty_80 z+AHb<ipILpO};&tJYRPPfL)bw{=^RHW1~-?U0qq!=0F(g$)WA7eyjZ7K=Oaz*;an^ z760SUK8LO&Tvr3~J>T@e_w9b}bAl>?iOqF^PGrwu%`2$PS%tOVNTuymaI%&o;>#i- z++E#qn~>KlnimBlDw8yyQ0L_|;bzbq?At}e2_!{D;__e_LaEo}n31So|1O{;$hS#W ze}Yvaibv^b-73^6ho&GEAJ$1cOZW@wJEUnpOM%95B5>Q<TTnqG`nZhJ^^fu<7Gr&f z{A6uNmd8B{5a~hX+>{vh3DUjw^eR4y%7>u6Au*HV6>r!gFH)ev_uFJ}FzOHrBFVJM zKi!b>zx(%v!=*d#CohRl39g#~`P1L>%iq4E^#7P{z*@RhGOjUgy3v?MKv1!LBrvnx z<63QT9hz`OCn(|tkC8zl#JmJd6VgE)93v5w74q9K2q+`uB<Jx9v?W1X8Z@JUZG;M? zwFxk;5V=Nlbc-=Jde@+=ijYDZ#&RI7YX{2O9r_!U4WtvL8->>4t$C0q1aWk&25rpV z>DBgU_Vp!7>PoIUy|ju~2G|FUer@ZRwP~f|b+!TtctX6wbAkbU)p%ZIPdq-P7xH%H zO31UyKi#<U&;Q3OzU6`I_CYG9>j1C#reFM$4WIt9kj{HR#TgnLpJC@Yk4N*9M}>0V zfhBNf-86Ketbo@h#Z*9GvR48ft~`7mg_MZhIsPgjOwNOEb<gY5<tvC=Uhm8#_0;E0 zX<%Dh8p9K5!n%%$@Vf*Y$glOLxS5L=SR&RnX$PbQjRi*>rLMN}E1+)ePV@C{3Ly3q z1^UG5)@uk#c{*wLoT<6L72qk-y#ui?BtbXBryTYlAgzu^L!DyUR4`ZhFV(zZ<^SP< z=|B3v|LP0hOHUD=as)CSBRufwzu48}o<d}3jn=Lxm_(h|MfDx2=Z9m$Ld^qli0dC) zV`me!r7ZUOTBlRzp?e(RTI;|_m&*=qv!%#XEnJO5D^0k_r`Lzzd73wjv;*_tIIk+X z*nI5i5)eS8lcHj5E2!8h0fDY4_bNba{S5Uj=_MD)c8^RS`T>VKB=Q79a^J={PHcTo z)a|Kg(USefQ-)jQz}Ro0&7!gBA_4O6yD~7JUMk(&K3_v07_p)BG9lO&jvp%`M`F}+ z>|~c=xRX}-uUT$b`M>9S&4)Zy1H$$2uKT(*?bvWA@R6CYgX%j8*{mffbP_jfT*gbo zyPjOQMj`1L)1Q5#9Tqy?(FFn*gv+HNK;gps0V>U&2|D^H&;ex-C&~cZyFPQ-t+DN2 z4yXliOHlr(I2o`4b7#MfSG3*3v)MjHp=ZMW?1rA&rT?m%D;kwTQ%us;#I+&j6-sae ze^Z_4M7DD6rk7}NBB2#uXP6*O<L5+aDql7BlBW1=Sc;8w%^Qt$FQBx_|IH=;yVlyx zhunTY<qdT(JeABl<MF_YcfUVvsAA(PQ?XY#(CN~}n;D5h^JVNwqGiTB=`(%KIiBem z(2L$W12fh!$=OL!RCul&p?uf?@^VxXn8e!FXdrTpgK76d*034vlIH_jI)gQvmJ-D& zd0Lld2Jakibwg8Gdn9<%AvB_{ZBkgEr=ug`_3m6PPzcQZP+Z5?fY<TSA+#8tTy8Vj zT;=~pm;bGt{pa8D%HQ<Ubd7M$5y;nn{nwA~)DL7KXa|kpT9Fop3nl<Ga{`!@!&r!r z4|VZc@e14yo=BdfS>PFTerD<GwP0H3G1g9W?_#+GX##|B8_Q-KR~7Y|=a>ibyWxjK znA|nAE!LTnd=hDvzHH1g{q{8AgrH07%2k2H{E5QR_nq;;Jdr498-aS`b;q;gvy2ag zu$|e5OO8~3Bfx)}Ttbt8QtHYDJfSGx_nAC<+9hp&qE-HHKKUPb_<{Ss<rkhy*9g~Y zK=?P_@g3i_`@OGI4z5G_0A^5((7>(o*yvHvff-vLa8M}A<#_K06keBC(<B1v_!EUN zDi#4$5s&oc2$q*Ar<jkS&7f^C6qba36$I=zo>L|gp4V&i=3RZWK49wW9wpZcTtAcn z^>zXg6iBCpDb)24-i!)qCXXa_(h2s?s972j+Ji6DH?&Q|-zhWgcT3xgVvt?Ovl7x| z`H;?4{%=nCAMU*@mtIDP2}1|hl<7PFhkx;<ci#Sa@50769+tk!oCx~N?}CU1l9!Z| z7t;93z6BAx$8iI7p(*KEHGz(9NCgWF_Zar#yOw;0@na=Anll_s%k7k0S4LazhYasr zzv6qMR0+)DU#c%1@IFgp*RC&{faNq;uIwJm4fRfWgYvZL^XxkL?UMEFVD+Vi;iGb& z4~fmwv&#P*--Y`dRQ|8Z)!+0-U-_H=Eu9mtB?94{@%ZPS2*1`?8@M;<;k3+9K`)fC zTbcTb<2!QCJ%B|A=9vVAgdz<wE7r3cPEqt-`I6r^kBM{o$nWwMmmBXQa}xDKO3JYK zM`SG>+N~)b-i5ZY9re^u?(^4)*`BevBQY1OzWubm;_5rorrmpjdPjldmKON{1$vG@ z$zfrK%gQ8ALma*cZNy1C6QQanm)`w4R1)gKK{l|y)ESRhdtKIQZ!^AL<-eit%D=hf z|Aa66d6DcZX3KD11Hymu8-MAWcfa>Jg@9oa67Rq&*Sek|KhFy#&nN(6R<UATSxkbB z#T*n82b|EPnScdPgV}O)Cx^Ov<5jMd8h#W;scMA#jY3ffqpG#BP|P8LhQNp*2>u)% ztE0omSe7fjS3H5a<9S2uF2GYx6@}#Okjz6!xYzQ@(Z>!~a;7gRMQJS=dCR9}P~_6{ zhFg&nlnHPXwel!ppnjYiapAG!nO-p2;3i|-ab{HG{fkxpiEat`|C&Gb&2M-q<;*e* z=SqD4H~s9FT;@B+8T)%Z7He4R7T@?xbFAz`YfLG#YJ<}BL@@;JJImNkKw(h8ERH>k zE|9!lweI8fz;L!xBS|`1OhrVToYc||c*gQ92?K4GuN?TM3?#1Ju|2e;zTEzuqrJnQ zfTOSH2}{Pbl_11{Ue_lS+f`MGxO!%E36yEy2VdqDO6Vu*+a^BiAsR0))=^0vN{`;> zv5P6U$ZxT|93E&N&6QVamH%5r{vUq$>L;H6iXZ$hK1m0{c_I+LAeUdVEAU>kmK+#f zk7HKSta<boS;ALEgUNa3;Z{Phos2BQE>}tCSqdAJXT+jW=$OFRuGJ3a3q(Ca2$yH` zDfQ`uCA&PvUQFFkOAE=_7))y{QAB!?@ozZ1^KFe{YP6uJ^=&CL$}qArj!QT1Ja7TG zXV#Wc9MC7V_AngAN0vF`0PH8LKPpppyoUUVb<k_i2?G5d+NUa@tkt5_bY`2W>n}~o z<WIBp2Bqf{Z6B+pZ`W1+Z%O&T=dP3Ie%pD5vJOu8o!_{dINyB!yHJd*V&OMfK4d>_ z2(`X_mCBv-N*X@u7^_%d<zp<(TkKX&v)E8Z#g8;a#*NTA6dQshNtcO~Z!fElwGziN z5*%p{B(%i3Qz)A#uW#&IqP~Wa7N3XHHl?I&tE=QZ6_f&p6n$N|34h<llGMZVoUbzo zCHdjErF;?Q`?`+=dOS?t7p1ga^K#}D6Jqi8>TzbC`zrr*i^;!y`UAiE-Y@-&Klb~6 zm9h#2I4A-cEz<3qdtMgtWdxX2MrIU3ZwZ-$YsC;}^e}Bg&ohsESHn04%9NH?PEB7L zZ)<E_>75hA_zb&dq6xzHJdFv~^qi4OV;1zTm1c1*l2H?WYcqQlXZ4IZwH$vPRg2HV zget-JnF^%R?s0HerioXiDtm|TjY|Y*a%Lv<eZ+0o<myWl+eDmd@5<?byPlyAuMkm; z03<Enzmc3~h+4EQGS2BuElL{!Zl%oMd0Z6otn#0yxtZjj@BVk6d*93GK-e6T=!tj# z_UB*T-1%3nkb$DoG4>$p+25XKf}1HAyhFk6a57H4nZ1t|9ZSyWP{rq!L{Ak{rf`XD zqIn@rq@7AzV%xP+S;sN$y^vSuuCC0GE+|82qyCRwI>LN`R{KQ{(b`sG9?o%LdD>@` zl$AY`1)6##=N1NXxt*|l$Ja&`4(gMfA|;PDaUQH8QEZQp{DmWT9E$nRysr=4$4 zq$e8oRsQk565`&^@fLNsZan$lJ^QV{`T1Y_H-GLefAdqc2M&oq_@2{W`^T8<KOr1L z48CADrWd^iuXv<g6R9;ehRB4^ey3|uyIoU*5{&+w(yXZ?mALZA`<(qRGN5@OhB<m5 zo{7XUiP2U(BdPTw`0W+3XKv}dATdD+(kJfP`p3?S67q)!N|(nb^@czZ<f?7L1Z~{W z+<RS~HeWCQR)E57-=7`!>HE;cl&RSsuhBqFnAxSrl9YO@bB0^{*y?XN+2uvqF_Ym0 z-ti~}T0As)!ub`>OqEd2$xN&KAD8^!eb=x3uKVx5KZ;2Qdkx5Uf8)=8$u8M9<g6*( zGaO?>TWp<dO=`@9oss=Y5L{0Kksnm3s{&nqqjw8$V(2=jdg72ouM$zrs45!&j2*qx zA1K)NrXH%+c^gc`oq83Lt`AJ<6oFQz%u<TOWx4UaXIXJQBBWm_>{SLiI=ooNp&Pqy zlrWL`NaXTyYbT5*`Y6bApYbFr5O#ILntI`y>fsJ!6i`MIc-fEP`(7(vr+d!aFbH8( z=4-&@6^;bTZP*F{TUw|;y|w1WrP|5wD*uS@)|dZ*Hh<ugZ~pSnqdl<CfD9Klw|!Sn zUTrv7;o=1`s}zcOd1eYplFCF@vTG~DL`|E!8E%(83s~(hrlrvRmJ3<UdxMIh$fWO( zsRP4uzN|wF{ZS#-awN7ZH(E_hu>`wPWg8U`)-C?48_hV-?1hIZwl0=z<(X1s*QVTY zPE%Ojcr7X-YKE&<P}1rqaLtqpnn3M1y!ZWG+XdbsUDQgz$zQ|9t`6IVbE2^w`|TBy z(I|kw?`y{^GsBQ(bUppp-W>8^`{I*T{*Occzwowuzik(VEZT^rmm{vt?w_x5N`Zl8 z1v{ELq2hp09BQ7q_af2fm5^^D%8w_De{W*x8Q7<aG<n4$u4MEEQSc*uipSRlpZBWG z6iAkXLP~!vE}06HO&khE_2BbzSEfMgWu+S4zKx@JD<%}5WwlP^+ct8PwLN<5?8+{W zJtrZ5)mEuv&5;)F>MfzqkO!#M8w-u<BokRBlqsqLtY<G#LfAq@CXMU8I<_H2Ca<`C zuk=0Au&?r8^B#lzZ#Jj@+lPMn-&;IranZW`zu)k$zERqy!OB_^Re<*+urYH+j1A5% z4Y#r~@ZM{qONtlgMJ9r{2K2slUY6yIPop;&J?W@OBPLUFz30^{POq#yvwHk0*!C7$ ziOA6*9ZlB$_5_u(E5r3v-c}LQbcG5iyrb?}6mp?nEqTE=ZiE_2OrOv#u}!dt`a1SX zfgL@leDb=6e&a}a{NprVRPec99x01Ym}1*YQz(HySNW&ok$=AXzR&yjzJV5C)_{!1 zwGSs3|MxkjkD;D_mMH*_haJJjTzO~4@}<MnD<UsuOy0YTT|-F&OQ5g!7T9&ar!z8x z(c*!_pQi5_9Wg{PiY1vKN=PY5`F(v*ol(N*+?5)XLbt-Gwz%{y&nXV+a%0qh0*d)v z@37(T)9bsaLO7Jj)b|>y52oI@*?XnR(s*b&M5yOsqP}c)xNxz9bktzoB)#%#j=Nf| z@^AOYDE~YRzjt?eLNhRDK=}E?OTKhh=nHZtz=kxTMgsG$GKTYBVpK!~xUqsVbCorY z7meJC#}1QFt`D=lh?=NoBGyuIOpW5o)Susj!fkU0J>!bQ78QKYvdDt5O;MN)ON3mR z#xiuwRvew4@qK$s*X}ufRNB$|B~WN>07PQzU?0T1$R8Zu>+`-%avVfNnWE`=*+~IY zqn}cozBUAP<gSf;gn;$ol)pXx7)@XqtNarki~KVUUw!}o__Hsj8JIO7ci#Sm-{}iy z*BzcbWL|1Z1^aLrJB<<?_?LBb#1WMgb){k{*0qsgIsC>yqMpg3N9Tj$*0EuEUB}ph zxbe^M8vcyQW1R@-CF%t@YaL8ubuO!ge4l9@h2~&<w{`b@NmYe0(=uerL&7`Xmnv-1 z@tVwXUf-s@g5e+wJ?~J!MGLgg2(83^n8Oq03b|1Y5z>iu@T%L>LquIY?Ru5}<COmk z7fxSHGkXT-49JFszlMNR-vkUr_sov#`(3CjmaA_lECU;ih`KUj$74Bj>}~lxwXs~x zn>V<0>3nW>9qaEiMnufqJ+m?daOA@iQ9!f$$697}%=;zxOnW8mX)~Jf*@US{P{#aO z8$}+Vt{iJ4?%qqnH+?;_GP0|vU?U#wr})gnBqMd%Cnq?0R^YJ?zP_fE=Gq1oo+S7= zxm)GmQXiN6Z#EbHH=3~(*+YK$|MZ#{@0j{|zE~sBDl$ia5#mB!_R5A5=4)vw3&W7{ zywLillQt>o@bnkH4w99pDcG0qgp^%<rV_i!Mg-}~QbvoEQNx97l&u1S^dlzr(Sv!V z(%J`iinm0qUKwuaL$_hf-uK>rrM=>w*0Zzm3=iy4bY-(myz`u)3HgCU8$uYU=Nrr@ zF1<tP+JIWxTnUhW2JOU%wf2V&_X$ZV-hSu@=wn}&HL11NJU^Ff3HOmsEvl1$t}hv6 zhk|$mKUkf;>A^BxwpIS&-JJa6ewO|6@865VhV`_1A#T3={@?%F|1=<*Ae$WFlat$i zuS1Fih_oXph%l_>E`1eCny*ME%rPyM24o7)y^@Nanr-@mvKXm~bs+MaeM(woWiLcX z3IoQ32OE7}B$~35QZ6dp=l%P4(A}SZO0kw6Bd$XiTjSsM6j0x0emPRZQMy&2Hl<); zvBT%;p>$qMEr0CBZ0xqR5FBV%GH+`$426E~`(HFa9F8~Deq4SlaIO&ruOHh0hKRJi zlur=1wue4L{K!uJP(G`hR@ugpIdChqwbCb14xkM7%56HwN!yAdx02N(&|`Q(QDFVt zHMRj<YyQF@6(RH))V*zrb9rl4!g`@XL!R=(p>O{APfbN~&5!lCmE^yZcqT%wnbVov zN+P!?!!&Ks>3Rxf!x{Cgm2-08^lNrM<EK2XV#%2SIoWmmSNBL53V{0*Oi<Ofg4A^i z0z1<h8_H&nw`*Wz0^?xoq^@J4XNL;LGulLr)0;sda}2<<cB$nxJix^6IElilU-6$j zhrZ$~ulYOoE39x!!W)0?<2!L1iqo(&EQ6F`dAWt;KL?~!e16C)PG_?-8tBHA*8=UM zZ{ngCYp)HT{<qJ6{`3F%yWaIKXF%c*7XRU|{|8?@@X2o=ELO0fxB{cMR<7b@CreEt zzEj&u9U`oFYwU)fLwVR`)@?oWAV|nZ9iGV};(mM)cig&qf+6I@sC5w1OC+?eXFroO zT49A1JX|?@Vlo`t?bXS{-qs^Jm~hC7ZeICs`8eEred!%^)X@my^|S<(-3`)H%V>Ik ziY9-<3;vyNdTz|!&4Ju;>A7Fy8=I20h*q{YBKTcj3WmO2OwR>~CBm@IaL!q2?u?uM zuroeUQA67Lt7FmSwanDjetmFAC9mVhj5#a;ev=xb|4}%$+tq-qutJ2#pL}FzL>}Kc zSXasrRdu+g0Z<+48{sCE|2|y+#+6?1+eUSwuH+ef>U77*26AbX0(JO`d%x=U&>jP_ zIoVwN>Oi$MI9McK`CtIr52WQ-0cq&VFIZj<X&gR8QyWgqCM(l)yN?Au3d99W)AuAM zalaB@s-c8>d2Gh05pkP;*x}f2x8#?>uCT%iBRqNKF}iZ~$;rW*{xnk8MF`D^+??{S zb;0!U+C?2shYIzyM#F(o3{hO5p@vU%q$p%R-CX(|6l_LkK$uT{N2w-QuVC<87`2TC z0*NET5i8Px^y%;sCwVz~2XN2TOK6jcbLApl@gxY7o3r6iu0&$VrR&;2;8|9m<aUJ> zRw!_`y|NRaVmP+#K*}mtVn^ijG`@fH$v-<i8kM{BK6rP}J*^dQ`_%0aX*Z`^e;NYz z1#O1WHca#8EfpFN{=dHNhrf7N(DT%yQ(`SChJ+j}r9Tcc0Z2m$dY6<bTanX+X22X6 zmWkr9MApz)ZnM_G5VnaX&4W=G&D3GeI8xr6U6i%L3M*tV8jh=HSEp~fOhZ?@`^j){ zm3yH&6g8&4`Q%@6CD`<(i&QwIiK8|GG?PUeB8ii(`JzD-Ul{Y|dB5i??{}+voB_G* z;yo{d^d3q36><~f6t20ZnQg~BJc=D%48fMr0viomd#0TlzDv<O56tfgp=Pn00TMDs zgXNvAj*?jD>^?AS=m>wwzWr7!vcd`}jKjO5@fha`Cs`kt9M`4ClTjgce5L7wn@j#F z&<gZt`m~iHdDTd3mFUp8yt`H1lrwirz=i&!d%x<dX(j?0Hk(T?>=f7>;V$rCXe^<0 zEU_tcrWl>I8Z<+Ybbvb<52GJ}XUGKN^|4xL3|`s<e)3z(z^`=q1{Yt3OQ$%<7+C}i zAK-v}54GE7n|y^8jvJ)OxomaFsw#Sp`@iX?lmBKoraeA*59PId_zvm>D{`h2ijmIx z!uBiyF&H#76d}!+?Bw!SfBn~geQrQ5oLu}Wav<T4YFHPiPO!1SYPZ+c@l-?3#taQL zb}oE?#ZBl)Uv3BEvn>HPxyEzX9PhbT-)=QoGt<FZ!*e2HG-hoV^+0ZASzB{njV|<6 zHo~{U3dasYI?ABYMm)m3Mk6<={JZD}9A&rRw9&%eh$tPh?deDIxNgqu@)8&((C=uR zcJDT{x%bttes$YFh?Zb82)_VrMX#SLC9?Gvu@PHeJ3~U`cE&29En30np{%w9SX_g; zl?s9thn5odbSd-b#+}&7b;7Lepq0?5?LLIY+Odq3Z;d%CU2gRRJ2$AcTY0xyj}=zP zVT?S^O7t;_Ziz&s%9)_y@Y(35kpJNAt6?b$AB>5<L!%-N33W<b9dI>PO(%m6ZFRsY z0%*5go|BW)ucUIY;*?qq2!H)=|D(_4VYsWC6i1?3gD6>S1x$o75LcSb#tyk_XxE^^ z)D2IyP>`YWW+e0sq13QoIqKo_K+bD0RK{2$7Pd-YHi2`%Bs5e1fVxEhGQ-`%ke_L8 zHQ@>?95w9Zaa)JDrB0+z$L$RDJTWPXmYpJ{n@IjEL8|*&HMo`0bZSF|I##M*p6En~ zK+0qB<g(Ex&7cIGUE1;P|K_*<(dSS!AYbyluY5sUwuVGXY#6YF0+r)%z@IAp%)+@w zC0}N<^yDqI_=Y5@2Lci(U)W3|&O);_?8G4YT);9D&<Ave&TQTZhMr*59R037P)ApY zw9bRpTVaJ25@?46?*1Q!fyQ%;r~M$z?OoXuvc2i#-vl2G06~6lfW(!}?VfdXXCino zy$Hiu+>D#nfuN367dgFbjq_!{?zg;<(15)7#V;N%pWOB$uZSb1Ryl!xv4I%#YN6N; z+TeQ4{ppih7wcSV#23aW=^9qBoYtX4cC^8^wT?zB+{!QXx;}2iGLi+%fTznu`la!u zTUEwpWR>wOa<aM=8n&wiSz(0)$}uK3>AbC<v7OGxQm2uM-Whm9H=X=*U1lrQ*pdJ6 zmTs0*o5ySpbva!d%4$^*Z+x1MEmjs0IfJOFT?8eqS#G~{_X`LO$ZKBnnq7;ZJkNzH ztw9)?$KP9M7YvV3sJ1F}unF~FTsuM9&aJY7q(jl#h}Icqc-R^8hFkn;qSBrdRL8s( zat4wusT#_9EU5K|av>YTDXq>^q3SKMb)sWKrr>C-u)+!oT%D}xa-cT%VVc{9wr@K5 zN9|3WbFLc#HINX9rrh!FV(p;iHRGoSNDV2D^0c%BxTqPw=9CW??xkuwbO>v6VL1H_ zW`ML2&1#{FE9Gb?hsHx{hhlap80f-BXkFb4XHJ;Vw3d|#VsF@NdFy{tqpCF42CN-| zofmk`*WX$N>I(co`dtSi$8<F<0|tSPY;_Z;8L!r3g%vUw_@v58nafb6sY`fODWeSC zRPrzSgnNBZrwG(&up>nvs-PArkk(Pa;U=(;+Fn>YtpgYmvxNo!314^~VFWV$4t%#o z2?9n@oPra<BLbYE4ORveA%sSXzYRsPZ;WOk8&YaUrIoEKx1iTWTn@5@eST4KjD*y( zDnkj@E7lR(fb?4#P<do98<O(%!Op_SNf7r6E3DALnOtqoX#8xllOry3AUB`<gORAo zBt#)thq&urD7f6r-Z=PLP&2K}txTn<7~)~Nvw9Uw!)6#yYoAtP>9T~~bkyc6#9424 zEr&4y6zxd!X+i_C8a=bI5-l;YxA_u}j;CfBB{YM5hZ!4^EIg@+@!&$XhwWKwt1v$k zY+xM{74KbC`mi0XvkB<$KY(MTW}Usl3M&-(&=02(=@3x)2o@23e5>u~xQXQ7(-jRD zlg;0t-Xn5L|Cvm$3eKRoLK@Aj-7I^{v8^8$Yq_QA<+}+D$nX3u|L1d5;dVzFvngan z4E@oJgIXu2?!}a%hFy|Ws##)ZOsHAEHl|ry6`KPiBYOsu@nY1YM}po3cDxZ43>WoG z<&-@f-o`+uwI{iIZ7=i~?5lt)tgu24qhyT7mI&ztuTC7Jl2bXo>EvIH8M9aDY9s{o zEvY{BhDK`rqaUhx(7@VsgBm+S&Y@l+HZ`#`;&*+^@B9n*j;|+k{(}3y<^{n<^-2sW z0wURFbXum?dF_FHJ&S{>>y@Q95YoNXd`z*GILpOl&3L_R9!ZBc89LHPs)fCkIU3`D zF%wrgZ*;TWt;kqJu!2p55>i%J;pm~wUvQDBfj0F;`A1hJ`8^Idk^GYx8ENHL+~SAD z`Z9tuEuaOR?zR8{O{<m@-Fu9@Ooua_UU=?v#v@He12PQ5g?pH&Q`}<Zxdv{P6oRoc zXG0v3dd&_WrHv3Fd)9D^P&6B6yb`*_n2@M9PFcYmJd-RZ!wLm0U+pRp1(TRFKr<e5 z6<%S56$qEPj&mXuhTJ=ya5Kq&0I!d8YSGXXG;GhSq1DAn?Ke8uAukc=<mjYV1O0h- zf8kfW`qi&4%NZ_iPVZf6%*@Jpq#E{^g~GhCL5ZTFv0v$tyK*>`n>Fmx)Dh;LdtP;U zGn6rpMYraeNQfNvMG<irP&=0-`$E|YE3B{?Hal;(MjfO_j!?UwE)yk~!3`<@*9fRT zDH_ZewZx%*mtN{~j6j64xN6|dJv7ao(|8iV$=yUt-ah;$!$xu5q_@~vbOJbLhN3v) zik;~i1M;MPf=?Ga44=>TWhl=#ZYU=jyABs6=t~DZ1zuWVg<BTNr=F_<8wQ&npmNbx zQ;|3&h;Spze@2g+X4&Ieaxyg6;e+3$s7CQ2PBe780mRXOlu7i>Fs<u_v95WD6TOGz ziD~C>#tLLc1}&p3<l&jfWtIlYX`V|XGx=x_eYB8IJ8X?WR#>5jQD*em5?y`e7ucv$ z=h=~q8(IFfTps~=oGo29w8V>1jLiHl86_O<i)9VN$-Pt~kb%ct=t*Hqkd3(=3QI(5 z19s&d;FkLhL_Tskgh5<+b7jzB&@JEFliztjw89E2L>NZJRp&akHCiX?=Ml0whnq(J zX<3)zgg)jybO<c!-h=dNxGzR}7)Py&0U_Eh7P16OR#6L=g*+WTqCJ7tVYEaVx<;V$ z!JG#(*Hm*8bqAHZT96f1=wMr;4cwhwBKET3P3lR#(Hp<%<bMI;2+*N8v!T1GU3kB~ z&+u<HCtpN$2y58zg)gFn$az#TIFs3Y=e7LHxqW&2^T<ItsG}>4k1}Ekr5!Yuc?bnv zrWICLA;2haTQNOk8wquo3O+`6v&#PgaL71CG%|5crp#&3USrEi>AN;*5y<%dZYw4k z^IAaF4)~(OpzqRN;pgRPmE$O3#E$RwjePo?t^6*`11fk4pRbp#63gjuLvA(iI)Jsp z3UeSkjfFeNiKuzdRd)F1m4BuTx1_&(KupyQ<#q3*uPeo~Kf=asUAZ8`U8Ixf<Icif zIoqF5RQT+Q(<N_26qbC=8H&EDu@d+^8k9WbLb~P*OiVB7wJ}UzZ~rc)WAKEyh19-n zfeA$@WvX=<)(R_hP>wMfc0(p7_KZwRsq``5obn&F9qKf9#1s+eWSOa#(nFNjvp(sz z4MeBb&(3K5cl3+~WEg(;Z+q!;j8H4s1BVJ>I(CHNzkLJ&7R=$JBt3L!SLtm?Co_2? zcxLd|_!k>`seODq7`0hC?F8RSF70YOR#+hiDGKlG>`J*;UrSeBH5qFE^a$GTjVS*T z{;132-!bL7dd>*sx>l+oTaJMGa=zhrf8X<lUw8MH-fb2e8*r{rJP1q{3-FClt0Qwp zN<!W_Tytr#5#sZRC)P1`POLMQpBuTnjO-oa^!Q~p9xJRc3)9E-syq#K6QQbXT+Zuv zqu)I8-=~`cCQ5bil0Fv74QJhuNjTgVab#r(ZJ#*f;qE*Bo#*w|jc15b%jp%J86bfO zqi>M8Ra$)|GXuj3eZ3`?#RiPm5^(#@G<xT}4x)T4GGjn2k0@)`!)KCKSmF3!{2E~y zsv4@n*iQOpG$v&pwmM;{7~S~t-{WA)D<d>-nCv~qA%0(+rY+@|{$DbFu`Wb+UV6?w z!&bJO5tu8pNGSCL2o~%c-8<Mqm~tMXvB2l$S4~F`bDlx$oV+7NvQ7?Z(vBor?quyy zCf8QlvFBJuy}}B|1=3bUmHCDN-c{Lx>-g@5mj5)e$ed{`Bm0fcG*#W389^*3!=2Ts zJiC1Pj=P7G&82dT3Hu7jqC(EBIfZ;#2jXv@zt6i=5iKz*XRbkn<{E8j@~w}auwxni zb-5B-Pz`4{lqZH`9m-l^g$~O460YB=fT1fGzA}N^hTJ!Y{O5qm-f%Ai)11!rLwwP2 zX?gW6&*2=;COf@nxVX7=mm&3;bE0}g`w5@3azrtjvGj*DP<Fk~Xz@&5Tw!5rDH>MU z7vbbfaE(!x!$D0ev>J~UR!E_KhkU4;2d775ACaQ=WP~{ddgIFfvW}e73%o$rKBFl~ znt(~>9Px28;ibEFLs(b2e|bpAlqq>h{^l(AKFb@e<Wd91wDEbg^zpv@;@IGRMV^&I z0Vfg9cmbZ4nu2-nuFw@$I95=@u&u)}(*PFR3E<OX{q8qwj+;mR^K`xL^EzVAFzt(^ zB*C8t26$XO=H1GbVYqm5+ZXx5H9?LnA!*P1EFze*v~$*ODeb;rOYev2GHaXVn`?)C z<wZuEV=}`(cX-(fE38nALXj3JhbmGT&LUjaUyVR7MmN6v=g)h*UPmm^R#VKJ5!jbE zABALPo^CGPIqbTEJ%WgM2_z73NP6lBna|4yq{-gp9b%hi_JxTt|Dj5~FL&v?18Led z0$E{&8Q^9F@UTKX3u}@i8Hc!tdc}U@%fH95&&l3b2go6FX(J8s*_<xYx()XX@!_?D zAByo$_UGB3M)st^%8L@xrI~l|;l->D-`BYNI!}`4foVn7VXPHam;qhNOLe*Kq-M+M zux%J?JC1R6&e%;N|1%ExVLIUueacDNYLvU@vWVyG>};Hgnm!Byi1rb*KO*Q)j9iKk z=E_-mK9^P^A?=N(DGm&WoEB>8Q6hGZjehB@W@CbPaINt*Y2xzRzVA_)z5N1ZrF1(4 zZXL#2VTBBeTn;*czTLLx<q*Yf6+5By)3q#37CqKyOa46-OZRg+VP01(MGw&sYCUC7 zes7S6;pDE9&F&vM7vvE^Axl38x!f3sL1roU!%Ob}59re64P6h=rakoe^?<PxFWq*1 z=wD%lTM1tN{lBjokD|@vN~xv0Yk{Xj{(t-j-cRp;+ox&VR<A>9T(7Z&ct+I}a3#x( zxif~8L=q7)9e&6ZhEIRtWM@D|D_-|-QXYa)H43yiJg-FKQaFdt8NNdXw_+5N;H-3) zpkfzNZLiYfk6xiK_@c|S!U`+gTJU+l_71w);X@C7iq57;X+tN&X1d-~@4sw{EP9wR znjuM6l@-Y1350!m8&cBwVEU-ncm{y5B+*18C@~&~jj+hV9UU~L$F(e(#bVp_$Fb3~ zv#a!$fAcX~VTBb|xY6K4@BK7A{ON}$J+<9lp)0#z`?}%?+ioC9l3{p+eOfeEvxh}z zxtjNRht1~n*T+m<pv22W&CXy5;AFejkC-gkA%?ORtJ~(wd0N`{fp>p`R#;($6>c<m z$D2M(PhNR!XFRU%MoZ3iI&fTyT+j5HMpM`nWQFLsFFEh|7?QnfI2K)UcqYE=@@o$V z8SWkk&XUnhlXZcEBQ_EzAx{B6`qrWs$d}AvJ453mj=sEjjgwO2cLLt~)=$x6pSwaU ztgylgHxj)4!4FMF<LWN@*lvsQDEnBdVpe5Y=aEtWs@|M)-kYA4{<-ESGKU<WcjZ7@ zir1iTd9%4I`5rp;5l2AmNvwuqB4pdrW4gHwa*KqLH(G72KyBz)=@EwAe<#C*DO6lx zg%wt~k>H&Vei-(wY^M<uJq&Wxo%m5K9D2!|cYG$Wq?x&&f;7E@Unbu3KHO&8wr!gm z@3^&L+icse&9-gZyu;?&Y}>li)BE%NJ%7P@oxwHN%$b=(YvFyL*LgVsU=0P5M;GZ{ z-<LkEG3^0TByE_mHlIlSC28E!;$S&&JNRmdxVBlH1U}2FE}$Xu6ZibJXeQ(}e;Su2 z6NLtFXCmAm8h~J{zb?nHPJ12j<Q*vdbet@wW#i^VQgPJc=;As3pw?}B#2-bKEc;DF zlS`;>6cVAbZO?RA4yF@OTs{A2Gj`*gD8os)OP(JPF1qp)YNo;vUt`}S+DVKlkSrJ< zX>gdCM0l-bCeZM(*hX^51HBBXRgjD1Z26})#m7$AKUm}cY{X&P#_nxfi6{BsW!MI1 zK#1xTvDL8pq+0~Om}w8I`w0LQ@ku=1a+x>_K~tL4Ars1)8MhS#t<>dl9rB0`n{+jw z3LDI%Yhm<TF;`wMvC6E@o&l1n01v@+DPt;}0KfmMMZ`9E0<ExZyHZ=h5Vulr&06Us zztzVx8|DkMuxxSNkAg_jLzk3YK^7p=fA^TuCdO-_aX+5g+Un_DV|s)e%fv^k)h!E! zuWe`o+#d8FSoiXiz$t{peK{i*IIo*bt<5C44LCh7Cuf@IUnAhq@_B>iV*rO`+cu;M zqq~*j``nT3uCZ17n&0YWq1__U)dx|0W;sXNb}&FQUc~>gJi`!zZ<}nBe%DRlmD#py z)cAkUiNdxwDk!PdE_Z<m_B`J5RRH)z0_6E)=t8(C-TO{@+dlcBz<`2PxZYm&-DSKX z0};&Mj6noyMxkcS1NMZXk>o?-B+Xei;?Qu5Gp3$X)zu5n%i7--2CC;cO_A1cM)CD+ zvD9&o#5TXmHvhA7u&6r{W#O75m&NRR)sze5YdwtlQdV|}i@6f$V8#BhcI0T@Aw~V| z(fCPu9taJW+NN1@5?V~pG}<WiXbNKqm+efka7}2K@}xXo-x4hA`%}gU9SZZ1TiIxp z;mO@2*%|mfrc@7%lYe>IA;4oJPEr!zEi>~kBlxki6586c12OE5=qfqO>(`ezz3wJq z@7{Crn*({s_PmGSV+oL6;^q)8zvmAcz3+(Gu8ZVF3}`ZBs|>aU2O!La7A?mH07RLw zv3_+(!)D;BKU!ngEJVQdQd2K92gfr19tt)2m3c{BN$hzxcqTad6$`Jc26?@kSI!C7 zc7pHa|0sqvM7J$ls;ivBvZ}{UhZlKGp&B-ssj1qYtR2VqsB0ivxdVD}{5C?zq;dN& z11!k@gn4mAQu2Nria<nck6bK=iFB;y{geVjvK;iUn~5SrLX+|;Y+Lh<b0PlE(%n;b zh&ti!^N|f4h+61h#ni=cLP{%}oKw04F3X|lT&kd*OP%&J^8*qChfDA<cM}X<|FlNK zxNzs=RoX<0;=*AUOfAAhs-xn<F_C!L*h00&g{+^Xqa#Kk%NWvXM7UtcG79g)8ZIt~ zb*eaQpnO%K83fm^KO8>x>Mz{yUpRHS@Zz)cX<vo67xdVmHlTH#-FpZEPNET*x0(S2 zC+h9fkiFK@VMne`JcLYd*RP`X#aOn>XYk0u7XAD1*ecI)$Z&9#Xr?0FqdmvZD!Y>J z$kVvYzQ;bf#s4#5Glb2S%un2CATJENG%nLN?j(>mi;K?uGek<PHP^(ns2F^ZM6Bm9 zQ$l?wC%zim33e=WmbYu>ClUVI_jJjlUz`i<Er<gVXmS;p!1G_n6;dQRB-usNnie4{ zlLt1vxXAr8OKF~~D!e(750(GF68m{S9U3@D3()|Ic9q{V9j#}4{&hq*#rYlHJ1OQB z%EXl-@$hZwmy%HOo>pY_mqF@PIWxq3OO4%u7DEy5+6n|CS{CKT40)AK(EUNUPxHqr zPk@lON+WD;#IOn>bN>G+@89-?-P`s4-xyYVJbg19?q?JuECSLy*du4NR2oV|3PFoi zR*zVOEPG!<L&Av8&MurtWH1^a9Kq#;5^(RHi)MP>fiM5V1U!o}aw)mQ0r#xm;EnZv z04zAqI_W3aQ=FKHFs#s*6KOHv-9`B4R*PfqVo?R`VVNM%y3GJIO9S^OA@Pk_irqVe zRYBUJjiHnRH-?Wgp{ReU0Z95+niAmzCD71JROy7`%HT-sKTt6v-uwtPD4&(dzDoPJ zXF{Ziw|OJ5#NP-@?JrPL)Zb}XyZt3x-E&mu$Q^`a<NMC~q-rXj;<H^vL6UZ;Qn-z8 z7{FT|uroE@`^5DB<o$PWjpS{c6JDG>2})wVCZZv!RUxajS#q)O9%Gd*OO55oOD2V# zaQj&c_mPaB<$0d$X#SckI$6qc(({tWHmi+)MYjm0cI$uGn`7wyN+6<2Jp<gi&*l)w zapA)MbK=%F=KLK8Yf`*b6Ap)X)+NMxbI6X;8@tbjT^F41dId3RFcOCw=eXZM=l|Uj zdGj+THuarE_pwNECJK^&^(`sMcfJ@#iHsyP>6d=DO!xs(7-{>ay}3JPzYQ*83R`p1 z-s)L4%=K3ka;pEIq>#TPg>p$ftz2q&f73}g4+*L(pYXu&!Qz%AfnTbSPmQ1J4>eD7 zx#OVpMxx3hI8?OgH5;09K`JN1uHBORVsThG+G)b1TuK~vN~eOrytArt$@a?)m9qGV zu(NU_6ePfu)?u9T*d4fSc6eImyR>*B)z700wyiL~9leXZ+0)doMEmvs)CRrzP!iix zxEh8;SO6<iUfHwS3q*c6%=%a>#qmI~#Z^7qeDzx25Z;d<7ehGf-n|!oounj8seX_Q zd!r*l$JT>Onq1(iOXg7em96k4>i?5dDaq#NW$gUk{EJp*19&B~InhA6&w*|gXt8gs zudGIb2>-#fWc!BiRKlA^jyO>8F~Tvo#%<r>9(X9a{sxXd@Xe5tl=iw#TZ;0KBk-c5 z$Ebvv+>rn;<dA||Y3mDdZu9@2vp|2v^ylR4sTGCX+Uy<zeJumUEr|3lHQOa~bgVpR zw>x2+2ZP)pKd0_p594G;3sMStLnsLoB2CDj!3?ke7@Rju6!oTyX@8g4@!*2(=WUk2 zBA|aa9nC_UK$QFNzK7iG^`-Io4^*MIFHn5VL3P=(_5){+P(OQqMoaT_6rjlKUj?7J zykkhR)|S3Q`sC)AL4@*^c8mT9(TK0>P37GGdg-)R#deh=c-<2%^7#%Rpc3%2nsPVs zAF<%LfO*;W5|;WO`BSFpa(ep!HeDGJVt24Y!Oh#J#MCY9&=Xah_C)OGoyrt&8_o3s z&%E2@`DNDay#xWdYXXEzvqwSGIvgitq4BV+V2_)Hu0#Dm)uvwtXx+?y3HTJ>eSM6^ z#U+ybCYWb<YVSz@J8B+w?+u6%o10vVqC^r;kIdM=31|DM#6b~9Kx8j(VRuvjD|h=! zOJRBbqXbNGH?)N@+6^>uCx&H>tKtZmibf^9CYCe=(;dKZmi|+~j`HxFNbKO+HWyAU ztIL<<e<A2U#V{TjoIrYHGLnoZY?d^x(r|K?#(d<VFCCTPi5alddwdTa_`UvHLPOtx zJq?fSjXi&<EwA=$|I`0*EU4}GI;vV2=KON!Uj=(FVh4+y>i~~}U;YJTJ4wHntRHX> zo}#zp{G9)fTICSqhSiQ}<QgpigaKAg#CxIQ>bvue&LRZ#4&7JH2bx{f4}}8j7{HTa z9-5m>QqeFD%Lm9E)?lgNKdTF^u}D=jk9h8>g;95g$gak9jV;{j)En1{kX?{JqL8a9 zVoT_4i~yam#*KW%C^i4*I;C)%A0zAm!ZlqPg7^8pN4hd~yKwmX4+Oq~(`P1E-twu_ zDEuZIOD{DKtV@jU{riKkUZpzj;mP&l@4bk@z&~WGrkav@4)(#5x4SgX5d}6WL)Oo{ zkT5H{l*gy)n>Oxgq4k?@@+1ZS3wdWqdru-c?&npK#Hzh7V(PJMcx8Xx>wZRP_&n#i zO%AeHjQ7rwqrGCKE|Ervzyh5xDRtN0!lt~+#MCmx3>v3yA&m)Z(D(|rllp{}DGgYe z9WWk!SAChs>)g6sthd}yEJhqg9b`aZTc7{O)^+W0dq3HTvX;4FRo}r418zEamrP!4 ziIxMcPMdz=NU0E-l%ERE?tz#i1z7c>*sXQp);(@YD*lGKp@p}4KrUqoPDUw+$PZvA zJD(g?8ImLqnQ7+O@gno-P>d}H;2d|`=}!;;m%i1AbY1kLC;?>BMM+AskLG3ns*op~ zs7MVE9aA6%tAT-X`4`F<0P`+|9Ow^LBG<V<((b+3gZ+TucO?D=N#+2>)qO*BH_dp{ zaB>`>XLx(F6v3U<IN8MRW-B|E&R;X*TQ2J%i3n%DUnSHZI~{`pC0Bk~EgW^@lAc22 z!8W!=kOA>HwM%~&rHk#JK6r9rZurrc^k2F@JhfwwreT!Bztr<*x-v9g{Q8aPAFc!J zPF-5^@I|-s6@yZ~_xmLNZ%-f<ymoJ5&leNYRmOet6MS(`=VX};oAjeix~s9SN9CA4 zZrHRQaz17S9+Q^bjRb=qzGXo4AU?s;q?Bv@)6TykLi7BXNU>I`Zw)UZHVbT{_4fW_ zRwrkc`zk;jtF?(27khpvHge!<wpK}%yKjYL+q*};@%qM6^xvI$cbsy4vNm5YW3i(# zu-~Kd+)&;spOg%U_PK+LB{T>IlowOFF(3du_(mn*N8vu4bA$OHSGw`zyWL=)7_D4o zXvkjF@bn0KIvZulk_HqqR`mIrfKXF(a6PBV2u=5smt(xHtLof>-fJ1ZKRI0>UOgc% zM;>mE<QDdiWVq_v&SDm?o$h;J&(qWV7v;6jx{eh2bOp)RK8JBypV~T(uqE){Hq6td zDqR(=F>h+P<=Ks!4rEwn;N<g@%teJMn3+7}_}U3#?xyM%CiW_$kW^$E4K*a$v6JS| zW{F$_hV!wl#~Vu<o)t3DqOsMQ`aH(!AyV)iy?JU9+T1+_^fvTYCc|`#7z7~LYyRLy zkGOhqQ>~7#+@B8|qW{N!fCz=Rz1}xdC-Q;3vLZ}|8+bvD**Ulrv0q!1X2%Y1jTN{h z-Y;L0Lf0VO@C@--4xQ7N+yKhVK0fwSX{<~H8O8TuxcSWB5oLRi!k?~&KTi9`Q(pBC z_IjP}wX+5q+l<=xa1TNf<(-cXj^<WYR%~(4#*v@!BuTVrWcE%U$B6dU{|EFp1GsWg z(EG+m3Nal<Z{wt4)6*#%r~=&$eA$m)Q2<yC2sKT=3IPRH$iuL@@rSo-uV5cF@Y(uD zGO=9Y&X@zKb&9O*88nyiwwzXQvqgdd-=nrxqaJ&?>uDbGJc&cqvEM!C+19NlrN?8U zrJcQ%X37fBz%rw%vlZuce}&NffkX2D6NnL|gQufMDFU;yOwuv?#&6hAIfMrN*2da# z>VXCiRzmlfL5aUjpNWU<N^7Z1r)$N-Qayx!jqDDi{zkOP%ucDec`{#~v2LfI{m3(b zAmwarA#HSX;;tiUY8V;dB%VH&JKv3^<0PV6c|lnWALab#p)qd1^q+YQ<=tWD`Hts@ zcftrZ<+}<=R7lbggsYGmy)*MG$B((ry7w{K4_a+O-FR}6l#&1G7p(<SDW18QcRhJN z1^=eX29L!%#1x(^N*x177>1?hK$LW78P=L3;4>gY#x#zHb9oMp=ia;wr9^;0%t)1) zptlkF@2S>4i<SP>0b-jsLYO~uFBRHFIQVQvJ)Mvw_2SgbIs(@jh#Rc{LwEYSin{>9 zbG*FXmnsD>(|Voybe`{>p6Fv8%;Y4(Q^xl(^BApNC{}>dYa(pZS7TIsU*_NtUkud6 zF)J-%r}{~WFZMbt%}{>ccHr7!tQS~HcJklpT{Br*C7u;d0!fSN2Z<{*^YbSZs!DbX zdIyCZI@1HHRm5!-<@$E%c(Vd*E;zJ$+>nTAlu1GSYVxPiQZgK0^N<k@*{zPpW56d6 zL6U$PX+npiy_Tmk%BBNtq_;2<Re9-J@>a^;PKJ#MJQt-E<X372L^4q-BplYiEbToZ zEK_{d=Udt-ms?vf=~O%$qL_n9e(*KJZ#L%OUY}3rTYb&Gea_tB0u`bOihV8E*#j!v zNt*M?r>NYl3TaLoC33dbW>LQU)<d_d2$(%KEHmq0l{Auc#1fyxiuoq|G`e>`YDQvL zb$b)*-O>HZ^|kJ6h{kQ*Bi**sNKe;+QAJZF8CD#IH?6X8eE3`TJ<?j*2;`)JCIuLO zL}5&H-M#Qq{&Dz`z!Q66L92KRKjUn&3is(U+oGH)D+uqk3Ozw<K#Bm}9u_q#9x6Gz zT3snI6GJXK4Xk2a_Ro};f)vW4+K(O000*rbpsVywzMGFR$jjM`^*=s(i3r4)`Vplv z(l9ZLIp334-9f<agTH+{74H3kvo6=V<&b{)KF5-0aCdf@|LWTNB=m`(1>uCy@5*2! zYngS2yG#J9SI)lxE13<T!>G__nN@kv;ROGK;X>SO76_^+A5fqvV2-{rb9Ue`hxBaM z?uF7dK~wikiukMDo^;sm<^-w6iYR%fso95}Kf8n6`Xg4Hg7SnfL;A6$ljvvHz$7wC z_Z`LkAq?><US#at*BUNg(9o3Z@j!S!F<ZVwG7ihSewPBhJnO^|EtY;YvXnL-$L)Sf zi!!RuzEAAAzM%M(_q@!6>B7Y#+>^O(&Qo!3%EutihP;9Pr)HbB7?$5+BtN)tlA1G* zjTzrhXYoZ5vqeUA`#8uWF5XoqB|G`?2wSz$D3#r`Gp8fjr7a~tudp0GB|TZZfdWS3 z3h@1&xQWoH>mI#V_;O3P&^`^siY0p6XI$|?V!ynfry^fXbu$Y3-3?R5Evzo8lpwBp zEL(V7im038h}QF{5th$4f#cbYcXLGUc^YXqz~BkdykW+khxvSH?afT5n8=43cTlsi zS%xdF-2+CU3!aG+tLxSDRLwbg!iL{h(;e-BwHLR|cOkD^`tH|Bl0vuc6N>vnzdao4 zy<3v5?a1R+@5NpbyhN|uPpGDW$#03s_^&RFRN19WU3J-qqDAEldJ)M?@l>bL&{VUs zM<HvkRHbb@1$YpNNgH_V3g|?hK8v+cLO0>Vaf{d1pxm<{)AE@Clbx7<a16@XfO)gT zczdi`Y$E#=JiQf2;cbmVL-RT)K_Ov^nTb%V5CZ%WkI1FBd6?r=Usp3;SHOr$?2PbA z)|^eL+x+3aGbnD^oO9%85C3B}JjpOD(Ly%xC3rm0$<iQ(AgpSnII|#UNy+fI0G^B7 zQn#d#o*IIkc&fd)QY$wrYV6XI-^!-TZ~CXO+?Drrb7KBW7fV~D@4S{!?#Ef}Yqg23 zNeBV<NDq-mDBvjB&bYNuZk!t}hg|J<P6UdmomBVobpj8qUWY!g<tPg;Ag+dQ1v35* z<Ke7^@#G;?q0{f=%HW|oGj2k1R@gjuI%F+F&2Y`6Unxbpl9zB#iwM~5QVa|8%j3C? zQ~l(TjKsi(fkp&7k8Pj(Q>~uRuT6rnvqrJ{=}|+)2yO~TnbBLuxJa@qeBP@6u3`bQ zL^*SEGY+4z_=pvq;Rv1QA8Yo%HU=aM4byvm=paqBOhqpQ6;0Ih;*7Uj7S7^L>k`CH z;3;#v-;Nv2zf<&rc;6#Qyy8Aqw)}+NK`bxcpxV#Z&$OQNkm;Y%V@U9Y9Cdic{Fmm- zwxuu80bKa`70k{SEPzAzj))6hXHGFzaE)0YlFwy#qo{u(RdGOD>3HhKnU@6!6V?BQ zk8E7i;F}{)NsIB<Y>X?*f(*eJ2Q9)N1&Ku+kf70(Tc!*lDld!EudyLS^w5Q5G#c8d z=>|jOjo<S^xhG!uC4O4<MRb{}<9&{3o=<Y`!JP4{5d=TVLdS^~+KA9rCBS;3*~*XO zzWqk@n+Xlk6j3Z6yD-Dk9;!@#yBhnNgSkSgZ_exq??n$&n2Ub*^}exejjm5uHst&4 zlV8loYVP}y^TD|T=ydCW;P|ZP#;q!JA3CtXFG!K(c<#f(@h81ql48iIdeW0|Xu;j( zUTyD4#M7qDRMxKy59zxXLYrL|vrwG*69_ztI9|SjWE&&Ph#RnPr{u6o$0LF@hTUTI ziec#3q5)jU3~io!lo2~%pm^6RloXAvYP8YlZ+q(_%5S4*u716;%HEgO?9iz!m!YMu z(tEp8=25+SsL8%aN=y5(5-Ny5nW#K7tXW>T4yHSAqa2$NO{U*9(4nHtWuDn;m`-zV zRfZh?s&u8SQGX7N-9)6N_TG67MUdU}x<Nz6yd!tZIc*@^?#t3GMUhW6yW-lnYy+jw z#ijQ{mzsTO{}YZTwN|@KTlUf**s!W)z7EO8JM?Ub3o-%Se}t!!D+1ZLF4#{N3%Gq& zrJ02>E+=4Pqw|Umh4#F|F<5!O1c%{^hGrho;hyp6>wo!=j$_~~{%E(5s@JINM>Ukk zwqM*!4Kv)3eYPGj=k@i*ad=A{v)9d5lI*_N%@%<2_Bc9-y~8hcu{DyQp}|=VouOkd z%WN<CeE3UFobg<l!18N?Bi?6Rg-1(ba39Bmc1`o8jKR2MuM=p9T*0W%lNo(SMUy#+ znH*(wTF8cnazdbG8$GCl<2LwHS^s_gavE_=>%E4hwDvW$wrJXbBEbwvnurxIUQy46 zYS>}f#aY9o<6eYtMQJ~44>>DF!C8AoZXlvZ{D8zkhNiuqsdaR0UhBbu=ezM#V&1#~ z0>1;7jdXKvS;|!7k}9MLeLL*Grp6q}#zEDST72SkyS5+DJqXVwMs<|9CG~zSb0e)< z?xx?6fM0H$jW}Y?tK>F2GIn|8>{PB~trN^f)QmJMgLZ96YYEBD2W9lF?+7FOwih2Q z8zJ74u+;~$jLaNfLRqDfufmBFwNr``LQQ}}&W$=2<8+?BJ{zs8je}aN)lEs_r?Rd` zQjYsA8fZAzS2<d?$C`_B8a)ZNh`E0;K8|0o{LaEieTDod)B=w?3UqOF886k=*<xse z(D(a{Q|7-kc*t;`Dq)*l`4KbHVe2zEJM@ecquR7k)FMQ?^={FH;N~k&RXO9-ZJ8!j zxP^f51E(Q5FAE!=f4)>ny#pL@cE0Zt_o<)vA|=Yc_l=4DZFeo5rCScZMuPf&>XUnd zz_NwXLduFA+<d}Pp#@*ALVy8!5Kl;8A6LW7F(gU@!2}&c-SQ8aX!P=nSv!#^8XQEX z-8Aw{F%epIL5&B>NQ};MZ!h+PZq^#~H7Sk4070R4n?JHO=90IGcKNmMp<7D5R|LHY zn(l{rlFbX4HY=>OHnN!S2D3*MA^;c-DUL^xl2$kM6~N)qa)dX?)8?aru%t1oC#mEy z3*S^B>fZg`Yi?&!(64y$#JxUjb~`U0t-9zQnpQoyjvSK?!2=c%|LH0`(G%@O3GGv% z?JN^3hwS+|jHKlAO8Fha^Nc{GPAxCBG}a^A*0wORG?gZVpSd|3xw;ZC;%>uWczW2^ z;ia3EPdad8=|q@8u)LX`tNPxBKezWLC!uzPEaTEp4Rg7okG6<|9bcDbHoO@5a2GSk zsmra@XXiTTP}=Ef(C+xk$>V5frtqcc#{1Zhf4%v+ujR9GZ!H!BJ|U$fC3a9YTm!Ud zV|m`NU1k-fOCkQz9U&D_Z{jWf^aTIxHf#9EF4;oZ3&EY5>Nt1{OnAt_CB0Nm1jUT{ z*&yMQDTZcISAyN{rgVNtZh`^I6v~{1H1vj>cCHYiJ=n7!qE1HFXy8MO@Q^~Ct6b#p z9YfBLMLtgb6h&^A{7iYK$(&#Ab1Zm|=1wj;Jpv<LD7H_Wqg-!}c`lY=-yZ{+^BLcT zlc4-TSZyOq3uyzuVb|)Y!jXJDbT%VOW=pbbTpL8)d4!lSj8QEPdza@(7xG?(1xK#H zJu_9F`P==q<N9nscb!$L42f^B{>zbX#wMr_<_o(Wi2ix51|TRamZC1a?jpuUQiQH9 zEg-^49eGL9<l9R9H1t#m9H9B5?=Uff3g?g-l_gP|ZojO5r~28&A)ZlnI*P$4djy_^ zM!E$CkV62Vq8Bh{fHBCBM*Zj)x60SGv}%jKI!6kfRoHY)<bed`6(jM|%SnsqRwo`S zvqViee*Sg)5b^{Ph_qRqsdZe;WzXvZdHcK4$zu@aQ5Q`?0_AsTnXGPNE@@*)o@~VP z$xO9XPvZ=eV5G4eJS>QXu#<m63yt%(eN-6S-u%p^jVpyI=u*|9HOGC>k`(pusBPwQ zOU4o%>MmR4-4wlaN3e8bg>P89FAaK9H$S#vPEbDbx1<an3yx;tl`+b4X4<*fh4@aw z`I}Y<RSRrIOHL|}!3y)qm|(_Z1dH*+YF(8$uPJX^yio3U?OKf>GQ||M3ZnVR?57r- zRAc|F)HQ@lEKG+i<U{n$9%C>BjcPi16w+?L01)0Yd6pQ909#zh@m{l0S=@*;(@k&R zX;;%OJn^sQq3wLXs7vbSf=E%A$j!16-6oq2c$f1{%x(LQ!_jk_Q5Ukt$#}&r8%g#I zwc4gSb$O&HO3~@6Fq_UiT$UhHo$1!!$X6x{svQ^bAgYDxIP38ue&ZoA;+;GM)1x{? zXo>Nm^Lv|!S+JN!p}n3Iy?13dY2z#ePivfL!N+T}6Xnl%lH#qq*H0tRmFpb^gP;)W zlv#9#znkAdT|&dE(gS9u+YV03zo&-?z81`+ZhCugs%U9Z7mib=8&8edG+Qj5h3_gk zQ)@Ck+&xeY%cT#lGH-;i(nR8qD5Dk><BW|F*`IGVEO9oYWpG*+*XYRF!s@$_%9T2G zF-AX63MP)IIjCLF<vg_D>!D}$_g5WU!P$@%QQ4~P-**;ky_w#RQ9j-{C0*8ry-MKr z5Hi_y8_P!|kbo*Q#WIC+p=jeEog+9vw&)Tbst*OJ#qiB+t1eVD!89isbUs?rH&$J$ zU5(AVz|-2vDZZm(X}USW#)egyB@l{>yQBpXa8qWlV*}B-K4*ukWvgxN1Nb?0c4E`n zUMTV$=KEwTd&aD@!w;TmN&G7LIU@5@V@}c)zxL5C5?z4>?Y@1>URH7GJCmB0w9Ax} zQ^0+E2j4z9J_58qN)Vgq#)`RR3@3qWICQ}#5oWuDrXL^eV~@=W0R}ma;<3QpP!T!| zbwNuLTtb^6yQK9jT=Vhh6?W>imAg8tL)&+n$8OSBX}uj#zq>Wa0F>h=D)PwVYse$# zEwJJ7(%w00w7%p(kgeY)Slz^*P7UNyFDZ3NX!whg^b$RQXtM>qmb&wIjBRuA^EC37 z;osGT$6mmA>-IyL0<D3va`KAUkL0b)xww={%=z2KF&IE2EBBIW^jcFvDeX7C0>PF^ z&ZK6m-Zd7Hu*<eLD_6hi;;_wI*6!WU53l)%!LRxvtq(8L#>UMrzAHw43iZd2h4~B{ z+^u^>H6TDL;1ZA(+DY#`7ng5}wMQ>lD6jQOXS>I?ZMAJ!)3um&k)f~0vOZ5PR!Z*^ zqzLX&!aU?|<WG#2*TAWsS{`B^XjPs3%km%~OmjjVM=^|eeNH}_b)lF7Lw^zWAlW1L zx11bHkO!IN_t2k(ibtE*T{pTr-q$y=f(k5tCn$3)ZwqT~0N{o*komUF+4HC=-8Snk zjT^$2IVnHmM5i#0-9gxMiz3NO4@)Dg@wbA()*o1RHENaQ!L#1qfrG!S(YN}i{UCv1 zLo!(FM;yppIco1SSuFj0;si*jq~%3;CD~73CB(cn7U9&(u8X^qSpyT#l~0hwy`A6A zM$^DU5c?;af<)Ok1v-`&prB-Flo0P+z=&m`{O}@@pJ)8%Xc+1ZdkjxL$((zsE{}vH zHX$lhn4U|U#_}egk4-{h{7c_2Fjh7|Q-ig1=umOJIN5HU4i6PGX<6|`_03;U!}JF9 zWtGkMPFuZF*=iYtPZcy+uR`FCJ|u1dmyg~=?|@p!th@J9>n9WFS|T?mhP2(=g2%c! z6H#~tFV-PMBmJ(8wU|lX85n=q;s0&G%o0tGjd<_P-^2Q}8m0e?!tuRh8<W#6TCtBH zvkvELZK^h8;H(vijd?RGHyQeEj5b>!wO0$ku`CiU)IxZFZg|Zt@q9YJ(^Wcnnt9&f z?J{>A3GIX7%X#{WMqB4grfs5G$6-dMN|t7CIAgc6?2(^go$2H2+vwiL@%liPu+~($ z1&P!IlS1h`-Mj_lsO6mE^wCWGa^NtbMKsYNnX08z-|6yw6()}gg~nT|C(SMsxH$@T zFmMC7IrHGgqQW_RB_{(Jj=dNl7*#U;ZlYrXd!$K~iN4bP_jZxT!TXa~5$!18NjBFm zZ~4|9ZM^i#AfUS&^rAw~L0Sh`Z{iER9DNplUr)Qc4YZevdqin&2o%|$DD#%o+Yfk) zF##FSY6M+L&Qux&pUA#=2{a#^$gy<|qu$x-?+4Ib@V9>~{Nk@}m+t2;s+a)E(7v<Y zCL;;uYbm2EgrAa-&nxD+DZbmwi*)DCs0U&4RMBxCNEPTqTZ)zVRZaxH!J$cKmQvet z<{7HjnRKZDqT$jkG*Oe+s1OP4E1QZPqOs?A3NT65f?MP#ta&ZT4m4q)1Z}z<XONMg z<Ekk1R+n!WvIsVxYGUWydhhM#7J)#MGB;%>qP-zIHe8d4%Nf@MCxpqhlFr+_%QM_j z>aK~i$LJVrF-`wV=K+Q8UltjzECD2v)*>*YVDLov*?(!tuJ9)^wP<M5CUO5vM-EIc z8t$S;(B<5~f*c?YIh7j-HbFNeo`aahJ{O<&Yvv(VVRWawo!<w?;8p|&T=^vvf2M(f z=1)jm--0PvAJ;>*BYuH&`m)`Wg1};fYS72B{lZCAkBaht?<sbLPC7=pkgi93m3kFd z)QsHw*=N)f{K#k-arq!w=0XuHDQED>VC^wTwXB{t@xP5<1Y^(Jzq+8w4^ru|F=U~P zjP7+BfLf2wBNDS!JDqe&yx4sz3%v`C)Zb_x29**?EpZx|=53tNC9X^E{gr=|?_*v% z+cimklP<a3LL>8|y|O<{QYW6+9KI%jCp+Q=jQFMH&<dj_7kUnjYjQfWB%bd%9?KcK zUVV(A2=UVS*S<saCTq4qFLUiT-Fes5BBktEwh=b))tzLJ(ONy+7NQ0CeR0<pj8DYS z{Cg~Za+~|`Zi<b$3Ws_(y6M2l+fb?`smBjUrVN3L6nY6W#F+7w<o-JyoO`#U9hZpF z?xzEF7EFc&xCUONIW!D`<{k1%hT3nVT>b8hW4X^FpWHUNRU<|`vjWW1M7=BdM_MPr z`zlasr*9$rjuHao;<~&BB;1C_AV4;5VE6zZD%Q7eBrUS-9x~TIvf*lR?SJc<x^F60 zSm_JhV5$PbMc1#zEVmbslTCU(k+tY*y$jq{)f(w8-jqKs31|cjUSa;p?sv@`3YNUY z&as%_@Gn8Iw=%&mm@job@s*O&K7p!8e5c(R`1wLv77Md$uz`swe{0JwjzjnjK^QFF zo95<a1u0FD1BPi6n0&#%dCxUMcsXR>-LsubQXH1y#XZ0axp?-I#qbX#1BzeX81}#5 z+&kmrx%DcvnwWr^ikn!j0WYk&L_>Y>J{p;zCD1%*d~SWVjaKBOZV^^OBSjB3<_~tL zSBaa_34|mKofH3Ifm+lk+i5v5zGu{l?%#yc9}XpdNN1wgvNcAWS=~V4|9GkW9Dh>9 zpV0UoM>_+vQ%`!IS8?Xxk02J!T|qTTL9An%dVB_I*0S_Y%!eMxDl^1-*c6b9K}_zK zGz&-e#nMwd+)cCj{9+W_j2Q6n@o<F0WE45&n6M}ZNESA@LJUdv<UDpe_`j$n`@)Mf zz>^TMW0t1MCJMgk<cH0=zeU)6{=83D)=#INV2Ng^=1wg+Xy0>V<L+eJX9K6pgqWb* zpXr&+pG5kOXWPwYcYfa8{cllUHia;tE7EKDaz7{$vm>|MBsTGA#K=86TAl*#un(#q z2X%(~ysr4r81O<pK0Loxf)N0GNAP=k{p8Z?cn9}c^m{pI8hA0(4dLn#Gg-d2-nF34 z?j*?A9iin8D*j+jeaRx)T!U4R(D5sOFY(@5!MMWZ>%kZl;Nj;&eVAx^TaGs9SVoQK zlI9swX$}Z^=^i-x`^qj?#(6vrO$$SSfr*@0s%>$`xUE0fSN+iyW0;NbvHl<7f5wQt zqW*i8PVEF7{0!}&bR$$sj{@RqAP&2;N|IbS&;N;(7}dql^cT)`m(txQq=-PCUXSvk zOS4Qv9Um$>H!<C%vsa)N%i3deeMozF>x<u60H|8D%D+=y_5CX;M8iu}*m5}GbACM$ zx_|l@KRbrFdV#FACoLl{ZlHHU02t3&OXbQE>Fq!XmS`y&us=m{69jdjWtJS6-fP!7 z-SDY7kNdQ!#!Qcp^58#o%!ALrAdyY)ixWv?ZiAy~{}_@ZR-#OL&>2-G{U#iPp*ENA zAVu;Ualz>aMXb}{)^p^iHK@mJh0wj6X_6?chB+%K;;!KvYR?8+$O^y0@B>Dj#tWa+ zPcd&1SB!1JQuDDL{!u1aa4a4)?r%*-3KIBCQFLqm$8(afkW<l$uZD@TwI3-PuSS&Y zmp`_w?FxIJfqn_XH?z|-@G$<enWYRq)=p0R3X&Jj<~sJUDz#}n3NE$~N4El{U7@(b zE(4$Cvi2f&$AA738xhNL48gqn=b&My3NeePNPB|cI!kVZ4}<#(i&Fh%uGRH_U>zRZ z4l{V*xK|Sag`N~GTjT=m>#dOqpF9_`57hSat&Sri=(KI9KGcIb!R_9(v78d?QL{UG z9{w3Q*jl+NtQP)JQsZ986ZebjG7d2Tpu)GsK-aNsMPL6}kli0>+PS_x*|=|4=IB11 z{*>3*VMWE`LBc*N$pZdccb-GWd)oV@avbo41tu3H!PFrKc-0)h1TTn(bSaR<A@ni` z!-FBpL1re35s+6N+LSYy%5_P(LG{>uKgq<Abs}O7Ql5|a+Xczu9wLQ%B=qrN@EKxJ zyvS?Jm2KwYm`^C7>L!17X(50HhQ-hGUb{MT2n(Ve0!iMIeeZS>Zy?OR45<j$``}kt zz{6xTV9e1O+0vLB4}|j!Bq1jfX6W764Wu4i&u};oaxfgUDV@#_+kCVD3HTixnTJUD zuZ<qUdgc{O)~ERX+q@J@Q3)%WI}mDxC@2f4-9>&>2`-f~oul+z_q!I)ayB0`mT>K| zRxpF#Tmyq?@vw@+%V$C{DS_3OT_ORnMVr-ZL1+hm0mRtnS(xh`k()Y%W4U{$de0W% z<Ma;$QG=y~7Izaz9-GW-f+U%52=Rr>B|GocI<|a54{unL8}FY1Y9Oba*4SHiq-0y> zva;C4wEB^uj*?G1vCr+Q-#xPDS09=r17qL9)Ec^60#OBTPK>U;6YgXBNiAO-#2mXG zMs8^&FZ()(p((3m5baPj&m1*MbjTxWN0-$;9E`@W(^!8Sy{0`zkrd_gA6XUE^G@$a z<9&Io2se^mbZ+)yqVq)EqNu0prSrYP!?N{p`5WFAcWocRE3;!!P{BO1zuDBm3?q`q zB)wZ1gfz>M26(nxMiLRyvTly4kvspS8=+;_`>x*oQty@7u~V$D7{lK_P8ik0OZ6q| z`=5`t%ba-FI=>r>dnPxT_!hKtBn)dIByD~~Is{kf7eP}_c?_Kem1idltYlv1?NF>3 zY3Bx(cGUFggf4yT6Py@)-npHV$99%nc|?VgI|@Zctl?<|*}zr}(!o0U5aQU}!yT`Z zsWnCZ$xt=F<4!{k1zX(*5i%q9$~TFp>upLPR`@H#wyH*rw&`3t<)V8Y<a!}hv!WO^ zu@P<R9Fer($2VQgM}5{^<@yNzc`E>WbAoLf<rs7mBAahkX#e{BKnnDCF2t5;NB88_ z-wB`dwH>R2@~KP37Immv_jP%%8kzsfVQ1h#?;aow$tC_01G6MsH04z%O(Mx%J2Y9h zj2pR8vIO7w0d9tJcNTtx-=Upq!~b@KwhJ|F7qip}t6PhbXOOC=`tFvd3DnC8ZP)}& zkQ6R`RzA(a!ztvrt+aBwPGCkW{M8LJf#WW(5Erpi7j&zoEb4d^h4sAX01f*hQzAi_ z<{k`cBS6&G5Xwc26;~AHZg@A^oul5I-<eXG`tU1)CJ{t#gG6Lv-%b}T3b*g6`W4eT zNq7)*7Uq8uST&Cpe%Jgt)~a_LD+vHM&VSuhRP##e%rxFlTS-mErhLvcj_qm#YeWD` z_&tqsNEcg59y=J@dPN>j^73Jz6V||P?yaV@yBq^-;~~bPFC|+dI+@>-5J!2-_JXzp zELp}SN-@AxnO`I_&NA?!v*Qt}QVOPOCvd*vLx!lbIEVkeW;H6nO?A*83D!4nDVWos z_X3c-c*@S1Gepsx`$qZh<aS3Zl_t6<%khAnvY{jf;-9bL=2QYrWga_U0yq)Jm=t)1 z7U_=Ceb2Hm<&RRNxeIab5cVgI4}?tA5}0=dhEB!4Rt`+!iHru7GDaOG>a8P*34^Xv zK5n*rg{tHFc(HVzf-rk(FpeL39hLrZOUA$)BbQ=uY-DVsUkp-4N2;6N%AmVbbD9-Z z9*Hf+LKKyZ7}JX;qzUai<zP57w&~Lhgr#Vhh9oAK&0Vkhg45c$nk!=4gOs8i+r<N} zyjEhB;LX<4xP8&4HFa#p%ZojWAg~S>>@rec1BS$*x5>_?`+m)!Iem|Z6%v24jYr|7 z!+4Pa&lzQ4gI5iS;XQiBJ&Tkj&z*9}n;Scn44`%VF7eyqlsLYgg(Z7aQRFpttNv0I zC2vsXz)021<+wpqV5{ZgX{CjSn0#wzZ&^fq#j<q8*SL?N%#6ZL##0og^9W!7^j2ZK zQGlEah7O4u^@;>vX`m&OMoXJwK#GaFsA&x42s(_F6YEgVqnoK$E^FkkW*wM*+Yh=w zQ5NKz^ie21{WqzRXvVz^pd8FQJ4~)uEZ2@4|7-Vc!&#O*;ELS9WS~SY_%Qi4FfcY$ zk=&P+K00`uB>@kL(^+X=jmC&5TDH>NXz@9VXj)#nHt{5(1*!8qCwed*NBJsG%kT5d z94e^7v|JLu_#qVE1qVX+$?sb9T~K$Q&nM*ucDBJb!-M)+@YK+r^Y=>DY|<FUi>LaB zT9{uPA5^vuDZGVIKHOmG_vO;mP>d}qsox(ZdDxh+$~6+=c8WYWJ!lu@pAG}h=?f0E zz~K!8z6@gyA61QMU3xRNWLgOkwx1dLZYdnJlMzS}1!{SAr*)!_HN7!Pl0$sJFf`I` z429E)sFA!qx1!>43>fe1YqdTz=Vr2gzSw#z2=edb$c$DUm4MNvrl&7_>}mDM*u2^9 z;2G*mDkiGee@Sq8{*EtD=LAoFz7&$gUoUv)eJQ*h4=KV=(#+hRWuGuThj^ZJ7Rc@z zA{jaC0h%f>5g$n+ARyxj#tu<D#LpUq<MXtBp4ySoDTDXY2xL%DDTt+U{d4Hdk1fFi zAH!Hbiy~1^L?=9;qP)&^r9jB>1oLYOPVd}G<?n@uvpG8j`fUmFP*$9bm?m+eD8#<l zbZnusRL_Np@&>~<D(v#{n_<j$$22AJ^nxzcf4r0)Hv>cm6zU8LeUo_jE&=`$O*Z3A z=|=fQxxt><=_hhZ<iNRCVjO)A%4{d{F56_z3>wQqs3blGz!kyd25O3P`gU}1GqXa# zD6a4{n#mQFje64`!tojJdct9@rR|cIL-YP!8C|ozKap6}&-J}89UG{?i}^Wa!2(I1 zA8fGx4H~bio4XYS=S0(uf2}|9kaYo6{d=wh_DcE>SG<CXkc?3#C>K_d0Mg+d>xUmz zXX|KmfSj)NU-)Z_1|W;K_3JkJv;0=!u1IlV1%|YNY#nD@o!rwS*bHWL#gI6>$dt5# z1T&=^Deo-av&M$G-ecv@3!>CbzR0Vn5i--mkb#InZRrHe>9o$zQv>hAi3tL1C<Vgo zO@T?M@nb!7Ag|r9r1OmF2!%fz==ty0Ox9QEN<4`h0s+eM3AGFKGl-N`F_T(4Y{;98 z%HkosYnR>-myk@Oq9H;flr#oLxL(j#a94)h0BN{cBKzn{_CZeENIuW2YN_xOf!JRK z6z{oW7f$=yzLb5(^TGLzw}0-8lOpe(R+t5>KCecC1IGM4MY!=N3?VbXcm3$U`O$BP z<!VwD>_LK@r4;3zsiM){W(88Kf(8#JI;&zlxDgDLI%HMFGzdI%KZIO@6sL=*7oHhQ zBK#oXzfB}i{}6XS7ucPI;x5_4oh-g5p?O>0dR{shRG~461+v;;?pqKWgPSfrNzSIB zas~XBFP>iXx)V~w6d_-{qvge&W3b-c1ammWa37qNnSIo!MWka3s6)6;s?2}oTCH<- z&BSon+j2e#ja^wBro-KLBfG6OceL1hA^jA9XiXOucY*2tY9h>c>p3ZG0#~d=Y<)=V zKO{!uReG>WfAD5>(h`(a*@IkaixyiKQN>wXv>IM0FY)0|Mo*7gAQMT;+Sy$*cZNpF z<n4+aIQyj3B}g<HR*4$Ix`dibEqU_M8OkHB;I7F5DlhQl9vIQ)3)^*GikY|T)}oEN z8_Vf=aQUXV;`kgNnR{eNE_skM1Dg|xQ)GWJo+FZB@msnzYc2DFX&9?HVkQ;IrEPFL z5jK(<qv!0Xq{2IqF!jfYH)}Uwp}IO}Mb$RAr;9qY`jG}8nXy_XNjIb`efqd&%_k`( zdr%FjD80~iI&*t>5L9$U`|e(K1!&?1l#(&f5r|iu(n0%0Nj8zaJFo%#cCj2Gk7dR5 zXyjt><KxDnoQQ_zGJOlB@0u<EU0Ln?s*5|AlbOn4%4?{a={zkF0!Cub%E6H8zK3=W z8a+LZ=OLwrSDC5_m?QV+X<J4#w<Q$ZC^`<%NAYWK@jTL%H@JrDobF;GsKX{Fm-l*i z4v0UJjktOSB%h0W3jCAZz$}jN2+}}}uP3Q1H)%%3($>ku@X~Uy?l_}mO%L5n##_t* z3+AY49S&A5f*Hp4np#O5uI}BfT14rxS?=w3m)PqOLXA2e{HVn(H^+!kG7DWtOugS@ zg+P=<98nivlbG3${;bW&xuV%6XuPzhXELsyb9D($`m=ab=Jxak8CKtZbwMkyCy6_o zDoBqZsW~tVPN)wKmCV90D&k8tvT@?+(W*p)k&hD!9o>bSZF?Zl>`%g#mUoSj-<C|> z{)Bm4#?_PKE?$Ies2SoneIAk#R=jfG3oA+1%4|97vc}9Rh&_?Fu_lQm|6%(ba=ca0 zG9IE;1|toeCsdOK8H=L%3?%7Y`&*lLU9_2@aZ}xJiT&>~E(vXH=5JI3T!$a5w3B77 zOn}@}gS^!40*hK*zWvoO{L3=jnK~UIuXeC<%kj!AHEv&2Yr*;_uFvag=fA8(Y6X$v zBiO6o394uAZtp!I7ZfVw!wYm;Khk{{#!$EX${LwEP`3|`(=d_-E|n&3l#-m+vXgrK z_2jbYDz4%k!gy0kkOKexMg6V}X0fb<9S8?oBcX)p-lE4f07oEXT*hU?78j1NR&ZcV zM7xjq4QdbvOTK>HNzX~}nnL6mq0=Kaa(>^#a4cUj$Ldo_#34bM@jKP6IMvRQU@Zs} zFZCfFj;K(xN?9@B(dV#Gj-;|+7wgu!#SvnB6wT6jHI$t((dc`FA@cQKmFlPG*))KY z>uTrBKl-hDUmNr4#3%P&wNL>nzHFP8v)A002)8-5L37-ehvNi`V^>-lhNQ{h<=pkC zQP_HtOaLlLbfMrcW1B8o)Dv{THg>+g-vgkRq#w}JH(HtuH)xM$ra9uT#BGLEa(rQ* z==4n;v23=%R9vk~9yMn9`j@|s+8^b}TG$Dh^jfH2FnNHRKyy8<+s6S{>+2~VpKztG zLDG31;ZruML@+tN0%Pk1bf4pO;4cfp!llO$;Tf~~D?kKJD6`#P!5{a>sg&?L2@@mP zzfZA3#_3FHd%w+{;)d|k$cEYc%ud2SdHIQ_jK1j@SUsSKYG|J%56v(3U2ordaQ1mB z)Y9jLN|8_Rm*Cm?7?AsZ3Pwa+2C1gkYA7G$kZYXKPXqfmH^Cg`w7mZ!NMqfqmlvvi z(LL_~*1P-#icqLKbtH@wb)h!Sgs~K!cHAOT6gPZCvWGp#9g<=WCo0&8@8&1P>2;;3 z&dMD98s_&ncRBO4)p_e!27<G)>BZ%C!?4L4TT1T<h^x{tk&mG%gl_fFiVFXz=!&rM zbS<gGrBzL8I9giEu9H_dMEJn7%8~Q^XPNnxxI{W&iVPIYxXqL#Z6ifc`C@<Zx3hmE zvBRfk-*fu4Z}0HIoqq_8B4q-+Xm$)(Qi=Qv%wzLzjCvH9;f~wu2uApY+7(cGF13!+ z#CmxQ3WS_8oN@dPdMvR1VW%Ox{CEh$7e0?N#SRo!D=v*mL0%bfhT0K?;@|@g5i)&7 ztuTm?HRNkA<U<~m{l?*PgMyaI(;P7=SWd|4=ffWAx&CLaQ0=Jc_Kk2iDRK^@DP$tH z=c^zuT?WUZE(2SDSZ36>wi;B-G$A1U{NnfcuVF81LO8YobovF&)Re}XH>Pzg$h)YN zF`)%v^7b1^<ktz1ier60(dSO9rD<&3Y0VYXS8EtgYc)p1Y{5l5CM$ir;R$X%Xk?PE zcM*piZ$h4=#h6zJTK<uMk5~2lOz^9a$$Fc!5*7u*^H&w+w&n;kQ}J8F{n5j^gZ#IN z`CxQ_QrgRj5TtHsP>)B%!}yn$$2WZbL<fjKO%uRaR(migS?$US{{_6K3Zy&x25(N| zglVZW=mj$cbz*>$=XR$M&#&Q-<X0*ib6qqQ4@r~70(`Q@I&{d>(O-fnC(fmU<E+V- zf+VT#$cboTp@e>|p28|~w&=^_Y)%96w6MG$OYY%<g%s0Gwn*NGgmJ&v1nCKtSow{( z-@0fD(M@r&!Sz+wFEYAmv?EUu$W<g~Gzqg9s+73}|H1onA4j>G55;fJ`s@1q=3Nyc zQzeKTb~l0~o{?`(b}Q>agwut2r+w~92^;*rs)egj5Htf$497pEXf2BN`@nf$V^hqB zIe^=le`JE}UmM*`iX0=CS6~u-MAEN4&SJ!qLVr%dIqiMM>gL*K$FJ{l;>Cm7cbwj+ z$a~3dp0}&*p22)h_hQ#>&i7V2)gS}2MO>AzXb-u|&B3Kcc;F+*nKrQiGkS+oCaWrk zuhba7c>b|0NR{m-HQv8PEk(0HsI@MkH^Ai|m5<r{z$Sp5F_aR$bbc1w?PT<m7I@=6 zV5Rs3J>L&ddCs#CU(Hg3@Yc$wq1W()rO;JZt)mnQE(gqic$QE)!?PNAP5Xdier8C7 zeDAznipsfQz_q2=Lg2q7<$-(^wHE4l{tmcyr7iu&FbyYh_Pmj`UpZiryx)T^9eY_4 z;---O)B!nrT4J%!8&<d3!a>?`Wu!Bw4fI%h5wWaa{4IOMwF8S1K&mJ=;wn`bzZS0U zUot_fprXmpDqX6$Vg=59OH?~~{gX4;R=0hYgdRyzLR2}d7oHy`L{ZyF)RQ8Lf8{s_ z&Si>(M%qm218DTB%#(UN+3Q?HbAOp((zvqF9#g@%`WD92W^qT!6-(`+2l2lAOz{#8 zO4ObJ<2Is1<F5T4m>RCSX9SzYG8A#Qd!&a5ZMo^1gljP*U?xwgQ1(31=M=6hhiF3C ze3CS3y>BF}&&geFNX6;cRAvk=5y9FFec)qy{4e;1wA%qniH-C?;0QD<CR9Sy>o?P^ zx;Qf~FeQs44+*cNOQOyN%{%KvdlK>+6xvpt`YT)V6D<NS(te<NOf>JOLjMSv&Y`Fx zD|ui>(AZe|FRX?$(aM$}I)r-TdL|6)N2jET+uAL#&%ZR&$66wfv_wSb89S#d+R?1v zjgVP?RvWBFISqb*$K{JdhZVj-=Tu(7_d0Et^O@FLA=g?9qen$2D%0jd#F+1&Uc|+c zu+skic2)N4ciIbPm3Q+LlFVdK)GC)HCT2BeAs!IE(IRLWRb{MguFu1OoO%Ybt*IGO zmY4l`okDqLZR>dlJ>dTXP(ZK03~)@z=z(dwLDNmm+6=p0H%PrH^4tx5tQ$BbLm=T6 z__KYms+$C>&+(Cn|0NKh$d626xHES=#ENQp`e6&?UCiid=`4!$<#i_|NXW*uZ4fug z3Cj9{{Ev!rJi_L}=7iq$rjOCF0Xu_g3RXu!^m`!M-rk`B9i@WO=|O@1;GQ4Yi%=5* zwsg4n%8C|nsEz*axD*cb2naWY;aD+!tjPu^Oih7GQPid#Touq-wK}_HGQQDNDLAX$ z;ydXLLKDOyHTum0ZG^(}V8|%aUOJYd`2~fev}->z8a~B!gd<q*f6vEv(MLJ5MB9G) zG_Cf<lnM^=D|hW3o)Fsv3Jo{%8JP#?LCCxQ<Ru5**_=RK@Qu7ACLrPjgBp!V=u0tP zZ^i+#5eQSO3%nCdhr-FNrM%35!^FY3GVr#2J~gxtML8z&k)Hkoaw|~R1^FMHhs|(G z?|#cMe(ttRowxl?&id9AY`fK~nzp<#+NR*xYA%Lf)w=@x2a%^aaTOoWlCA{WUoEeF z@J*18;GNk`j+-eQ=dO$spDAiqg+jg1V}Wh3&LtofShIp4IIWPH7A${D-sH`9lQlLp z5@)nQ$F^JX!h}M_NyFXZ@YXl{%Jf}`(d*pk>MOEHqzJ`8*&YcU7cObaI}O!s9>N4; zGBTRTu@fp*eHQvgpE?CiUTBbM6t80sY4s_69e8JY1PV47KQ9BxPK_8<IR2&HxYV*; zTM_7f@&?*07V8soUam7HAY(Ga*R%4^(@{3#*;vO0P1j7n12`$<^onfHNcTn+2!>u| zgA2Z*+L+9VMLu&BRCG+8BGjn6<2U#w4&rTji0rG1M9~p)1_x<DC%fiJcFI+y&c1MW zL`77#&4UWUN;1!^nnv?RVznW?jFP#t)Elkl-Kk|oYwz=kK2y9LX{S*5ali-O^NIQ; zL21ojmMjus1Uc<RuS<Ic7*Ca`8F%q*t4d8Bk;Y>L3K75%wK7}=RG9d@2?QukV5k-q za}_41rKyL6KRA1*MS#GvCJD;9t(<Z74s8`_KnF>D8jC2n&)as@a*i7-kjVcC4}biz zBRyQPIL_PpfjONQvUi)N|Eh#g$3zS#3~2j0o``%e{&B_&^%-uYRUQ$cz;Ec3f!v_e zjb)=zY5eT<?KCpssYK>V5OYxY?XeAQM1jWj^1(uQ;?M{=rNO>GIM9PMPyf%1I|<MS z#dr0C!er6--J0;Jk3Tvcq&Iox)nFT&43#-ce{BWk93p>D|LD;-p798rus&CUOtNQ0 zk)hjjHsjy~6umg`qCBqyPa)q)<W=(CC875zj&{E~Cn)^d5K+{6hpflz#J0+$?Q&+c za5YULmkj~@#x~({_S5OfrK6lk*H2p))|JVS*e2t#f9sb^8$V5{$@C<99&XG)<QyDy zC^DzIfj9@HIYmLgwvi%q1Uj6lBFyhw#3YTc-6w5*M2<=wp5Z&f+?a;Rk39o&o*|Ao zQ4~;~xprp7QK(z`KrhOMgtRDN(c-Hx9ubTa=)dyrPnA6%)1OVAHzBHLU}*&5oqzFO zk=UfTF=0y_GGo6nWpg9UnK24Z%XA%vC|e08v>vkr9zsDU;Cn|6A<d<_$baQMXYvz@ zE<X~=GCCO3x_XL#E&@>q(qiBHP;1ql&qWLJFVv#W4?Xl5IyPt%<<m_uD0aTzU`~=6 zZpTBSnGhpI9qK%O3GYQ5A2k_t_=!?u6L}8HC=~#?VECEiTS!|X5EO!-MCUR`??tF* zNDQCQc*IId5FDC$uO3uW3MlY1kXhdhH}y268@z6Dc>lXUZoAA$4@abS0%>WdZS@Vb z&9>$(P1(TfBBnT;GvBPp)Tjs{1@<8rkIp4QHiIEA+}G3LVoK@|aX4a}v*GJee@S}7 zP%<RENVA}{?lnfPeZ9dhID#y2G=fX=zne(kT%Zp=^e`PC6uvK)(w>xC{IspU;ojL< z>R<)zk2zIELT*8bi#VA&C$5Whdc-CxSePWVNvAUhio*a5d6mgH5TO=P$MRYMjxu{L zfiRviE)fSli**t&Aod(Ba$<d*vI}{gFl|%4aVx{;9(|&Gb+GO6FotHbAuYGdl@pJv zF`!UqNKo-Q;QrbvIP|#K{o<&BK~UV;ShI_$1McV@X0$rz2b6sCP8pg2lsgOcQX8-F zvDS0W2!UL-=d}#R#tC&tM}TNi{*@md{`li`Y_QpkpKdN~H#t~!g(ufVB_nX`^KxUq zU4JLMJ%P9%AAZ6!<*UZKl<0i!%ankJh&m@eQG6+9iX^MBP;p==6_5(1Pd%|vdKP*k z4xwD(#~};FH)GKm#}1p|a)Of+6u!LabEQWFA9(jCs4bbU-8u?SIRVrZ<iJDM*X)!& z*)@jDQ9;cq%r<m_QV~5aC`#u%Di5{Y)E+6N4vM>W#CZka@=*_}<Xts9T{aYyC=3o| zJJQwYa`N2QLGXD+*{#T#tH&PsABQzR^1estsDP<Vo{Jxjl}ule?Jw(=NLO5lx8rSm z*ZL25kfY<my%W(zlrmpV=NAS1q`U(|o<X1HtFSV2)+G}oH&ygKF%&IeS0)loL2%h8 zr`WJui<90c&6XJ@C^3>p1fTfWXLl{InZ7nibqLEmcOf0B>^xy1@=H@g-#1|p->9y+ z1OJ3bMfani17Hd|q@Ppx5GmMwc!znS0%-M(ydKidIZF)f7bAD4yoq{a(f+{)A&q$B z+lDfbRz`9Xn3w-C3Vr-@SLv7lc0Q4<#3~<B5_?1Sl60;xb*8ZoWv2fiNtZt4VUBoa z3{lLK(Z;!MmdJO3j^2PsER4J`bxu$e!it1x=6PZi!Xv?<1f?Tu9K|^$j|NEkv>0YK z4*+RMI_QYtlOKJwoib{3A-1<;1Q)8)9!6{oEP2}0u#*`B$698%T>qltmxxydJ2)h% zv5Aa5*ZH9?(MZN<7o%o$d^%e7q0=5YFwBQY!sm%++<qN-nG*Bmp!|<zUU@=xM&t?| z3n0%GwNw<aMY-HgqAva_%#}1fv+StO6kL;Xo{z&qh{k8)%j{%9`ezw*kxeY8>WTS` zS{Q)<0zPG|E?NN3pA!Rt&r>fdyhDZLDjpgNL$}VGC5O|UFpSElYtI8Z`WAw5=41T+ zhkEyAsETUaR8LIAM*?c>QF&!NM48eK;KFp8^^`ir#~iwf0iE&+d&Sx*@IW_*3y0sY ziZMJvKpfvIK{JLS8lUVvlr^jTV;j4^AnJ!FVmb5jufuPjd*pZw$O!E;hGDSg9jt%3 z9X6Wqgz~<Bfyl9>{&FtDi2dlCu6p5gTI6rwRi@m~WYEef&d!h~h`^v^U0U+W9fcKf z$(}M~=7x!KL!^vNts;KdV5Y2u{_d1iSI%+4CqMQ`(_=c%p<mf69%xBdc$9r4m+@PB z#@1g%3(Ohb%|yL@zFa`duHnRZAaIv0;1q8c+UtZi5$~)>s6+HBQQ613M{vp@p}k8V z<&ru>D@(&Dt{hNSyCKfUA3H7sGM)!E?ft0HMK!0DEed0|rMxa8%?$KXNvJz1&##_4 z@Q$6vz`3K8MXNNY7lZztAyeNEGMAX)*`jjD(#c}-gP{q{j3J8PgtYzBr@<mRZ<b6S zUK7zbFBGq8Al(*cf>N%^4t3L}wu3uD&~~ZU&B?9M{MfNxFBl(G$mosjQ_Mu3&*suB zK{gbI3LETE?^rF!%Z!0@Inc1DvKkcAzH;<Fk^j+Yc<hKGkfHXW|6H<EpS6BSO6oam zV}=;PMcC_1%W{78#MCe#FDZe%rwmQM1l*^|4)7e%si%a_z209eG)4gMs(*L@a;4)C z5c7^ZX_^tBklm6K*%2N`0^=NrkbPavlq*;M6xSwQQ#ys?zm3pCqRG$!*aPiLh4z44 zgwtpb9@QKh$jtM30{SwsJO(;AX|p|%ua`^i^56&rNtfL}NIlT39P%`E@?Qol9{b$! z9A{FNtcUa8CV3d6k?LZ>ydXyG-pKEFW)~jjv@JPP3xHoM<he*GC_|P1NZt_B%Oax8 zYlLeE;g;%PGS{b-nY45FkuIjbVT(SSp$H?!mbm=r**C`m%+k)m@_lWm>h5L?EjCH! z3{XKHDhka<*r&a#0Z?XcHfPE!U0TH{T|uOCfQ|;DW$|?-;BW<?c2gl*#;hlK=p(T* zv$U}u)sYj)X{7~fmgK***=`8y(Ib<K=_`cgdmuXBP*z((G%$jj)DFR8cvl{Vd-rgO zAo$__d7sw5a36o0;|(wV`8ByO688D_hC;}7z5LDs&-}XUIRVcQ2g}HiP>A*pI}+vX z)t2NP35>>LI|<5A&ibkK*KXg!P>9=Wp$b#HLeGpsr>NNdbk92wlL^$*I9w!{&S$l2 zlzl$T8BAocdyh^Cp=`!_nhf{Gmu7Se%{+{{samq7`p=<UlK&!Ra)^q%Wk8y4D@?N8 zZta)s`IHu0XHFk7rC#yAHkH|%;2^oe^j`MktobrqC`o#~Ueu6t4o|xeN?xBY7%W<1 zL816j6t650VJxR>)Ji<}#rwR8gqq`cOrlcyd(cpQ^0exApzA$rBG9DKNSH#W&dVqA ziYim|>|REtFI}08C1?D~-AO-%Mo{R>QzYX3q`-fj%&PYv@dPC?TRuLgS)y8^Sw2qW zk`ua@K$3oi6IhP|#(vuBsT4x+Ndx15TVgI0gOY*-els4WR1H!0$plLBN|HAy;JL8? zp1~y@4KjlPhp-qjR5yl61<12p6JvO+m2JwGaEL)Fv&&=+ZF7!<3dKFT5|oLg`N-u_ zTvn!Zy=H{l7Z-(&%eU%btiK-7uAj$f$C_Xh3Uv#KG`}<SnJ{%_28C9K2#}wMa^;IS zN;$xT(bWeb<}gQ=dEI(kOZdVADW@o(XTn>CJ3Or|K#CROK!<ozoLshy#=B^UT|0_T zjXKPdfJ`4C|4shpw8<?B12B7O>$)0i;4+C^S0uLi4+6b6rH_4tx-^##or|2)+^XMb zp)Uk*Mg1m3P45|B3dNykznli27qB5Lu?&PRn!aZaMuHuI(aJGse#P02#7NR$1=0AR zVxUkFChGD=arb7a3V))3nBsxla?l+Atp?laXlkyEG*~1D%<3EpXd`A$xJ;bRL^Y@i znL$C7rINjap*)vaB*yZa0t~|G^sj&!@CkH9P2uleX)B)yC1M$rM_Wcr)c9DWcU0J! zCM1^p=)=?qgU{Clzn2Fzbgn$^b<ZL4@2t|10K)>3iEp;s);xC9QSDbIvX9*f`Lk-x z5F>A~=l<}#lu48sf$C_9*O>;DXW1MLO-EI?Vcu4bTdJHJID9rl!pv$$&mD{e2PJ}4 z0O7TU60mmc8=^9%^YkW*ZdTF@Gb$gu_ISPU+H)I*@zx#dj>hV^EQtFO`Lv`rQFPkB z5)@>4Sbn<puld=;g+hNe`~i%ov|p*~=k~6KMmj%ZPLFiCqd;}_B#Ri>l}`4K%&3`h zu(!Qe%FX~`JDLpmIy%0e>b1ohlg@S6IZbsDb~7}+Y9Xl0dFB7eMs@4()Rt`Dll7Yp zRkGORdb7XH*+HH$M*-as)ilwC^;%B(iCm9GN5}ZImLPWUtvg&190rCVSEl~Lbvfww z@jv*W6bB~itAmY7K)e!Q-U|Vqnpd#0;Bg678t_XLFi(Y7BG4GbKs}Rru2`4abz&X> z)-x;b7yy}Q^0ZVZRYu%`cY=okVh<o=mUpHUNl;z0yCTATu+ob-<b!lL4y_nf|B*DF z!?H|}kT;Acm?$XDikpMtCvs7_(Pauk>F_+RN@H+!7gv9~j?R<GWvQ`iK@q38P%hOF zD?Q{&KV1HgEh;ZEFn~ejrpT%F?UwZPZpQxMpf>}rc(tE7$;#EWG?>@Tc*FNta0W!G zY<LIWPWfRcV-|^rq0B%7d{C;dTwh@^x2y>q6MCN7sAyHOaj=r?DxM2y&abhlJdJIF z%SA(8L^UMWIz%BI-))b~-BP8zCD<S(VjeVvg(YOSJ{>_?dzw%bK{A0d@T`wdl>;KD zsJGN|ix8?@6}l)!u2db0Aap^<{cH6J`2uc{eo3?OlU98Ig->Agw&YANdl|_<u|x+4 zjf7ykI=S=;h&nun$iMah9T{+QHr1gb#xG$E)6wqcBvqc5+{vI$1419QH-2c#()s61 z+{vF_v(v)HJx$|Q8U=>J81*_4N!l7l!wJnoU}p9O)kj%M>TM~tN_irX!I?U8r6)XM z!p3VxNEM49Dz9e7{R{*lVJ5W4CMV{#3shdiVD-Y(un)~U&rCsMPJPA}PIssIs?*$h z$%dZH*RD!=YqSY@UgN-#bNxzW{XUh!#xoQI7IPp?uFZ%juGnjIId5NJPCrPA<Z==v z$zu3s)h$ZbJqiTvPRQdXtGQ|*S2Ln0|JxRY9t*IBwG0l2l%q|?<Lxct(;Vfztfr9N zcWA&_)rBg+i3oi^p#doO^PG*TGOb&=qs?zJrF-YvwFL8H<%DmdXN1)MM7ng*8;Tx~ z4MX&}qxJM8W7!m{(m%m$QTQZaM1jB*68?is#{&$iXB^iZKm`eUwnd2A4S+J4Q;0%t zGFfpp9&_GL77co3@1OUg<h?jkxE2iuu@rGRU6j#&LD=v`!;R%zEJ09?$C#^t-uuhz zW`=8PPu-l8=j<#m)_}Sv3-Z6u_S`}s(Am>6cPih*nIeubygn^D0gelp0$#6eELt#L z_xy-l%@pSw^<6PelxkJr;+hK_ZV+w`)Hml1a4M#uF9x#md?Rouf<l4b!(yTtVe!T$ zHzvJR<*poU2ye8k;kA>5a=Vb)^CJ?J393h=lZE3d6NV)_(+_&<jQxiFH_tb@T8o0y z<1pnf2~MKu(K{(p+|_9yXRtglL`s^IJ)(}h-mNjAj}dZ2)7qQ7(x$E$Oykq>EJt%! zH~%)5H^>lhmX<y?vEX_J+}Il92Ewy(esF7%*tB<Q(!pCdzcxbb_ll8vr$>2z*{NvU z=A7lwk4XpR{Vfy^1)a<X#{qwj2MZXMUQ(EBb6z7buje!F3`6rCDf4s)@MWG+#fD^2 zZ+-LMD72=sRN-YpYsF`Rd8>moL##{vny{#%gWc%9-^B4y6rQ~QA?m45h$3Hj{=jHL zQ;|#0%~l{?C@f4feO^hyiDvJ8NhrJI!679q8s$U+rj{biRru1RmrGO}GuphbANweR z`|=Kvf4e&#m<+>s!Q|#;8Q*i+V2I0jOPV;K@84@0EG?&@;^SC4N{;C=NodG*TvC!q zFjq*wr)fYY6uW4Gh}kkC1O&jdST7XlDWXTohp;5Ke>$av5lL*L%wr{z_9rtP)+vc2 zfOg_2m19eqz8SbRnRL8S^VWZ(U_{~Z-ZnZ1GK&XGAVNMgIy?uW0ObzCT)+1#l+Zw8 zUK38IjK$Y~E&{<i&hmdkN|ej#oTe^eZ#>K|7LWTJ^1p2|ePkeH^Qtx4D3Q6&cMuT_ z1I<O6v*_iJ7B#00hp<W+y{<(%Jb$44fga^7B1)-s^bFN~^6wcLhZBzR9-s+|IN@3< z9@8P?&RJvc*_J2MwO|xN%}dCPO~mPI6B<z0e;*Opr&jCH4b`A1Pw4)f-XrGF?+i*v zpICoQznHe`qKtp`F?23Om5>?W^pV>%w+GZI%H9ZNN*QzZMmEwirEHNCcZIt}EkSfp zE)`F&R1TN_zTb}nn(?no*-Nm2j*HDbX!`QBcc>98YVF@F-HYq9OxN{Jll5I9e?$iv zF(3Jt^vM?qi6}C97Ul$EmOMs>3mUhjYjv6P%I3m<s`{r%8vIn|Ujz>HgRtnvpd*4J zDAP3I)DDxJKog7xb)M1G$F0l-5o4a#O4Vl^1aThNXLWCQHhHi$34+6g2|=T%d1u9p zWOP=X8D`$2pH(&tt&2Lu8%vZ+=VUFxlKdZ;JSeoKxD3rBRQG;Vr%F%f)#!wXWU<v3 z9EZ#a0!PFr$&3OTFiy(y^2hrHuHkQbzoLV^_J<+K1!c}y^x!-oX$ZSKa|R<?z|uJF zl8EB02O5$&0f&1)T@Fq=A`s7vTWz}W`BwZUJ)e;rle_2M5wPbmxhx3OO#X!Jvf-R^ z$EI*+S^b;}QY=rtsW4hDB0MUkI4sr{vK4O~r2Z2A&dUZSW1cglxzRjG{*Tb98lf19 zVLAe93etz7B+9(n){j;&1qUSK_3Xj2PA&Y)x$hOzwb%Rj5e-i&O#V8tK|@5g2tqR( zW9IXALql_E<$z~G)DMyM_w)1xLo`P=(*ert)&tgq6l<Rix|4bIt_D6x$8_!HhOBaB zR};|u%W|JS!LAJkX-dP<fJut+P%kVH0HrzCzx=>zFa70yoXK!G@+2ty!}-xI7$^^t zpdwc$OVIWM9TAl1qOQyv-R(hq+rszag~$z`dqkQ(JQv#cqTUI)`8D=Yt!9ZMID-F% zrSx;<r9*46S{8vU;!0j6W{3_+&wak+k%P$ihICor_sBvMuqE>4JR*B*z;s;67-_hO zQ2bs4s=RdQ3N>EttJ!g2k@*M(BcY~%a|5U2{+R)rpP$HR+{diRYxd>%`MMbfo8$R8 zx{|crFkp2sv8`oU$mh#DLMX<gw6zFZv{>G{y+LKgV(&~eIHU<>|MPvkYf%O8S>Ve# z{Ck5Xz%jT)SkOYI3^UJ#K&gd2hiXPzI0(Q(1mTJaUTQNQOC%kktPBI!QHm0d7Z&8s z>y*q{I>hO4X*hou{gZusnDW;ikOQ7Uo#MFfqJjv|aL%JMx`)<phEHu=e%V0x6X!ED zpIiQq0H$`~wkK-*ZyMUJI;gD5D$8Dnp$;=e9;Ssp;sc&(-(=4h{TexphG<}7=O_Hw zMk%`V0U3rz8E(s#ykK8w$gm$ehE6KBghz!d4ioI_i2BUDjAH=^g@xL1Wn3kv`$IB8 zF`iur<EM1u(z`yAaNqKTYw_iF9=R4F3j(3{oZyZ8wU2KSc4_Tb9TyJyamdh<WX_Vq zohXAP!{GW4aidHgDF1%v^>M&dTh_xwOZ~Uoz`Io2Ch~H4zgS47BMI=$8Jdo@=N<Xx zbjN<r^yr*pRB2IMgCj5znr>`&&N^nojkqIZc(S~hK4bVjMx;}8OEiS?4<4quMPNMN zNB4e=-qiHj&hn81@W!bZ6a*Z$nNd>BsLKqFR#1+6x?~Q~DfPpW(I_GAcs*CALs?+X zm;^Zx>S@j*H1Q2KFPBU57uz2diQ+~4d*uJPqyb>pM*|+~qlbv<Ib>7c*M^I_39mC9 zhw1j{GNUKS+t@+!G(2;i(TDe$90LCiRw*br5Y-h-)O%`}XU=FuB1HBoiZtIjIeD)k zNR$rGjH%zsFn$vqw*U;&62+pFZ5V5NzGg`bMO%f0JaZl%AoBYkw2(sxi~KWXmChJ- zbR~*7&7+Ap7)lCdQc~6u&9OYJOQQHYxs3OSWBNTr{`nx$zSV$Pd3FRd677WMrfjXh zb>GOWp-_<Io$5wP(#_;I8Yt(L3{Qjw9%@CRtcV^RsT6d|8ND3wm5N3KpOXqTyoa<L z68nV<k|3QaQ)yBqKnZiR4k47kLyDQ$CD!){Kx)0?9-L_mSOtZWCUf4EBnn2lj3Nsj zb`-QMisbT4g}Wu56TGU>yZt@QdsGyGF1&6LPEfWTZJc}h8C~6T<>R0wS~-#!I$&mu z!Xl50%**8g@;@zErDGe!qSp2*AH`_!bfBW0okoQxYhQ^nXT~4cFO`pH4TPhimm@-% zRNizvDm@-Yiv&JNdRGuXIX=NNxr4x>kVvlJqaXs&ZC$iu%2H4xrv3?*+3mKK#=z~K zlqRq!tsw<yi^9gqSfn^(r0cDZZ1idZ>oe^qWejc4u~7!{?HiONvl-vU(21wP68KC^ zNK)gCTwZD6OqsFqqIk))`GBSo5+xiZ9?DhY)1p(r;dr#x59tlU&!`X@ej>u}g)9!L zQvjuleV;h_gFbF(&m;dlSNJUq7A@NbK`N`QL_cpEjIvYSo(CsrYRfSXp`q`8#XCBV zw^4?``%->#c%vSrM7OtE_Rrf;olJZ&ScSzZuZ&2DoK0aj+%c>`FJ^)1ap(#ghq<Q( z1zJFeF)uc>U`2y@X7P=W${+~tkp&+Uv;*Ntst!>_UEWI&hBmB)N*~)F?-ja+MWG<z zI}T~}9wQ9~Wv2oWv>|6@3nUR=ZdV2wZpXh8SRC#-p%<$w>d7Kfz#GeQyvk4(_6G+= z12j5iQRv}F`vLM_sx?qor&}6eo<peZJRd=j_XJcTbV-vR*Pr?xc*GeMBIm)z{34#m zYQMSYI!5?ScZO%k>m2w#iYj?|98aw9-_;~g%#QhhA+hqB2R#?AtOgTJT|V^S+K+%t zXhoQuF+vZJ*ee@QbX{kuH#kiQv!?--pXPN6^LSuvl3@zVVRbh!sHJ0j=lTHBIfleS z2!y8cNxK&>0MVOPTq>!6hr^c%*#AS`iDFMsi-rgcU+jDK1_EWK)gR=<2{MPe01s-O zgr_-;#>Fch2{g7csaF!jNxkS``JaX{k4q#bDDxj^sA>9`l-^HEd27G39_|s_y*;Cv zjzC7NjWv1ad~moB@_i|wuf$WI>+L{Od#$`mjaG*gXdeF?%t~^v3_2v_8LQRV=fh*8 zB_kwbVv4(GK^Q4i0zEISZ1jF(J(ONlQh{!Yjdx@)uDU8KvC3wsskxBh8lwZVcb-k) zr4G2iPgk&TC{E1aC>n4AM7EBv1nFxYo2K=SOK;4S1or%ebRk;;?#1dx<J7L%(t=kj zng{FK%HghF)<x{)vg<4LsD;ie|N8CkV}fyUiS<Zn!|BV6mH%{Durxmm5k`K1hLg-u zYJJ9@@AbJPOo#HOeP3xT_}R&c;|1*B#ut(s9QS2KXdBw=m4pUpgaC8`K~4}1ACt47 zo%f1mkbj2?r3s1RmL3n%MdUk)XX>o<GErM8bVR_->n%*DpRpamee$)A{YGzu^cnt^ z8~+^p7ma^23fk9VjO&Dq`d<d#Qa+QklAbQ5DRDrYFl9y}8cN_z!TXGkj!sF8lo^=l z^H@}kWrt@X!RXYN95Nm#{}VqPp@X%RGtv#2(`md^hq0#qDNEg5bE%HWcx?o92AI7e zSBBC4ZyE5n;&VJH{(aQHqVf@RZj-m5Lz#k}L^&|I8M^2~6HDTas1k`x$$B&hQ|8Ht zRzMpat?R5;Ccca&3|L`yb#wTTcB0Tp&^TRsu6=WC=A$Zz398X(#*_%X<02ox1Cq2= zH0F&r^qyQ<y<)07$jAo_UU}sc4t#<*fey*MLG;=puRz{Fuoqly6A{-=tO=b%1VRYT zii-k(R;()%d7kfD9P1!G?dVCmraF)OZ<BIwZ5V6I^`B|TW;b*-MIS=d;TlL6b6^*@ z{%!n0gb{|s$h~F8{(=5%{KEDMjEwnr($zs)UNNkiL3x<T?j1ddh^#IZ{81)E<h(yE z91KFXyw&ZnO$50)htc~C<yyP3GZq5nScMId2^y4v$WaKOQ;}ZLYv)xT8`v=70MUm# zW_%dD155QL>J<@^EDBLUa_`vX^Iks+6igJVWIF=@Mn<4dwGL3fMgs@q$6%y7MH_^k z?EC6|cXv`BE~y;N)VCRt*Ac2yyweuWa%1xCR?}hqqs&+Vn%?R^C;u|Z|JhMVMj43! zo>yJRXm6{`)MdS>zuE`X*lU!g#KY)GdXjHoMSSJ)5k=>{T(aXIfw~o*B;zy7L}@n% zc^PPK*hf#9)RwA(%gzfl0-G8}E7&T80!0DDds$jZvHcq;Cx$|>P9PvEOVU-mGgA24 zk)$OYkD!b&hUz1XwLTl?LP(th28HcEZ>#CO0s_U%nbPDcfF>Xfms4s%De5yV50xW$ z&$<cJ__FeazSH{Dy!}xh)C`6YIw<S}5CaUyzmyn90SAaZ?YdCG87_<_gnau_h;TB+ z!Q5U+luOqS=ahdQj!Y`X_8X6E-&R&09P4eT;oM><wrI2k3~)h0{pkrz76<^R!pMz2 zWqTWF16(AnuiQt-f<Bh$WaD!!S0e8RTou9KJQFsL3hk6;)aNE(ngj?$;p}S4-J?dV z3PGclgEdF=Oh_K+4$Du$L#Tgdh!Y|2go%y{ij82})E()@v|H*2sr)3bHMMx-Qrlg8 zDibJ7H=+{`LIJ-N85(#<NiE2lVs2j-)bgrfaE1Uh!t9wv5S^l<lO}a_635exaA4Fz zp;VqV!{Ys}gg$6n$s!J?c1*T990$sONq$^k=`2uICQi-0)j1HZGNMlFmQWHLzbb$O z;h!6CM6HCnR-CdU$BXEU>4=cy2Qt2Bt^qpK0**S{i36>C$BT^`8c<jXte_I0%vp%d zeJssG1Z$=hXG@Q4$*q#8mN2gkS5Yul1&h%Q9mcVJ%|&dAN2vGKp!|kw&Jf<pAVl`T zqXBv>e(T&Ty4H`%(BOe-#M*|C8WIMc7ErF9`PBmkn*mDGp0UzT_GgDd5*f#GQ<U5? z8z(Y26GCQG(KvN=;65rx`4Hf_CQq&MMys}8dmDv}f?T#|?8w1_&De!@sSS1>`PVnc zG&?xee_WlYO0;c#vbJMmq^7b^8P_Z06Y-}t#J<j!#~Z&g<N*#~?=&L~P3J-}Cg*`y z$;fT#o8M*pq3H(Qici6Fq{Iq!LpoLXjG=1*`mB0^sF<5a7}1c|*Qih=JaY{r*mz!< zRgFl-^wL^`jUcKnfNPkeoB<iiF7wfw+SUovar9SLo_GUG{k6bEG8s>3-&jGU967_h zW-S`mff7~}Mdx}40d@V<&*JZq;)YjjkGho?=JmvxAi!6Uv^p}-MWC?7WP?FwAS5Q` zLrvGUM=d<ci$y1%KvV!@LogU@Y9fEQ{1^J@_@FsPRNG1Q2qqaFuKJ1Fng<;z^Gl*5 zp$NRbkq}uT&l%T|^PDuDE2E_q=Like+h{r&9hmCKH%CG!=thIVRnRGjAZTRCh?ViI z5zOLJ6Fz3o=#4lc?`g3YP8DERHqhrDk#tty#`75JQ0~zTVo2ENf{s46by)i8PWSx} zt{bJCb_$!^xc$?06USe8fbE@59*PM>CvX!2ZpyIXkU)~+M~_NENz9#d5-0)wV#l+J zucfOGV||(v1`bu5U#K*oJmGVaATNP7g8F*J;B0kE=bYPf%l~o7#E>|=g_*X-TO!l` zDQ+5xz#*ZgkK6&E!JxF~<ol?l$($#m*4N0NkzS{RYx*tf?KavYO}A6S!Y;CvfNyY& z55$2ix*9iu!NwpjKuy4;XL_PUnKbikX(SRW{qqP}S*m!{cwtDXSAOD_oUk7g*tb5m z&0|q9U{JEtvPH*$DmIByBkUJRMkTo!3H-8~gU}BGSe5s@9C|!@jqXGn=dFq}4$+ZE zXLy>@sINHTL`EKGCrgg|I65uH?_PZaZPGW7rYidsq?g5j32oH5<^RZJVvCVi^Gc-X zjOwJ0OM5ZOoKgY5b#qQcfgi~k0+1|wiM=tyQzfN1XTdJG^0_%>ikUFl1$r4QR5NTq z(Fg-t9IPXElqILJIx88jLBL!^6fuKd5OLNtBNm&`4FLcht*p#o)Zq<KWtI>77b=k| zhg%p%VL99C*eH|ju=OiERFlTmaZ46!2Rh{rZcG%eZm5&`ekaNmqVkgE5!ZK4_FH-} zCnqXyMqaaOE1h2O{Sbrd6$$m5o-;Oqs{ASkRT&{q&l;c5@Ubmjgn{W2Z}(jCuga5- z2Xw+*mDN_tO0+h4PWAK#0^VigO|Fc^AP<E43oLhM2&ndrkaxy`2az{GyvXJrsdJ6Q z<t*2Y=ET+!qpY!Q5u*A%5Vw2_iI7kX7zHDT+Bb*n83zvv1hF=bj=$>5*5KrYI0|Q> z!?Um(+htF)8=`Vn2ph=8&fWaYQHctHf#udG<3C%mUHQ^ZASFAptmZdkK<>m5$5V{g zekF*uKM<3L`r#72y=E)~Cfb8@qr4|bnBaaRcr5;zKF{iwfsQ^%NTf<B3OPd|$mc?+ zK%)2qPJAASibE(8%GoRbR4nOmM2?l}s%8NQ+7X_$``U=6tH@5s5#!Cc>MA-4sM8{E zcs0i0K&uQ9+1w+wKDH%Hri%&E<n<?~t96)Id4IsVTSHi8MAWW9QFJfieTzhR1}Q<L z0H~aBQ!k_)`+Cz2czWTIh?LB@h(pO)Nw+rCd7p6;;ix2rI;l=Xz<l5}(}MD<eIFI4 zgmx#$FGMaP(E^ID^$g*3Kh583nJNgzAD(HSva`TBx9HIFl!Q5Vf<Rd;vRw3}sFzFZ z8%GCu8FvmG9V-7^9g5>w%B$_EU1N(j#NLz11v<V8lC<p-XnyZAvB%TWO3R~;dz4MX z;h(Fnwd<OW)wzRmB+5&H_CYCRC|=^@Jq>__px~w}c!DC}q$p1GcuecOOo)zJovH%D zRR}F_yce;?lc%UuZZ@dee%w%K6Vf;Y=~olEtl(9(u$z_v4a4l%dW#q^AGdev;WzRZ z%4(VRCB{5Xi2Zd$A+(G(uBgd|`Lx;7;Zw0Rj>eAgJilaub1wOp>gDcH0=E#1?V=Ou zB^oKlb6{J4WbdguJi#zGFAH^|81L3UWViS$GXljJ8N~#N-n2YgKXG-{-+gmkiekVD zXQAve79tmOCqymg4Im+Z^cuUoS>yqEHM((OM<(_0k;r~;@Ro!+zFSvaNnL3YH?fs2 z+0tC(xzF%6b`J_I)tQn+q~Kzqhp)Juq6Y<8OU;!oQ7>?T_XN^(HI&}KVEN3HN5Qel z8ogks16^JLbY#?aG1rU}Il;8&lmFuq3Y#3~YD{WW?i?3ZZ>ZcSN*O(l$dlUO*zV2o zrr<o02e+zkpKc4hWp(V5c={4(#uE{8Qkc62W8v+F%w(7o)*$t*>6R6b!@xc{LwVjF z`_AM8`G3qc9^-sWfJ?InhEK(??W3{zuh0PvhbieSdL+#?=OOngNjl!hB*oIo9-L?h z91e*%lQgs7OV%>f50RkMslHcWrceaBgETXoAn9-}2SLsiLGSSGm;b!aZ)LDmh^6{l z9q!%&Z&oGV^iAV?=k>IEiH|FQTi|IBPfet7${S?O^T3ROA>XBS;J^{Xp)4QBOZ}v6 zr)vF;eVtPke_U><R74?XE2}*dLIdOTfZ@TX(F;@aOxa{qoOEKt=dIohRJ_FPY^Y;_ zcHWOZVBJKhMuGJ)*=||qGgW2}dm7q%#cQ|hItzq>;*cYj#T{Nt8#QtKr7GhLf*$dw zQr(8;cvesYzb8%-1C87%5>eu)bAu$Si!HO(=TS-YvKQO%aQUAWP#iM4a0|iMO2g)) zMdSm=HYZYj(d=x~Ptgi{t;~(*<Bsr5d!xL?^36d}oWYf$__RHdD%%u{ndEr{*`_S0 zn2V2)u~6}|SHvppuF~GSk<LhDiXc%7E#%tHSZ6#m46ty-q03M!$({ErK(~I~?zjYH zgcgc7Au+%?Ayjr82YDTX7Z;ojLHW~X1iaA%P8xHHlNE9J+3_9E^i~;?E0lTeY9F8y ztbJ1f<e5m!XabHxcC0)63uEV+rdExxMvA{J+z?*|&D6~S8-9#XR0cS>sM>Gmk$<L~ zH*R$pm+6-79Ll#rstysy+eD6i2)6+QzLCgJ(57Hinp$dELw_j;F*V0Tl);?LB>FBI z2K^V=9w1`SdJLl8SbY!`w7*7Sug@?daWPQmk6FQK!&XLRPoOfcINH22LDDQ=yf$G* zOKpV<q}gWV-SRNiep`+(nY@yweaMvhlyckpy4i0qBpe(Kas5z*&oMXlE5Rl$APn%S z<Dht&aTB2~Sgl`I^cw}4yfY+ZLX3Y{9yMD1P!!K9UJ~jBzKvN6&;|QFP=OH03Caa= zD8I^KFXc&@<mzx9`4`u}#{q3Y4MU#{1L2~PqU&wmRNGpT2(;a$kzCMMP4|PLaXe-H zCY}D1-hg$Evs0W(SSXXKPa}Ha-jz8J$CQELDF_SARNOHjT0O~=&q3C(oZUp_KZCUM zkTr`0Jh*I)eHD%bq#4g`yPuZwwyvG;Uz_wDOc6__j2MJ3!$)A1D*lx9;A}4O0w$D~ z+q`sC(z1_l;$OhaRkx6?-Wv$p#z!c6#eGqlBr2V5#?{JdX@o*eo5c?Wbd^*p=@9vM zN3R?S=$yy&SzF~>T*eH_)*pXl{o}U;%qf=Q2rxQTqP*?p4a^XEIrRMLhdn8g$N#^* zHvzZoIL^bW?wcJmSc!!s0D&a92(&1YkY#NYVcD`o*>d6}uwy%p<jAre`|}!aQNDap z;(T#zXR#$~<EO=zY0DN#<+CKNwn%6tMG^!+kpL+S36K~H0}f{2=e>I?XX)zttGfH# zJA-X7?=|q|o~66Gy1VMHs_s7LG{zFw*qGgU#L^j_M32ljFLb~pxF*G}frB#U>hzvY z*&d|h8_m1~<(=n?^m!tycn@Q<q~rqU^^4xaU#MqgV3vidx)83)#WmtY;BhYzBC1D{ zN~7jg;aFGd7jaW@p3jOWRscQ9s@PA)c*zk@K_Bg7P(o{_zup9FW{R&8()tPFgylLa zfx-&<kMBv_EU8}$>|c~P8$YtfSx3gt+2Wj}RKPZ_QvqQ(mh|A}m^V(jI(c`xQ^7+q z*TB<=zsvBAE0Gf5FtaYAV?Ff-`tY7;S-4Au+vw|YUgAWD_)O(JZ(L%B_-o}f80PWx zx!QSGcFL~>C*9}1D91@8d)#$zwB`)dj7d$nm!-P0)bi9KOn-feym4tfL?jrNQEsdo zT3$SPN5;t<%AV&bw3fh9IUc>E2J{5$=8{gOmMQ(0=9pi(X|$)~mUWxn9WJH^ZM8>} z@m&(_Q7UV{HZDH42>q-P@ziV!*--navc(5pi{l=z8D|WY&89$pB*j%CUJ$vmZOp7x z>?ov8(J(brs4pn-avIAFQwee{QMgi5FLY}&+q%qd^wk69{5~K(k5tOzid-=_^0tf) zmP;k7$~2`QC_@0k%w@T-rqG_VMp{IZ(KG<QZzWemuw`^BhQ!@ZJA$g?QUisH)&JmB zY=$IB7l!Yj8?Kps9wX1`DZVJ*@%l0zTKOvU8f(mYjZp_6dK##4%WxnCyFbIrC11r} z9P$bXFIX!Y7(K6=)s0$Hiy+bwqi!bqI@wq-EH!{AQpw9EQ<EX-6cnyg*uu1AV9iri zjj1fJFzF8_``eCe%>zcGL6!S@W=77;9~zH}!5J4#pd1`GBP@JLC)6#`LkyrH=wXg^ z<n<UPDyPkY_Emu)>QDM)LCfIfU!JV1rvGDq&S<$VU0I2P_iv7sm>%%>@=^bs6juze zz|XSrter>PtCY>_k#%epyr$E->f8ub=(f|WnNgz0QV0Eu_C}a1^eEJ2)U~7WiA!=u zYf6}-;zp&3$DrUD3^q?<9-sTbd2SvS55fOsF1LibquThUKPQ|*)4O@l<6h>~r85QZ zycRGeTa~(Syq9>A5~g~rrYK|7jx0dNtY5JnPsc}GHSm#Yxq=zNycetg3tAOiu85R@ zHOZ8S6Jt&hyT1L_p5_;tM91uvMO-b%lY?U;OJvhte2R{O6!}yK%iUt2!_}Qzc5TUu zSWP(bdH`Uau%5Xn3T{xQT3N=zky!0stOxV8=u`k^b2(W<8uzuQg+d<1aM%OSAm(Vu z*{*@u5;b<dSsG<UCczFAtFchtD&jzVWhbB!&EzV%nRiq~JwgwYCU_`~U$JXuvJXSw z;Rc7veigX2OvpViI$oP;8*e`@i$&Tp4uGHGY|sz3DXfZYG$=PP%AayH7!qW{`7t>z z3N%;Ifd>9c&0(>;Gg>a&ja2EVg|BRCIyi&2db7NoiPZ$RMK98w1|{x4l{?#fJ5F@^ zWBjabdZme&P}<YjQCZBe1i!g*EL2WymYmpOL%8!9yX$VTw{SpK13!DPiz_rH*&z?o zn2%}Npsmms&7v_f!uGc!Z=s9P|LKP|ugo-<%h}j&d&%S|U*j`K=5VbJ*1iV+i?^0X z8(syaDDP|H3YC@sw2YgVqgl=QhL^lkJ5?&?7;+aGLV2!O;ftxU?wN7(ex-gr%vmh* z8FyW5t~BC}<oAFr@<WyS8h1&vAkq}r<x`87#1)mmhmlO9NRciDq$Bvs>P2Ie&8s>= zt6Z0f{OQ_4^F=T)IbT`-s}91Io$vucO?g2*Ux-GPrwBGKw19lVz$~jT=%=hK<1`_s zUXEtIYy{M)D4-^J8osv#t&x94g;_4R?7Zc6eM&8QX+*fFx|&(L@>0L<u}E7M4XD#E zUTXqcJf=%?&I&mM0vZ)KP?iZAQ)x=!Tb@{~W|c^)QeKvnDX#O1*HN~Y)Um4mb8UCm zCP;&rEu0jNJL%v{ox>0?EV%bMYf(k>#E9cB<Be57eR<T;mLa%56)A)M&zeM}RaT}m zC~cZjsz_8;x?awiR}93;@-3mbS15cV?Pf`XVkBi5BRR2;N+}+x-H?gJ)Y|2my(uy* zzf`>;%Vja2Tohmz1VZ)|y+XA?HJ^(kon-<%VO&}f|8o0R-dw>RZiX~`SgjAnWrRz8 z-I9Jt$#z>&*yyt?)r5gUz!8Cb71}k-yogjdIW4^$g?d&NF3ZVOWi3lvuN98Deyddk zE0q>ax;O#ni3_~BzP#3_S@NLzUYM<|4U2}u6S)0N?cT-carswv&{CPJC21M(rGzdO z#iW>uSYF?RlGm+4Jw?B#+4hE~DJ#^&Q*>*jxx8Pw<+<BjIx#My6RoXn8_qfXr$Z?D zwLj$FRFEU&Cgtj3sC;SBY348bMj4IPWGLTf{T@gx>?yKLRF<vLvJ@<1ZJt~jrCM!R z-L+aV`9WO~2d}u)doA;MdIM>CRfCf&jxV<)__AYVOlt;T+Wvv(#L~09`$r1IlyVB8 zEYwWg%2@NAc$%|m;wv-Zixjh5f<G(hzfg0{=}JvJegnRr(v`G@xnCO<cqSwZc@E*R z{P-i)Aq8Wzs{e%JxNI2mZ1Z?fw?}nhl-9--=RBndgrSjABh(PA%%NEMYLfB-*9=ee zdZZHJ1HV=JNJIRww93@Zs})`ONq3fvJ5MN2=iyTo)A%Oo90V>$;$m4^AR0V%4!pG! zZ~)c#gQ+B*Od|-GS_4r26h|&5HFx@65>|7m6BB*Cs{Z2;Zkm)FU3*}VvQ8K%i^q!E ztWV|I0v#4!v1<|EA~?46axso!<iT`OR^V5vI6s5idB>uAQCqNfV|DO)Xb?^g;c?Bg zaiC7^#PH8jWo#IfIHo*NrfxqrmjTJ&H%QMU413TQi|~TBmb>KB0=(O}`ADX^6(azi z24ZQ<54%|etq*jyx;t=LlT!N^D;Tj9q-n8&&dR<@LvJFz5(A`eY^6<WCH)`9a`Wv> zR4?9qUd~T%=ci*DxF!{Rc00^LPI#hB(>SyuUAWWIw<$;5bfu(^#b%>GC$j)g#kOi2 zfjD(w#nei=Z&8L9So{7mRh^>RD^b{KBWEM#b4mV{TE{fz;e@D&vh-=w&H6IMvAY(- zLxjUebQbz;^zl{i+}NLv&IN;05y8|&!6g&pKOquu<B^S$e;85oSiTXhS+j&^BqY1s z#t4?jHs<GGYVD46sh&i2E%HdEtYscRX{FU)!8;m_LB-I+m|*5r^?w}8P53rmT7)Tg zL%A8}mpPFNrWpc(O(#Ze%2!ZBPR{vd!kIEm&e&9jyWDPHA>s>U!ugv!Am8@Qlkv*T ztV&~x9x4ZLJ9e18Hwj)M?Z6$uB-0`CQ&`U9DIcxRugFeihW^d0NajDcBhxffFAX!y zWKUgdefc9YEhM-?(<1frY(R?H@TWpF%H5zc&O7lA3cSc~M00Y|EhsxZxd@smACzGg zWYRYTiwnou$pB^BGw`O)N~i}Ph7@Byx79vW#jcEYL3CZ1$s%%+!i$G0GOdvXAze>m z_Y4hXnkbijW7WX<G4Kdt(mc~lKn2DC9H&+Ef2?=0=_2!fTf1)A9lm!Xy)2G>m?ckf zD^7a|%+`>Oxu=i!v+RPDE%1F?9LG{hXAALEnAlkcvrbV$^Jg1~Y(oI(zdCKXc1hnv z_Z9e8DhPwd<efM8DN+A%8zCaU)mOtjpzj((<Q_l+p&pgPdPiU|2EMXuS?dUL_p-qf zq)p}(T23OWdkI&1O7fBvgtGz2pq97vDv0->V@`kw7=hIP=4j&>8#o#u%0SEGZZc#k z-y*-P4iysq75nUJhEYa9Rl5eN58;qA7!+ShDCtS$NX-;7^DIV~bKgi-ewAyB)EW2( z4nQrl#_;$M8#-#ae5S1)v(4M%d*mdyFSTn${U7Vye4ja(&o@#8rVbTOWhPl1PPMPh zkOO>CtJkus5jYTJU&zepn!Z1xqm4#CPCI5NBZ_B|eJ^W7=J>?C<Go(^5$9F^XLH&3 zvVmz5p5e<T`pw@_@SPPE=nMx2wksMvDb43PRzR7|yp01zoCk`*m<+TbCiGE-RJsGt zwQZDnU<E-{CdU&6!*b=P!P80|KJVZ0GhQ|CTjrK`EI?}5GhjNyjh~%0?>>9^PFN|I z7Z7sYCOLXUL|!X&yedGPbr}qx{xM}klnog0l9f-;z%T%@fQ(RRcXDjB4N8RTb?5p- z-?xMsKhhE+@~^Q^eIiDS!~n(WKr^GAj9f!|SI~c)F5EmxXl<?cv&VN`>9+RL(Mdlu zZz&XKMzLvqBEq6xJr^;fq>jOG#^lC9oHJ$kJmM%7<EG9-&JVb()09LMoCI4o@X;@w znB}lUfi=$!D6{znWufPhq<Q*=|Jh<G5hCYRsh~21?mEZE=t-*QNiYS*5Y429n-ZcT zn(EX9KbO&Sr3WCGz1dBb%u&d%rRG^a=kO};3}lSLi`tVS7V?ml$B+O}S;x?fx)xML zuqS^hfc`kXCKsvtQ~|RscKW$&%?HzND)C}>wVcW;sq;aoq`-^nRMu^&Xo9ubDQz}T zl#E~MF@ZOysv*k;lk&Cf$)XPGHPQZrZ^~bk{zqWB@>Ad3aSgD4Q}sN{9^Ow!>0j?y z=vbNqz=RPnI_BeD)rpzMNHzyXoPi-Ii;k3J89`}xQMNFMBxhc!$gi)kH$CaEE@b1x zteaPs9L}&Qttwic*CzDfIRkE9dq^N+ih>><10b0#L`x`QojZ1%y-GvGI!`B|*?GJa ztfwjqs4XZNDd3s55rLOw1HSo`WmJ^0?>phJaUd`3I$q|}aQ;=pO~X_Q0e~40BB-Hv zrQoKH0BLa@Gp4+K(PV(V&%zWU1+Q%AbYxK_ki+4c0Rj_IoGK9Uv<QG(z@U!p8IPRz zrt%+v+rB4Zd=1kU4E-bwV?x;wrJK+Z*<$#}4*^R-YCOqpsp-G!$!1Cz$&I*^eS-1+ za4cs0vjYU<0HAI6lMFCK;tFq)rXihCk__Ag4iiXAb|B0lR_DufFIUw6%fZ;;G&7rQ zpsZyI>0qWZZ61#o5Lbb9N$y0kR%O96<>!pvrg$0-*@6&5K5Re)76NOC;aUcZl-I^g z$h^F;z{_U5$f`EQ720IxgGgUVt>$2{fCW>u1nLo~2&*t~0BZm)6A}slMh@%TA|Vcd zP&QEn#$n87W2gp-0aQVK$xm~k;t3cZ0!_i`ST2Cx(ad0LwMy<j&ttwOUNJL2DyBmx z2G1}VIHzZhCr-KydJ0}|)0i&Re*=@vl5_@y^EBib8H~<V0@;jp287PR5OYkjbA|oL zu0nr|&Jj`Gl0HreCmbd54mIK%U}&b{?1(^1C1-R|DnVSOv{OE}Cl8fE8%v@!8u%*1 z08K!$zZS-G?jSc;i<XeX)5}hIRMOcsfB<*2%kzK%NRb*CW84Nwf1+^{sd#;y2{O08 zwRNQ?PGP!@k_nH7!$st#z$@BsIQ|%}i}P@ESHrd@3Ca?fGiL$h3^5adTtGg=(Xg$R zZW_Q%IZ>87-KB?lRgP>bv;<ww$`AKy*sFX8?~u`>33wBySKZWatpcQz+G_d;IhW{v zR-{doMs%CyBamhS7s|vL21^ahm=p*Jx)JojD)i3D@DG#Crf@DI$pB=qCzz6yh`m&e zKG7~@rXgjy&&?Y3U;Vt95<>6AW^dRLie8lcrMzkkaz)0ZM0XIpSoYeHm7AS05NJ@K z<#jI%TCUDjfdEoi+7v?Or?EFl(p@%Vg86=Uoylm})7pm0|KKrezkvWcLqlFT15hVN z+c^*p(5Nhn;eVD9_F1!w<7m|kl~CacCcSm?5oHhf$?{JCELyKxtxC1nXLiU=He;RY zEvo+cbtEAd+CiU~N9=)Q75xVk*)*wdcfX;ee<mtNx1_*MuAdT~XD5dct^pGv<9G{= zImnPXE{1<b&Kn;z4xmQaxDbU%nr!n+Ue^fDKeW`<iFM7!573GC6m`uadK+xQ#t_Cp zuNVVPu`3NHF~tO<;qzF%QPJ|?Wy?xgp<>E2k{rqsQJmXGk8N|Q3XO||D(IAc2ie2E z=?7{7&g?`lap**bKP8VwW*8R(V8S{Ac8&H(ywGPG!mdhNdm$%hD$g2yxN<QfiT4HN z-?vE(R$)w~BHI(m$tLjP)=3C~1`4On!1X3q$SPS~|9fhi?IUY>n8CqR$0c`<Ii7jC zE68&+$T>0~FYA_<9N<%sDd%)hOj5z$WGs^55V!qaD)LGu4^U6cH*+u7RGKVRAXbIX z!dA;;HF*W2*dTTuBm;2!Uk<-mhteGX;aCTF$Po-il1!zFSX#8&cZH@t0-5Pve;V7L z!(URbS2Ez5v1O`uq~LQI<N-8B1Vn|*)z&y*kjpacy`vF3z2aoP)3g9awB|WhcmZ0O zuGl$xXIkDVTlPrB<*OzRpaQzU(3h<#G>qa};FOJL0FAM&4gK%$E#|bTlBm;6<EITq z#W1H=9bwX4qc-+M<g4;R1o9}QW1x<gb8aOV6v!vx9*nUAG^vj(I`IW&JNy-Yjkxhm z^jt@2F)`HD%8Tg%wY)VU<k%QgUa#m`Nt1yXGjfGb4<@K&g%_OJfM-9P7b|`cHdB)H z)GLp0*ei?!V<&)OW7smZ2(;uqWsVgyt<0mZ1IIT3X7)8W%Z|hcp~ei3SBjxL1ATMp zOs>f4$-N>{MAVrVhb4gr4n{@%w1(Dgkpl3IhLwO<(0QlIshu+A02YNRJZ_qVI|EY` zmOS|3%bg0YfEzf)?^4zANrnP(EUHA9Uc!8yd@v*uX>eg=oScbxX9&v+In3_!&idU1 z<ZXg4frSYxvqscH^=wEY?V3%=fZy<zFkjq8SdnL`cvVH7>_LuaTp6IvrYgE<s!uZO z->~Ckp&yqTQxizIV&E%Yecjmm{3Y$mF)C4rG>eej0V|F_5jrVRp}Z18UFiKu1=JxG zKvL)fL<>UH6kNT9{np6d(u27Ev8w(TG&e!gb=ukRI+M}C>R&KAORqE;-;OXkT5jV{ zoH42OvF44ALLORiSv_NRG3sJ59hK9l9Lw<087Rd@@ffM~&o<W2e|bs>U1vzSbBT%w z1ULg_E<H!cIWcumvJ(adJDrQn)Ko-Nz<?1N{cJ8(39_y4oudAOIx=`&3;jksc-dw0 z%CKzCzcp2w3a`#|82?gEEA%flRg50$Lt$_-P>`3~5H(cS{;)ps`5ix1*{8Y_=g0_M zl>X0VOULv|N;n%b+U>Eg$LU?ov`A6t!Z0uE2gnKq{7QKX{1l=XJxby1SU!=s7C0f` zmk>b~)3K@UxojMm<w>j>0BdF{Jx7d0mU<;kx|Q<)0<mLibKY8>W5^APQ5re%<u{$V zs3cDFyfi*Q*dNdG6S3*3b7E7Z2!eg8dEToUgqlpCTt+7z!CEjs2QO+#{TCJS5LMR= z%tfc74MNi(t+#4r)kB@?yUJ9CqftB7)G)xl4CsHq8)*~iid!eewT65@`}H1YvVjoS z$Jr2|2u1Ins6K8rJ&N*2WgZvhUkp|+GfMreguUU7O3x`Usn<DrJQKoQEb7F26Lr<* z5II<3oR%o8^s*$V__URTEy@_q$NtR2=e&9@6rmc4)(pThLlWhoVW_H6kSd9@8)d{$ zcykayn3KpZdZ<kmxOyWPYd5vLzE%2T!tih{@}Nq7S&{w<`af>8ST=xHPLdR9h~SrC zO!g%?uKD>4^wMjxiNB$q)tL(C46>Rp1@K>W$ei3X%4HpaMf75ROFR>Jy;!_i#j8TF z;c&0k*-_CmJ(^5K6cYIe*QbDC^DP)A@2Z!@^rY=zP-Gk++&MD78I)3fuRH~?7S0h9 zH>W<S4rHr<EdxJb2&DD39}3<XrKTo%l&LipnwF{jD-Cb}{+f|N%^tJ$olHd@D<tgy z)%2gUecmi7??OzGIH%}b-y@~F{_+kzEK6Rt(#2{W1>UvrFytw=dZ$zv4Oxv&ky^T# zuJ?=Rk}C{_T3Y})dRkN}ZMD)`0uRs85~5-kK%^OY<9a*lUaH-5MvjQ$MuE+e#s%}W z@mN2DNe1-eg5j7KKP-ehpOns+C%f|Y%j6d5U22W%s^=;LB&Fe!ieV$7<vWqc6l}tH zaV+C*(6kILs~<17`tA}E>i25;FI2(FD>{w4-mKplWI+n&psoj=U<uY4{1pd@O6(FU zv9#vQLm9^MRL_&?P|(?0Ui6oez|ZE3#Yrm&K^lh|@J!0f(OYX2O`Rn5`$2G<bFDRp zF6uW==bx&-KNxpbY`!G=0>r|2+cP0LI#7rv!}3C2+T*%B>H}g8gHw3U%Z!C4ZdW;_ zs3UF2tUmz|+B?@8*Paal<iJ-l;;QaG+FnKfWpnvegC30Ugd4WCgDjzcWbbL<e61t} z(L(KB4cBOjx5jmydImg>VqjPuvAu5eT9-NlvVLL|3UA^(AumkDLXjg|u^_IvWa;%n z3uU!o66iAK6Np&U8wji<W$_nlzf`e4vZ*|+KG{x-u`_LU2i~{C0MB_m8fcgALy~;M zUyRY8qk(k5r7sj9nYN|h?H12l7JHOmsh3+Np~r^o7JP~Oao44K!{>o+<U-ad@W6I1 z=9=l(J}*xHY15>kTQ%BFW0If65zv_=Pxjmt=tP$71r?YR<vz%}WI2cc=SelE#&XsQ zE_>!0_XA%b+w;YRFL&!<Gf8t5q4w6f?r=fEdakZbgBQ&MR=i|hK;Wl3jH3>f{1#S) z2?3AcdlfOP8bemvbV=uWRZ+6nM7Efi#nJVT2N`nrrQrgVMf?R-Ql(#WBm#<JUY9TM z>Y`wjxr$TcEGFDTnJJnt{#YdNr7W|rEAm+t@=|Zi_DM-kYGp$`7oq=~=?x8ImnKXY z#=^F(>Q&NRig^%pn|m5R6w@rDQXles&Oz?L+Ef|Eom``Q3-D8pG3XPXM~B<35ef=g zj|ehDMKy(C*BQlq0YebLpNZ;>6~NJwP$usQ(!h^JD-8UNgNjy~oj2)~bM(>-1O$~j zfWx&f*+qNyZl}$ZUUJLTv}@0{F%VBr*yi<wG~Rg!mV&MWKujRGZmhYHCzN$t2$4Qh z-PojzVlvFRzF<&LnYDf=@8tQ#dts`_)$L@QLm7rTEsuHnTrZ3DJ3xW@wOthDnF+gK zYFcVl{lE6cU9|hEZM0d^o~yQZda;kxC<x879+)VMeaVa;Tm!wyn5nl=PU6^NpSN_X zBFiI(kgsBF;+QIyYB@KJrh1M9(2xnOF$@3wKlz@w@7}TR`<<`}(2|NmMZjg)q2n3= zj5%5rWw8oFT?Bb+*ML?Qe6HL_mV~I-F+p_uYp<p^zU3x*?cFyFK)PAe?>&C3`#VV= ze)s3;#NqW}VV!Ah*qIgIZDk3^F^qo!c(t*v&~oRRKhllDA84Xd4B2D-97xsVo$7VE z`!vB<tsi0;ny8nT<mXBk)%wBuPuH`GF$(IqbN5=O6F1ZA?!KPB>UG!9W=>!D%+qxL zuO6U>e&Z{HP7JRxAs#oLNCUJrLI0139{c=|HDs-dZ+I`1FLWa6Xu)J%cCc*DLv;Gw zk)PhSF+YEbXrEP*KDHs*dPe3e#09po)!JSZ(N2iU2n;5=z5zrI{38gse6c=jn_1TJ z_?nmOp#S_YzGl-ah^Cj_aqaN;b@$vxAL@+Ahu-xCT3hR1XVRGwP!^m2RR!P%9-?fp z2l1r<o60vmbf5_-1Ehd5#k?r5vdnPA+ZBa%3J5?^C~O4sDCePVh2e}m2zhT8j&Xqy zBloIKlGFb?zWQ4F<KO@4E*jrSTZ!nEuYbw#_w9f39KHL;K248*_Qdc^j0mg`Viba4 z4`U)x?!~{fWPA(60%W5yt_3#dO420;+2aZx2RaUO(a2R&%F~fOw)QQr|1;mdbNile z8t3L(USpYXzO8(2qGCBq3XS`|VT|Fwv!12V;9@!jln4zIl<Sq_dw$>zbj$5m(N-$c zEAG0UUiONs>32W%G;OSp{W{8PSVQ89VCU=Z!V;qqfs!X^QKf8<ms}^A+%P&XE!mVn zt5J8-8;<g*^%ce=%4(|}%dR&JO06vOM0xl$1L*%-|HSR|pLND#Ge_dB)c47o-}<uQ z9dVC6a&+j)AsUgS6Eao0Hbx5K(Rql@59SA1mQ|gcSWiRO0>(0zSlg$K#f9IRbt~y7 zv!^E5z*aAe_c7cuLmE9N%_0?gVvSG_$rTfzY3CHrLBXwlw5nWsnW;ni$m75Lfv?%} zu$H9P-F+jy?a$sxi^T@b7wh99sstlF7;1uRwWOX@^u}w(ze2|u0L{`e8leu98z(2q zJNx|l>*TT0uB11%u_XPeE;XhDY>_qIYAAKVLxUfxI9K^n9JBG7)BmpiukEI+dIPeR zrqext;tqP_x7^g}#6}0E>)jM@G9t6&R19zJ?Q=%?3^*BaDyLM&Im~|S*yZ((g53** zMe5fZ=TcqYqkeZY%`V8siBd3Y0*r=5!Zkd`JY1neb*77Tl1d)TSCEzRz7UlIMj1eQ zCD}3_tED%;_2u*p-|_O{T}ZtV=>c<*x23WHP&DjP8hZab9!sGlN=t$VEncCdGQKXg z<SwLE@rtoCx)aV;25hbvCvco<^;L~o&A|G+1{)P1kYzNJQ+30RPA_hwt+ZNt+n;+a zZQHq^#k?~j^9#e53wuY4(p!7YKr{r*4Ohf49hcgeCJ-0z2;r=NsY#&6Qw|=R^V3Wt z{qq~ApP22KZJ*bLGa8GEP!{(kFnJM5U0v_cQvi?vNU0ke2B`Li)A77t@8}l?x6<nA z5B*oKrnOzvDa+hG^Vz?FbdbCFX&E#K=^R0|DI2jY1E|9Fd>fq@?<H~5!>`DDRbN`= zwd_P2in;3wT@JslY$L_#1Tdz4QM^e2D<T3Xupi6bc=S6Ex6*29_f^~Jo4@Oh;cK3Y z{Gv(xke5u1CsVn@&yQ)Q;f|Rc=7B@t9I>osh?z1iUj?oQeqGK5&(6)yoLH(1j`+lN zoLjDiU0kEXAz!7Q=Cl=2`7DVCC#iu^m)_8Yo?GeSQm-suefJGCm(g(aO4IlM_`WPP zBn%i=b4Y^maE?Y8cl6w%m*&R3l#5~H!<3~{*rlM|FmlZZA(n-ET%pSp+Ax)X7m3%# zUv92ndZSwJ`|)q*u30x-`4ZYn7ni>IZLgs1yE}atrgs;^l$LHR!sp4ja2RShH!)t( zp^?gUuF-4MR}@+mm&X8MW8>WM*?he>Ahm=Q*D7p95jD$*!q1g@S^(1U(6G!(i;<pw z4}4$!bz6#ZDd`n=-O%-47p`wy=!SbfL?ddZby!N^PB*0z4Yt+-rabrRHC~c$q}lv< zSye8l<Q&U!$R;JJNVnN;u2dxzV*Xbe4%B1{(fUnawP$P5{1Q^{Slx2_-fkVFTO*vW zC*#ql(UHy%vgaY2FbXa@^%yLZYZn;pt~ma=z8C-~jS0uD<K_JN`4h8K=T9G}W)feh z2;WNui0^cf!b(mxuHh9<d1#Y;CDkgn@02Y?xy1CcJFcM%>u1w~`hs{ZZDAbl_Wiwp zp^hFnf*du*m#GQdlY`w7cp*Q{BMti^(~e5!ZK8UYT2Tr{6H>|U^~x>jIWlb{Sv_Nn zREkOm7vPrLwss<3YP$LMtA;g@etl4<cgJ2$Z>}EXtL7lri~-f5YZ$I5SE?%$PPi*q zlW{#1qsl=Ci^yikBeRnyo;qG994Zv50D0L;zhX~~>5N)E4SJP)BDEY*F}UtLE`)aM zsecN7D=km`lezOQ0-4KVP?C*}^{gcMO+X2xlbBUJa1+!rN#jn<$Pme@08eN{YWJCz zPbHO6i+in4Rk<rPa7r!DdxtzV4l7E$EOE$Ryge2UckbTOi%U&AcF)LtY>)L-K>7to zuGosEm7vlf#Onm-OB`$wl8WrsSrH8|D9T4nUpf5f6SJK=c7n;Pfq7farxmuAYDTJN zglZ*fMhP!K7{@7pjdfO!U@Kip>brD4-+(?GJ^b-)wd}n8^mt+E1hCzuiRq?kE`(w* zA+pSvOi683Si*0-Cn4C9dJP<v)pQFTt`%)UgO_?;wS2XDhV`ueH62^&(vpxxAH9P$ zpObz&XCZBn_gB%0VYtt9aq?NppP3(z>tb0#+2z9c)XC2upS|-p{^1jPK~|DrCUfqW zDQpzj(t1|Ag{`d5T|XXATCskhQMJZfY4s#&@qAR2VG%ult!*(3Uj8;TjoTRgL<tf6 zbID^dhS@;^xyYe+Xjx)z8ytT$(i8Ct=xk$jzQhcKH+tdm!?p@7N$4qhV^oXQYtv%A zL$H}%lK5<=eq+ff%^Nu?)u>#b>Xrc7=3?d3LgGrC#RQHBUWs~uQ&WLLX)dN^08Qa% zp7@W)hfTv>8Wz&)f>j|Qb<#*Y=Ovol@KWjrJ8v%YLF7DEc3ms^ZzUCwm9%mzH4?-0 z(V#d(gf8hV7+y@v$9AGHP%~wvkoL{#kqkgSm2=6~M(+bkrCn3CB$?%!k<%<(yILhG zQgg-pZ*%`iBi~kfW@(ljr(tXs$(>pxBNC9?qE`P_>%QEj4u^A<me?DSQm0m}H%-R% z&c=yh4TSp0i{>Ybj1>X&m6qW!)AYnah|cnfR|qL0a_s*Yf^neT?g;DREuDF0saKTY z<sC^7`v<0aWg!6r&Sqp{Y5UjYOW<!fPbZ~EWzk2IKXB>L+lxvQ4b(DoQ!^4ch2^|C z)EkuUGFYgbw3D_SqZq84W1ER4CqLY^EycLxq@Q>mx9u*5t?i@3z?8ornFnG-G#$r? zwRJfK2V*5siLnd2dR7^0)QhMioeAj;$b5FqHP>|QU7UytOqJu>>!3LrgIf7yW^)5v zUE)C`7$k~3RIZhLq<a-tZWv77S_63|NyK)Sj821nBZ0`i8#0XNqAu+bjG4Rxl7(FA zVfT~{nLJ_SV1%L{Q%r@?bgId?SAHQ}W(z7(@QF8TGVbaUDx>@m)o?rp&y%KTZ>394 zec$FcGxV}MV*vj2ggEOo7D{ks4yG2}=4oP+*V>qk*VDfu<@7P+bH5d%h3omc*Fz^6 zx^>V4Cr_S~+41AYWj?=fAS$pmouJ8WUnUy^xaO3X$W0S)&;(A`ymy5)l)xcW+Sz)t z?zT5(Zlz02vyAMsyyFBVa4;HT-c{A9Aac`?O|L&j9}sCqx>Cu5d8Z5m%6^<8@^TA$ z;kGX$B>0+~vQDkfQ8|TCIId($jMrPc(Qx_%$HMnl8_c%S>S@OI7TfXrQo{>>hI{zQ zZ~yf{nJ@(DSQ2g#7qVDOS>BnJ=687smJP&8WVsPL@6)x{Ub~oGfBp5{?8D-?GF@wl z8V{~ER-9r8ULyq&Us4~pN3YGSbyP>Rs(7x7)Ls-fg;DdAI%&~X;;pni4QjC%zrdD- zlt&M2G|&v57Q;9JNGCcf;2h|a%Lj=~Ix=0MB6^AZa;}dYKLW=@))qG%2Yf`i)-y?& zhL^EwzmRVmC+14y#4evR1u<e_Q+VZZbh<(hYQF|cn;k&`Bb*M#cQ<XNOG$k{FOq!C z(n}Oa`;cC$ICQuIuzjd)9Q`EIVX?cE=k)r2^5bnzfn?b>i84w~mx5uDoIzlUE6p_I zoQsUj8yn}oeC*h<#q7wDBeFg}f1tJmo~Z*fPE51%M^z(el9u-GCbDUevEHoUWF8jQ zp_IK>DVa7E9Ka_h^;g7|+e(+720>;a3>no!QbXc_43UgYwAt@Ov9UwbPZZ^fMEBXV z_pB#8d?t3luC$bg%%_M$UcJvyFV<ySafPylA~Op`eU*MOLnh96nd62ASfB#&Is$Z+ z9!?QkK`HnOYP6LuB8^eU_`u-sLdE%ffZIj?-+Zo_$of4>It6@8zj1sWR+^5Ca>Z%9 z&0$tUkn?4khz7_E+_=cDQ(#OPpG7$!+K}}x-FV}Ti`mUL-`qKq8^^~03AZPzFeB^Y z?%VgW!8oMKHFgH|AXG?VfRXHaF%|O<(3{S9XydqI5Yj>xiFN8&4;Q4j(xoJLH^cDf zL)%e~Y(ChcM0@4Fk1|X))X3vbFVU)$HkmhW<uRo?pp45W<cx+$O|CsCYxF`81?WAK zWo<o5{Q}ODJenoQ35{vFrMMQG_)8M>rq(AM>dM)rR_9i_nAA^;udQt#e*3<ht##+K znd@r_GHwxZIW^^m19ZqF)36O)3rm&hQ1T9U8U0I!NyTW%wNaMy{=fNre*Dm(L$YoA z_U(%e**K0BsGtwWEO`!2NWBzLk<2^XPa3Wb)(%pyD8KH6&04A_2=>Z4oO8dAWypKI zP=wF}jBUB@B|GW%*IiB9c5Xc|b*X93RXgb$|InRu^2nT?`qC-7a88W{kC8`bT*gn| z&PGY>ujQ{83K((knKQ^wo?=OIVmtBBGavtnA6v7r$0<@T6ZkpT97&~o_9eHFA3Gtf z`&g94h3;gX0gunj3PB!16}8r>l>}_aJFM^;fK%2j3iq^K0YHX(T|4@Zsoiwj4fL{C zY<-dQQqyg(yn(*{58gp14$tYahmVXq6M4}Y5+2tK)0p-0I-_w)E9!uk4e{g70yt{U z48#Yd@Q!kTPSZdu%!$^Fiq-`#hSR*h?z8JB4s<7rZM$~uT72cm;}74k_tv6<Z1FfY zZejDToMV$*p(M8^cMy1YYE8|Uq`FX{NlIRFUIxPzEw5^%I8=G-e{nm#_RTlYEnl_u zuAgU`_UzqB-}AS=HJ^XsGl%I{-o2k5f8_Y^g*JxqRUpit=Nw8X>icNGP*Do6+J1vf zfC3pfGsq%k@J2_XPpZ=qTvbLDthF41zcoX(($n^@v>*x|O}^(GDl#53&&k3_&>t&L z#+9>h#y^u3D$<`{(>YUr;5%MUZ+y#5TknN?7Sfx(>6OD@pN<|n(;1P&^r3e@M#m0a zAXys+XD}SjIWeG*GHN!bbiUEJ2tpp<p<4r^a`oEbIb36y#<J;N@AUO~);G=^>$7d! zzkk2H?#8E&=0-p$MNEaq;~PtkFt88yiwniG*BS@!FnXWZP-ke!M?GYr6;3H!bL05A z+O3a9J$LDqufJjVd*Ii8kAC@QKS%3l_386|5XNXE&%2sSMd;b!t35Py)}$bc03O%H zGCe?2^ZMCM@3^S~4Aa4WA$U7Jpq$AmxhbirsKxYIQ3v_Rnt;xb*XtvJC+XHZ2qPjQ za>vk*-SHpzBQG1Asx8Cu+@$Mn+(XyBbr0S3`(H{Qde`UaqaWy<_1>|D4JKK>`f;C8 zetScd$03=K(O+joC`24dC~MJl&O=}jf{u*8V`Obc#OvRKUwHq+H2QGVOVJJg%b)%5 z?-H+F&7{i0`ajvO63PuT567YhWWb^i_EQj`s2Lbs=$dV+$t?3mE{V(Z7ZV}8#M ze9e}UJdf$<p|kWa{>P8f`ni5f<G96l*pV`fkA5i)J#F#;NmPk4(+z<PVX7uNJ?2#j zltVgz#I8(Grd(x^$Dj|@X)kD6aUXSPqAeI1VY&3kzc*gNv2txE>(~A(oLir(eSXu2 z-u-#{@Gm?*jCa3IqR&qa642`j4jwoK!HNtiIw)27=J=~RLoSNXGfYUMqGtlKq%#Ts z>pQ;nW!=xyvwQBjhxYB;H=i#SCy8txl{q><*)jmAi-poKw>{Pe9-8LOlq{UUX)WE7 zDbP82OPYkTtcqzNm;UzQ`JeimcWoJu=Q&+><8J!1fBOx?hjsEtbppak-k~*K&9asw z4?l%D<WXma$GavzQWy`F85N{VSBwr-ln|%C96dNj<Km11IyfMQX=W<t1L@8D<2ng? zlKFnpColiNL#ChVknsjig=onk^4KyS&wKi||MFGC=b-2My^vrAR5H}abDXv$a4fVS zfPP*pBqq1Sk(5UDEYnW7oqe<v8Ij`&A{daf{(NKO{3G4r@ba(OefQnBIC=8qd}Ds@ z5zVLqom;0IiwSU6ZJ1l~^WUK%xq-pMlh_%Qw9gtQ&OpNgzof!!iqij%pXJ<|wt6Ab zEAP6Y1FDw~ilQ%D9N!T%?#g24l_aNu$OLt~49SF8G<p!934_;i5!oCW%wy95aGgv> z(HkqgzRVdrd9<0?Q6R+`6m__e56~AEEtr!O8;Sab<wT7j<O7G6u71gmVcKddy)daa zB0F}cH}(#1>RqJqNe>zhI?|7s$6fEVh~0|55StTJ^MRZp!k{3@jgK;tJYh71Iz-fO zx|-j6@4cdrWG~kHr_qBTryB7Gq6CXT%vzGSTI7|_d5qD!(+(ka9ak6|qM)>#!KJV3 z_Sf#~76xyjt@OgBKYZ_NI%VPXVV&{S?~=z87VV_;eEMY3Z^cODvS=*WJ34v|ekCZP zdH+aL%qdZ_YDlCsByLfYypGf&jUw<7^3z*UX9PV@Rc0yx#nBb<QCDifJ%3_r&Ethk z{Z|XW={s*vuX`U2h|0zA7G$yL6dk4_!d9n1ECO|rsz$MuNEWfzrpPo?y2ZAG(C^r? z+~+q=4-v>a-}%nLfXIzE-Z)=hKlg-FSSl486NX(lCE*N2<`IEFBNiiM9Y;k3Q$#ad z5AihL*S=-zTjwuy>XqfD+jfl+Nbg(q(^=_N@02|qi&)jW$<sMOIfmR>gv5o@KB8sk zT&aV@Fb7;SSVMNFa8?ygRTZ|0%+tpk7$Go51fia+{7f#Y<_2HBj!LBBu*UB7W3ctD z^A|pS%O8DJXFx6t`p`dY*nd}NzR*VsY+7kpE({KK%2GHXh@Ez26kO-r7uX(*hw2|j zDkMItPUL%A(H-?lJ#I)obm-9h#M!5Q2RZV)V+gF4St-eJh;M|=#ZuMF%e-LpQ1t|f zvPGpp0~@a#cUJx8t*yG3MY`+v-#pCu_MiFeJ*+-#@0A8()!`RkOICoalypb&vFHN5 zaCUMv)}aO_%WTDy&vm=7p{%>+Q+a~`YZ~z9rkschrBq$A=_jNuu5L7_YJ6hKQxbg} z7mFb(--<q7_@s{2MrTCy`yu1s!UvK1TK5Rvq>e-Bh!6lj(yGdbz*H(2Cv)Z)^kuw> zvr0!#efeQ!d{Eyz?zlr9c<g--E1?+Om{AMXEX#I%Cy6RR(O4-J*fqu-W9Y?oPcGHj z1J=vF>T23bFMPWG#yzyYaeg!!`E$4Md`5cskVF^uKz=9yW1$2p173bC^q1`2E6Dok zFb0q&w+^E9`6xIj7m<%FYB~daW2A)2n+*ViSIB|3hUhheMwF*BV)roknf?05R=PaW zOTTL0@WAaDeWdAKp%}zc3LS^!9R-vPpO2H(VOpMW)+i>a3Y9thzw^ca)CU_w=rkCR zJ$v>n9@_tbqy0PHM*^WBwYVUv&DF7sVuE+q^6a9LK<7cr;IIUQdFSnJrOPAj+OwVd zPo(yXhWZ7=evrmbr>Y||zB?%Ii%)3~g&+&wUtkw);8I9TwHY8EdDP{-aBgybbE1&8 z<Y>DV9TUZ=SuCeUj{yvj$P^$%L#GDG_*{&Azm+bFv>3h>GU~)|oMZ9~cy1~wuft`T z_t8U?<@}U7M7P5kvvZcpsbQ+fGr2r6=<nj>1N-0CKR0Lw<l%=O?lpP++=bI0CqjZj zbQ_W!Ln^TuiY(B1)<W|j0W^5*>BeiZUTs)a_qNgtmik>K>%*2s1+mdk%y=z>shg^r zL`e{65NdT!vJzAskkS|pB$+3859dO~^sQd^Jl4E6tgk-hWOU6qVciA-zCO+C72QpE zlvB}L=><(LBJX84y@0V#&N+cHg`DRb<4+y<<4le2cBFj0oW-H`dCJ<Y;q)_A8(Kl$ zg?07SSI@h-xdWadZ>1VD3GO7$U%O~XBk~jq74|7aA+36&Wz>_!mZx=jC6Qr~aNKz^ zZsqM4*88+jqmtynDGV$Wrwd9hd+RGF=a3lPym(zf^mbT3QFld|8JwD_xoPGyqQ+l} z^3LQ8p$IvHk`0`CW?S~-vPu1z^!k8?Lv<rNA=&Am(($g0B|12@8gcfAot!KejHrWW zE*$$9jRs`cf2;;XPMkQge(da1A5n(#?*#KUSBrUNniFZ$%k#Y<RV^b^F|9#cp4MfP zk~2Jv(X3cR_8Ov|Q4X;~c<sG-sz<4q@IG1S?&gh^&x)5KLd{5Fc{J?l#HdKf=VPwb z=ZzKafPvdC&q#|4RtMeOvLKgH8sE+^j{9PCdL_tVBeI?dnk!RTR&?CLYxkxS2V6Bh z9`)$d*<+vXuB=mtK;+h2Z{7IqN8a_379qSo{xTKo9@1uzgC^CY4_xWjIy^tVWiiB> znwHo~&wsLqq{ba``dtM5px5AqB?PTTmE^Da9ar4U9|2Y!oG2d7bCYr^px!8&baGmH zg9+`YIztlL<nvg&n@OnfC~bOc%Ya-iX;?=Xrm+C<NeVnAU9*6%MK@)#CXaAXbCL=< z1%u;sB?mC09)0o91D~Pv6ncL(Z=yVK;K1VZ2Y>5ux9ItML{wP6%#UEB%j=P$mS@(E zZp>}NhD$|3w$kOC@S(iqb<OadQZ#(24HuUs2;Ee4QND7dQl?@sd_AS-hULm<kbK74 z8eQ;#s8k>=F8P;$FK+NmRhqF6T3NRotIH}4i{uu4kl1cP5_7nQTMLaswJf={K%)BS za&bd~V@1^|QJgN0PTFFz@#Ww6%)fg4uDkBaYX$gm@cG%ZXD^(;aOz_kAxz@6ND%?} z`#Bq#857HgOuNMSrg~2>;ZOmU1X2PYwckpYMVj^B0U;Vbe>;4oZL!EkWsEi#!}Qju zLpXL!%>_5{k*o*%`kM=?blh*CnX6j3>sgi)e>h+5=s5$!)p|KtAC-0W{-&L!phSf( zjcv+Lq|+3wt@M1S(O8U63+C7SsH{ZLhsdA=dZGBQ-n7}AIQA8%L#QGr0`fn)Yv<Na zeyq0<Y17q^(10wiyY9LRC(b?n(Xo+a)~+dl=3$l=512%2B&e`LUV$Zeb0ZVx$>MRW zN4ET|%P#2yZT9R0r<i<^uIsZQ^)0R_>>;EbPqND|g*)ZtWcgH%1h>szk6xsF+3Kev zuLN23yIye0OBGZJ3-Y9AOuk+DoIOwsIy*~KB8#nQ-ODnWgE6ep&DQeN)_6V1ir6cg zOehrX;n&^M>)t`Ju%GR+z-@_g##ScD`N`8yfApGbuE`7NeR2lm=+UDazy6tbd>}I; zjdxe&3#t_O;yAU3U@)?RSvfPQ?C3LL1B@QU>)1zBe!pQWz0iq=H4aI!vSd9NWpBp# zl0<xBTc{m?M6XIpgF<LX%)7U#C6ifHD9%of84`(ZA1G5aP~_x~3m&pDC2wd%zzAge z6zBj8I48`py{fZ|tPipkm0xBl;p4ClVrZFP;@L~d!n_LsV>68H@Uw8V%-I3V1c$?^ zh(^u95zh{cn?_FZl<q$I)JH#Z{P^*H0ljKK`n2)z<M$n2pP&D1zTyNH2&ccoTS}e4 z(E>VwkAKQIhk0;kCE$9ZC#I0AJ%72Cp0A`>I2*j-QOs~FY&IU6KYc$$Q?Vw7J_ja= z4hE510VGsXN}^`UVGfvhaL#oGBjKVNR9G(gaOYg%)#Nu8<4QzRP)7M@<Ht-&Z^UUU zT~<jQ?=?6d$8LO}mQ5sb1Y(YS3+2Rxv<!F)+q}_PQEJ&Y@{~DEEmMkydYkZDkNlg* z?zrQQ4b10WkaPFlcP~EoxzC+Db@u6Bxo+>vUza$e?5#zQ4EQiZK~yfFaQzy2V<BW6 zmaj8spc%bZBAxbd-I)%5_MiQF*VuFUft~)90oiJ2EAD}c^LO88gs+^)9Vzz8iEMk( z8&$`-TO?jA7P*|#@A;1FGxmWc4_=x-@61?;cSJpcI3Crz&YzH#F^@iXgF`fSEqKS; z)e^pLCdjMzc*lBXxjdyD{o?q>xvnp1oadblQ&{G!%x3=Cg|Qp^@tJ{RV7ziM1xgh# zt^;mvo0DP6@|XkUT+XJ|RDn_6ID7T@j<=wcT0iFoB+*M?fNjb=nXHdIqt1vO=W$M; zF_a(Q=vo7p+1iXA{hfpKFaO_PrH%Rd@kM@ly2Pg0yrCp8w4BFmv5+jA2w1*vfL?BU zhC!1r9wSthQ(VK!I+tiJL=EID>E<H$K|67ltKo}(5aH%Jbc{3JKDYWmn{A^nKGJ^) zc9y59IPtj1pM3^rnEi`F(TVVy2m>chsR(c3K^mF}D7kEwrz8VsE}ZDsKh8b=_~UH@ za{vAJZ(M)<_2&;AfBd7J0r{&0j7!Ebrb1a`Ba@*KvNxeBU}Z0qK;ZLy-+0Fqhchi! zq3t_8UGr=(t<AR6Cx7(`I(`1cFp$G*G#2{C%SBd_LBzXj{m!6ymv61#Aw-<tjEQ`X zUkqE2epyj@pJk6Z2}csh{Jj(htP<Kjh|p+M*nJ|1@;4@u;;hYPS)kXtxzf3QS7T71 z{^3dM|GquFl50C>pd>xNbH`^TIh+>SHrqDvv`FvkQ4q=BEFf#sTAIi0`)aN8u6As{ ziuUflez><7`m4{gZD{W(oHMP+`dOp^b56XlNkIkd!*!5Hr;r-u_SZ!FK>)*T1Vgtd zVXDf1zK12isHAp{avkUcV478}8#|*dZk&`OuSes(-T^sw_&h!N;iu?AdN<iddgV{A zANEwVIs>p71)PZt;%VG)?P{TbPTuM0udfX<Im-E3_cw<qRQb$ut#XXcm37m2Z>IWY zQLT=#zNc(sVRD`eD<+e*X9hezANoJzZM1vm)wE~F)nwLhj7D?{inY<nfLlEh#+MB* z$vaxnun4rt%sn~m^zw^sALa5ZM;`rPw?@9+Eps?exTY(+y1$$M=Rfn|hq_L=8tdVh z)mbq1-jwx2wxl3p!FXV9Y1ik<`bPIhbGbklE}Tj4Us{YW^ON~d#qc)R<UR}@jCc43 zA;}*CS|nvsZ(fqn^k6;`2s~yNBoPzW8U?tqxobqS$O0sbMdp9-)YG61JoM#KAKQ)^ z&c<Z)BF9?#SA^)3_$tT@-XaQ+1h2{XWi+vAyf}MD<~3V8-5B!Np4r+q+P1cxcC76l zKH)i|wc)qFMkyLu8+K^11Cn7|?;?5kB-L?lrW~pIyxgEw$`Pm=0(MY5f-$YjJJLfr z&@oXkW+x{$AW(N`N#-vcaix#2-udD@om)Rm^NsZmT-V3laA_<50Gess@(V7B94M0W z#wkY-q=qNyO_p;J2MZ$zF0xZ(QB>?h(0>?`te5#s6A)?VtfNd0hGCW>iKJWoZoq{a zs07HYeVyuhKJ<S!I97XT``XUVIqUSI|Le;1{Ppz>$9ZbYI-tZ$?~vNq1UYQTr|JXB zYrKc4f3)L&|G97f=38&Q^{E2~4xA$pw)l?c{zf07oIig0%kQ{$@2!7@9sG@*B?>S? zE^MX1K<->~1qdxAhG^JT8d_Q2*nA=`fP#jB;T^Lfy6B1Y(^un5%lanGvd1+DG?DS0 zM##cf^Tw1<t!4CD<|)q_sdte<IxT?B*4BpltuFJz5CRqpZ|xOi3b0Ro(JM-CIL2^! zPP!d%oQ6wnNs2)5dIW9HEEyhM#9pL(<~>T<6{290qL)Fb$bnlH>_ki3s=W5+ebh11 zPtwqPaw*j3*~|&+0Ah)9mK}CO)BsqMr$LVci05+3G+~}nZnIGXdKSqjheGaUz&SD| zLPO=v6HKQ$xhKm7(PyF112I&6@nuPX7t6D)(~DjGG|sm10k&~kcab9C@%>B;eJL_e z7(ci*grL|*m-;Gl=Ft%_&ppW|L*zIBaWa|-h}Sv?LuEJbJR)<DW=uKi9V2kx!u)m1 zJVxW#k8(P;MU94mx83XIj)V-=o+th9X>RM<-l0I&4|U9DiI&Nk$v*0c^?`RjoH5Zx z`R3)DEG8ovb5hQzWBtG9FP!dQUvjQ99{C+unra^jSX^_>HRrx^te?iZ^{<#BnBgEQ zj2n?b1eI1SD1!<_R%Xnpf|kxjoZ2#>Qf3z=hwFo9+kuvbmow=HX6G<~z17bXJPw4^ zaM=`%&fG3Cs7qGrG5_dQ&0vbDzct%7Uhhx0ZQn_LeFHoPX4{DbJ*tY!p;uflt&#UQ zpbiS9wC^=sAJS|bi5WB08-$m1o`2+ZZ8rXnM$Ou-dB#_(<Fuvf9S?bX1yS!RM@Rj4 z4`wzcqD<TPN)T5aH`Oc^bn6G-asX+`6z$q@z;&aT$&}vY&_l^P&GaNj8<r59Z4CuE zwKKKRWmF+xJP6tdfT3jo^!meo?6-H(-(0p0Io8(Z$$1#x$+TdB@{3`d=E)FXE7ap( zgKq1ml-5S<OJFH^9e~)Rc+{mu&bR2~X_&@cOVPln#N$z(4kAKtnZ#%&2_}ssw9aj7 zOmQ7UL44a9EMQ0`N6)AJ&yu|Ny!S?Cq@9cvC&R|3Ls1Oe+LM@^Csp%#(<PNx%F!QX z88KN81tI<RqwoIV?&loA?klpMq}sLJ-QUfB|4+U5=XY(}^L37)5PExs)S>lClXF2w z#>%mbR2Z!ErAE<Kma&5=EkH~5Hu3^r0!wTMr!d<<cb36W=X2FN%=S7jd>NCr5T*>W z-`_3j0+>?ZVz$oB=GTCzp-CQlR!+jHfw94=(EaZ?x4UKv&EvYum<JXkoo5an<6@EN z55J(rI!%zHq|}Ft9NkHxH6qKb?@J!l-Hkdc1egLFQuuKva2BHcIhhPmZImkme>Z4} zEJ`y*0?<W`q~mRM$Eh=<ppcJKi$qkkA6pQ$B5)JD#>m$Q7&f((r*?HAdoiwGQJ&^m zP_g-9827a?!Y9i8qxIx<EGB0-wCy_2pQn?E$ytZ$%min>w%$m6+effDiVoOf!a>m) zv!Q<h^j}M}>B4MS1IeRBZoMMwc4gWs$bspC$(HLALdVPc0(*x-e|O6OpZh=l{daul zOJDlZuRQtWlV>RiUM&KVyYIexy<1Q}bK=y&U)go-E5FVOtk`_n*wLog(J<IxSSJ*f z8QYnznIUp@MO8{h-|h=`Dm&2A!7~q8hUh%+uo(Dbn<ffj@+{HQMZ+<AnE64?T`|_L z;cg$YtHS6;qk)?ldP;pi^`XTg-J1<|W&rD+pV`R&u;7=8$iRd4h=O-N1u#ot`p_Qr zdRV>4QAm1#9|2*}7k1;bt&ik}Zc0K9?VqU}@Mt9TyB=$uIQ6@JbSiC_R-=($PSY7S z)n$U5xA003XK)Zq{xFA*JII}sbGVu}+sXo@i6qFikjZmYvM7%^3Cg~gbwBS6N{>cM ztWOg5C0U7c)TRjn?bbZw6i}tUyhU`8UaP;bZPv4KtW+OVt`zhoHEt-LHbeBsX%Z*Z zwE&NsvxCBfK$aqh8Ra$%d2;hP>lh_xA%nY6-c&;1bj)T(TL)QbctaKd^o7uWX6plR zWCZMI?su{AM_J)u0LUbW+@^{K-fFb0w2E1tjH5(P9o_%0yPtEN@yIVwq)=xq^~1aG zwYPoqtM7fwKm1VF5&JTO<P`{scp<MFhngYC28N_y49gKT+QLbqLYcKwazESDkY*h2 zCrh2A#MPFmf>+@=vHG<R7xFXZwesvekO|~4eZzp6V!}U4jw*uh*PH};(cCS6A3bZV zEZ3J>q#k@6P_hUEnw8sY27t(g>RL{$y`_g}iY_3q=CxBHC$+@T9)UvaxrN>V>LHp| z8H}DDQC(hZvaCF{b-+{2eHDHSnI>xJjlW*<5>u=}ji)$1jfmH~I3+_ITLf|nV{PIB z))Ba8%T5ZQt#)z(W;0AgX=2~;?}BSGu@48&oBmrr&g?~^*sn8Ay947C_DHa$8?9fW z5;qF@(6)oTD~*2f{Ga~9AN#gFd-fbWdi3ZiN*|HJ6dxqi)SKV)pL^mrpE`2tz`w~% zi>VC?w-73az`wu{8`#wpi$WvuO7!Lyf_MBq&yk&S0!y{tv$V@%T;LtOfgzL}MKrZ% z^v?8HxwAlY{2OS@X8GK%bFRaTfC-fDJ0Ga(f*NtEm%!+lpymHkoje<NZwzy)X|Y<3 z!VDJ92aaa2|9oc8X{h(DubIwy7@p%`qnqp3Hd2amxYd4B2HkO@?aBI^28zSzx%P*@ zECXl+^adkDq9_RAI+$0u0DPHLQ04?E;`s1JkQ@b~XpRK(;V*I>AtchNNj?Ig)1zv? zaK1Oo8yz^0YaYK8^^Qhhmdnj>bA;BcdPZb2!JOv)*=?#oIT~fi%bjZt$bOEZLCyyG zCy+O$T(_6gbe?tL`O|-;tK0Xr|1|O%?UgxgUJpz{^SE;uY4&EvO{WpcImm`k)*oy4 zn9iI(@rm>2&!6em#LrX3c=V}dK>E~&EN4Fash{{)#*tTOXURh0Lioj|1+pgrIc++M zs<b6suU*TXkOiI6MiTUZDNP+w7Ah5b^{8;3Q+G=c7@#bS%Iy%%BsyAN)L4N+rvGNn zaH!}jm>PY(&!9{Q$|eM3kLJEnp2Y-zPzHgviP7$N*39zs#mx9nWlB;zmIGdpFR?by zz(8O-DJg#zi3Pdmo^UK(f_qW1d={(Eqb4Qqm#WI-jaB8k1Y;pyI-~Ps^vw`xZ+Y)8 zLnnpeIn{KmrfW5q$~ksoo;lK(CHX^nP~OJ-quh+wY+Tg=%Xw%9<wrpGax~V85862( z7O!8P7voQz6m-6@CsekxGo>=A_ZDP&`2y>|PUHH(r9e)&hcaNJ?juP^d1}q1Q)%F_ z$tFb2U73%Ki|1$V2v475nld2$NS}M;@!$N)i8F_O+3^)5T|H$fnx>8QhR5jmOb8B` zw=^E*v<e5_9H^#shH>C1M<hcIHhQD5C?g7lpd<m<`@=kk4EKy7hRf{WgrL7D%P|Zz zn}?)=neRc%%_ta%rY1WD8@)lwysJ_UYahyn0>o?vHJDPEf}}-tZP%zL4%lbWixe-c z1Hfd#V4})&h}Ms593GCa#R)v~8i+yZ=(v!Rz6w_7>nKl-zWB1tb|x_|5ESypB>$>Y zMSj5)dCtdF8aRq|1)fzdBvfo;Nj80@SjgoEz--*fz(~lgS)ksslQZkd85kIqn@o4c zu0aaAsBd1jDC=xCCb^Alzez5KJ%zm^Ipcimh1GwCGaDQnX9hmCz33=JXTZrG47wE4 zYf&zYGp)PB{9pRSqrb4fJ3M#aefKp#^}0q&(%!v$*VgCq#H(((`@e~da;Q|h#3_?U zydrVqy!Bg@cZ1{U2=Jr}&m8{K+y+KT$QbX8)bLk53KPNvij=%~Qzrv#LgkzRRH(9} zr-N;rWkKW6!tB}1IMX*lH(=moAn=|(hk?DI%Io?<jZt=J7<lH~-dXkzkxRe!qbZ7o zJ7%YYE^`)q^5=duOF+-<OO-pkA#5`NfBqU0i+r?r)A4NO<7znrxlAY46?kdoYbC4G zmv&x15y*>;s~Wp3Yl5->4hezmXvvxNc1!<;|J5mq-aeF@xoE}O028^8*GEJzy#6aS z)PHV_Rggn>uW_w%gF%oBX9O<v`F{0N|MG7<e(<3ux-0$KNArzpQxQm?=DT<AKJ&@_ z@7{m>^ud3NmQa5qBXJ8QffC>!1zNEkt@|;J8-BbhP>V12-kgDi4x&EvgB)wJIZ(=Z ztTL}ODr5k>B5t(&);hM`7tk)P&%W%ZIlOXso{h^wQIgwe9*HfSt1=KM`^XX~6GS4J zXHI;Bhv=G$T#5JALl+X&$_s_Sq^?Yb+%=L^3Xj*2H|^JwQfe-EdB&fVq%%mcI}c+A zjEv(T%XL6X<5M+y6UWB80iu?+XN+PwFCQ@~%MZqCJ7xgPY;|gU=-XzIfc9~`pXE|{ zOiT!9##l~VpIl!0PfPWm9C<0^8o4WUjmt4-$Qb2oG}Lx-;`GzM^pVg0{G;938EUM3 zXj&G5$eA-|WImtIo<8x#&wtGwfA~*!9kLUZff|e;z{Na5%W9=cCq!`cG-G+@@>(r# zR-jOpooG!buGFobiNw)OH#ig?ZWRb*$|sdNUG^G!E#X-z$3-4(NT{;}L|=}=wG0e! zuO>e&Ua?=RdAY$q`L-~7Fs$*))Zhgg&y_yGva#+=o8vvBljR1gtMNvabEb+6fgbUS zv@S;8m+SwmDYuitn)$Ac6t<`QSIZacBbSx_(~A1<i&33au6L?Sr)Wm{zy8R-`s+td zKmNoU-tdM~Pd@qNqybqLf%K_gKsodI-~0H%!zZ8kw`y%`yrRdTUcjjQ`a981DLWNU z(Hm@xiN8n$^Wk{S*9Gs58!}~wfyzDBwNxmRzS%do$wv$L{)_0r#c37wNSqK-xy7#q ze(qNl2)sMJ*J@|#5>nsPk1gb(I@pP$?RQJTM!GB`V|i{8Zt{$pD!zWq&ylpi*54N2 z&CaPs74;(Gi{<MKxg~6)jD|YW;y_OwT#f~(9IrS=&frPuow~H8|5T~!iqZeWC!Y9; zPwxK@`%ic2{`>ErG#-6g#enn=7WUh?PJQ71fAO;mnx7mlN<~vEjY#8CRp2NzBDK)H zK9B}P;%T~iD;>>n8CO<Wg=Q3=n&KkR<$9ogPPy4Bu6SjtBu-M|fNP|b`ws!u?Xzd= zW6JFy^8Ln6sgRxnDxn-oyEZ29*C{Xt{-6eOB{e@ukyqP1K69b`vF|6w#c-%Yq^J`Y z;B7u!a)SigVQoTYs#mkTD8JfvHtH_rYsHNu1?grfvy$as^OsSl*8@Q&p;AFk0HM52 z`aX31%j{%A3hP%Iye<8wD?<P0^9xTtxc|NHK6mb1kMTX`Fa4U#Dh6bD&3pHA=F3NZ z=ipb4?tlBx!L0M7VwMx;O>6VV*3Q%!Y#ocji+OEMkt%~K);D5+;Q++tw{qg7*8o&& z&D|@wo5!Fi*TG(OiM${bLIaxblr*hLAV9eSY;c;}lIL_Fw|HJ0N6?SBb4vvr2BOY; z8fc@s$o-Dsmw96xZG!&MK4rp(*j!JF&08Cv;(#W~SiHswEuxu2(8|4<kxq;j%3T^G zw^dT0-3UC4vPOjSIt<EedThoo>lTGJ>T4Aw0#P!;T#i}39{V`GQoh*sncC#!4^Q%# zZt4G(sQ+Jn`jMab%}0K&U;8*s<IL02w2}cyb)4V6efx=j`73|zXU<(X^+}L>a*y(h z<ed}fv1mh_@+D!`23S?%8_yI5(Ev!V;ht`B);i@7nP>qBC->M|qR!zp09FO%6SlM5 zXffUxhQt8?fqbe6SG_|o=z4^TXSJc2TAy*CXn@JF#bgQ`mvzO}Ha@m5SztM74(`IC z4EV+ygUV8_$2yUn;;;vUoXwXe_D|Omp`uD22iH&FaS8N`Mh3Wun9H!$Ey`Ec__05S zSI|3IgnyedS3xc@nZlm81z@X_uqC;WjTw%=8Z-jnBE=nu*0MZi{V{Hc@!V?P(tn~W zMgJG`jo<sXzxH?E)g7MfUu8vcz#C~*1Jb9BYp%KG^o0u-PCWS7d;V$cS8*K<k&hTK z*n%OOA{4@jjfXlY44QUYz6W%iVEb#i{#cKAK`+B!TySMF_4Yj3pxaaA?CS8~Vd{Vi z1cIm286t!Wu68^2pJbsxP*YDXP7`2AEWlr!avHAbE-Wkq?I5<b5;Po0%e+%|?No)z zbUdQF@yWbsn_T}vzla1i@ZgktfKf@=^$h{1hQ`_u8DB{uRP?Fm*ZQDTerpewH}yAJ zWaw4RX?>rs5Q3}}K!|)Izs7@`YC_`V*L`xPE&Zn#yZ(Rhp|}6V4%_>wt21fFX{B^A z21E`VIM9E}?BoYO@#7C1KKbQ;H!z@z%yyiiB>{nmi8O_diUK<RgoPq@KNLNiNYctB zA;~C*Lj~44kE_=leD)!i6D|fMHJ?nNh0G(2OliG#?%EpL!r_tvaF*ekvawe-F^?MQ z75u?4h~rJHUc8Qy9OzjeQBjA|%<CWe$J!_fkYaVIVUS9<N@hIK${4}K4um~K6ImRF zbxLk`&gR4fr>1OFlL9lg2YN{mU`z)_#g?+a2!{m>vXBD_%_+ctepnO48n;52<3J^r z3bs*zzHiT#{=fM3|0_oy`^ksC@QaULd+oI+x{DX6?8#<Y`XC{d?Dc>Bw%+}(|EfRu zHs-Z`x#M6E%u16JLiBivpbQGElUc9ScFEaxa!;ZXJK)n$z4kC%p7Yiz7?TEao>D#! zyyrF}sIn;*v8y9vE~D@!K#0P?(2qdZ)i30QiA}h1T8Xq?EK7FXJ;;Q0<kwgvaL5Y7 zMhM$uJw>))XZ^%9!3**s0&-(@Sf3+Z3jHG$`4MXmdj_0mpT|Q?ro`9b&RNSNGvvlK zj*r%v>rTeT<PGF0wA04G%d77*V4^StK^Jk#DJuu+Lr7sfT|IDZOaEUS`ahqqKlzKl z{eS*XXV#A#JbChDZ$MU#KKgXA2Bc5JyStB`dUA2YzL$ULmh0~PZs_rnLrno>u=B>g zQ5ua7!i%8f#G$&%K-hvG5y2qmPS(q+I0X=p7ia-K#SgIO4eo{R$UHOf)B<?qBiDh= zNrd2S!>)YjTPNIv_W(fg7!-<Y!p@#gT?Do^YHggGLR{$(7}EmpKz1_U?5{X*;7~@& zrn<3ovc%;tD5j$wz#V^;u?$4fpbCr`<i|1aMkVCKUt^*KV;E0AH5m9I_HC+;5zuzV zhiFUx`9-JypMLy5{+*9J^7EfsUtd2$7a4u@=~4_xpN3b<eD=U^9Dc(cfA}T4ckKIp zX3>>F3Q9`({@4o2jj_Hl@ybdQ2alu>GF!Am+FTAkQQLxJihvcBsW#Y^c13yx4^fb- z1JBJmTmb|kY**}eM_VdjMXnMY*LvANpMfu=RR9PT{cdY4fnM$cuJ$`Bz4J~{(HVIs z@XnxPxujhrCo=#(R4(lMMoQU6;6GoNMtwBVmegXWYf)Yhtb<<QQ|N-AjAK~Sftq33 z(*Lra%T)gl9sj~lzT-oG_nqC@VH$T{Eq(4Irb{&-Jv)ODIdt;z{a=0iTfb#(w(SOn z0e9g)dOcB5qGtxFaDcEga8QLn=KQsh4r&3+ZL07ImCCDp<?>SIH<FaSz1T}kVDYIG zW)V-PXfJ#EQK5=yA}aZCUX};F80Ka$BBfht7lrYiN(u^vEMVV~JLXD-3N+dW?0^aQ zB?C27P|{neYOaB?|CAn#DHnY=*=}we!!`B?g~Bt}``u_lJBi2xl>OQo1ppPa&qa$> zgUKa$Az!FxTl(+QWvu`6#rl&!{7ZlOZ!H#!r@PaB>S~=XAzi8g>C<3Dj-7gP<J`u{ zhhBBd*ME1{Nju6xgA^6Grf7bw{r!p+wKD8Ei)DbXyr4t@e+thg)UUKT{6-#;9(Xfu zPSq)zSEy>=5e3k!)JgFkm)DdIG^nmTo@U*1W2=TkeR_@xk`ysc{W!(oz^DG9QBX_b z#sn4H_i=e_fRHOs(TI7SR%cU|@voMUKc&f`!J*$dmUm!P8-tQ3n|r5{m)O_N2tyq; zT?qZjt$rrj(*Mg?|2seF<oiGQL;u~=Cm#D!w{U*!@BO{M*S~RB=n~R1HX!})(<dK0 zf9EZKfcEWq$v3(jHRVcRlo#)60};v>9t++tEIO4PR}rM5UKohNLxFMykm8>);(ztn zO%M2bFIu6nDr}Rx7lkwYB6#F>Fcls<j}tTn?dUni`dnME{X9M96Jt}SO{LP+l-u!+ z<pkR48cCjiA_tscxEv3K%u+e-aZEy;?0^CKYXBH4n?b1n7cO|pzY|8QC5PUy`tsC* zo-O_N*De$NKX~M`Kl;nR{r`MmV`Jm+nKNfjPra^vS$ZZ0q)&qZna}6+=_fw;=v}vc z+x5G5Uj6%8mfX#6BT!K(mo8!F)&>yIi?VPdDtiz<$yEj5Xb4(4U{tA_Xi7m809;X} zAM2gyB%bWRiR1*^#ssk|Uuf0IRE($NH}(VY>ed7(<ioO#4wu(ly+Kz|%YX-)zTpCR ztr*wA2l%(l;^}ad`E)&xFIS9@$(!hP5vYTz^5+4FE5_Z+2u2jn?odhF$voBNyfzhS z_rmop{m<8*Z~Z@f^1#pk_<O(ahiF{)=%4$zq^T=S7xNrQHFciE@NCG13m1;P=M(?; zkFL+p{jQ+Ei^++8$6UsOuF+Cc%9tWZ4Tm_`RCKb#1$<a2c-i^&7*W9RVKgLNXkCBF zUyuxzoRz>S`apW9WZWw+<b_kLDhCRvkg2`mz>B<6GgXw0fk`TkBcFN=vDjXxO;mbU z>>HqCrJXF=BynRQnjgneg8t=x;JOD&ftB>^h%;bVZ)^t?E9K26TXe1<ZXREP?!bJK z`x77LbQ=xwt~7>rZ~&I{ndeFy96PSxa}8ccn96nrSzpAalIfF17wKe6|1Tr`-{{so ze&m<_+&}Klj?uX8ae<y;dd3E%W3q2w|KhD<k3IRof&cj6kNw?#fhH>zW8O4SLFmSt zHcrKB2eNX2U^3j(p9+u(<N=<I4h7ZEa#Jc{#t9IBEPzDC0M9sUE@eO|+GY&Q5J0hB zl<X{I_Aa7GCzBQ@f$?U^2M8op%Bqk{RH)z?Ga8Aq67r41LtJnd!waO3q$tXd@m!q} zFae`z99_P6UIR4OS4f-6zD2@lv!nza)sdW4K{)ABA<v@ib>zMMjsl*`wq>zM;hwav zJ7AVA{l84~e`CJ><cA*k@xM%?@i<PGuw}QFp6L{praXLyPd$ESM%x~~^(C+WBTTa$ zMNam=sV__ks=8_eZG+<JRK}E|hgx{x>NO!9J>kGB)E8v5N;=+*&ju);5$G5}nL~qW zm1fZ9@_H>V(kAHhS{bU)pz07+^R1Sda-TMCSr>$MW_gJHR1o3fes$UmQkF}i?DRWO zCNDRR1_yFnHZXU46kMpdSZ6}qBr5d<?pLRjYW>7mACaFfg1-vy`6S+)N<o&l^q-$| z{a?`H<ooacp}+9)-~A7t>rM~fbI(1e9)JAtOJ4WD^lTZBKJ_dwcJJOTpL^n?$M3lL zYfoLf@1<{D1wfqMNIioWj5=PJfK@7hJcZ)dn3>44LX%1*mG*4}t16ID129?yTi196 z{(?ZaXgYu;z~~b5>h*D*R<56U*)Wvy66h9fBR~F57R1X>tE(be2iOg;s`dl67YWwN zg!=|Q<u#{ASQq3)gOb6pLd)vrHecj<o^hq#C8^-Ml3`2#>5}#Ti%&i9Pu~BDAO7{d zd-pzl=bd++`1r>^{*2Z=Fg=?Fq)&@(Eu^<>{Lo_`{Nn3w|JEIQcV74Ae7Dj`1<=&e z3dXn)jFtiunU_&X5mfLRVyqkVl)rW@wu30hC%4-o(`1|?H34UW2cAO4S^`fVl|8n@ z{WA8cuP_541z;Du9u+H&4|=B#I41-Ohu_OZP1DE5Hv22KhwC84yu_f^0H!t#M|B`^ zV-P!4yzItQ1Y<xyItK;+VO*kYSB>hH{@W=(xB7qR#A84CQy=)NKhvEZ?y&jzp+kqB z@wx}5XWM}EsW%|~x76vQ55N1<ue<GAx9{D3-J7co4T4lteBIYyD_85_T4(C<GC^(f z#w9LAe#P<I7+9QE(0d#za`!AR{;A+l<cAubXyu-3S3~GqULIi?=C%+gdIgw3yJ~<_ zC_<za>XNd`=2%y{o2tes5)1XknV$Xv*XT0A6pazC8KhW$4HT-LIJbFLMw#mU$}NQv z&rc1UYHi7K%3esf^q=VY*8fAtKmXG|^})aV!|7qce%<3dmFn`0(sN-z`n1^C*cc*_ z`yc(qPrvr|w`||H>-sk#a5%+ee~z8k@=`U84kEh&tO^NNgfs|1Q_z^IAlnjD%wO~7 z@EX<`=`fZ3kn@CgI`522uxkP;HN2NfegU3v>Z9lbW;a&Lz@v5v_psM!#eR#54dRsO zQF)Qdeyd$adU;Hw0${mws7T8_c`giEt*`J}-jIa`4z6pxm}=u}Ww^`>V=WCD9Ceq< z#87Zc|LHl`|ED_R@e}X)3qR5sk0UqVeDl%Mr%#`w6}~WdvFW)oAbop!12VkXQH{t| zJ3AvnaWELb$Zj}+Au2;l93Ux$EP@Uet<iU0Mn$lM+DcSAmKHyi#NjXIEdUe%4Ed+Z zJ?tN?EDE=yjdiw^7?jpIP!!q~z%7q4mu;s&Un^|^Ao9d;!?mAFezYu}*ZRDA4LW-j zS&95-n<$kwh3iHAJUxwu{SvRoK6VulO?%7AbA|4dLr`Ng_Pd^J>Ho8<{|AqJ{-@vm z-oNl;-D&@V#NK$ErRTtS^y#@WAbpa1@4a{a@WT%etNovP{C%H!^~=6#+rHhS5vf^R zJt;h9uH>tfQ!sRc7C<7GW1nZr%i>1;k&mi?HbAOSNFY)b9;zz>HSTAcK^mhH$HyZg zO{b`lXIj#xRIa7i<SO#z5KuX`i5q-yt$r@5VXBW0Q5`6nW0lXjXcsSQ6Z^hVI@)J7 zIYfRqv_(&{hf9%mg$9?u$^dRR<xmgT=)_K<(2hz!Q=o@!*wTN?7t2JM#QRSj+y66f zf8Y1_#^dO9*Ijq`8@}Ni&OBQ?u4?JIG$7O&kKTxEbiZ9BwV+RZ@qM4}jmX~4h^V4y ziXDup1`HI0a}?n5L8U?ft91N>Ok)|zN*rmU&=Gk+lV%-tzN_t%61-~Vrut|69jUZD zT@G~?%0wPa-1G=lj?>9XfX5{b1WyXbJkeLVJ?!u01$f{K<t54)PJa+l3Cs%0<oj-! zL6snZQEqZu*!Zm(b1%!KR3q>dQ(9d9DsSThf1XawV7vP?A)k<D%uats+Wx~yTlyc$ zJPZ0i7?1aU|Bvq6x%1e*efti-@r`fnUsG~X-}kuK#Ps~6ZQb8h-QNw}-*tcKyMF4w zzv<dneqR;@6l5x`t2D_<%HsuA2gCAkpw|n^tgCmCN|)eiJeA6(f-24XSXTlmt;;Do zC{^a$48TCWVg!ml3j(OE&c+1FMCH&EFTB>TwMN-Th$^5brKjh|14aXwE$iokuGX!* zAz0^g<WGVDfiXq;MIS=nbFP!?o+^M>9R|yD<eh*%g?_8GLqa`%yc2z9H%8X~WxFFC za-3ES4N(bjsq?B+a6zu!z1+?={Vn}3Y1Z`r;L&V6j_%sE>&Wrr$4}9?gwXE3XCXbO z5eTHd_xi^4p_FvfS)YE*%fESBzdMVBvgcgBvd_QPLGwj{R}nxEA@|D#eRd`Fp8sXG zJXkjlFjZ8KmG@jP)`fIR8gX&V*DEd`UiWP@KJ8u|-mv|8KJvgttsGjZ{UVVTbA@Nl z?J1O`7}FZa5&1>l+Hv`Hy{PDnHE^9a=YQ;8F2|+ODQL5A2?Jd>rIyQcmKp4)f|fBx z(bKjl32RH>hV+OlkV+PDlC`HMF-AxE^~vcdfMlVg#^RR#(=*fmr;a}Q({F#@U;NST z<k);ZKYafD`TpA;&)TydQ|b9KAbry5toe=|JLHr5f9W$XyZ)=6zV@n{-%R~$;E7<+ zJS3qqP`(pHi1C9yzO$paAjmo)$)JLY>+{()ay0!hS9pj#6XY`hpbW5B%ILDTRm8PR z8g-yI8UfkbV~Ui^RQs}iY+*n4Epl)DjyyVQ&N!d~ljBjx+8IWsK(W@()G$Dty?mu* zx48~1z$XF!QUSrt5tqG=GMFVu!IXVXOu^75aHc4KFm_Q+tVQI27U`=dxW0g^f_a%e z&q;r9d?PsKsHWg?OaCuc|GWQAe(~VP|F3u4_jmqvzuStQ!H1zPH8DN^sW)1Cx-jdy zbLY<8@TOOP*DK$4_uu^Cwb{0pq8}Cq8U>W3C1RRt-VBAQ5X(E>V>gc~<fmz}HwR&7 zYdXOw*M(oJ6{z12MF}<51`fc%ZkoW_jY1s&Ljrh-^?~w*AmQiM<4f>jFB72=DM1XU zWhCUczQTEY?Q^O23mQM3C__XJKnTiFC9mZ#kEz0k2OvNFRQGVL1r%hGihj^`jkJlp ze$WKp{v74J4YbO^s(n-8V6q<ax&-4zw59*6=>Nw2!oiPx?w$YOz6XEmp?=D$!_xj8 zS7+!VziIwV)AJdDXp$fN!5`ds=%I%;&YU?TM^1h5%!yM^f8<p!`?_ysUfWj)+7e~3 zD?+6=0Hr`^bokAKDuq1?v-4uuLzf3Ja=huWpSwpMnH;z#e#$m@Z<q=Lz=W+cFlE;U z&bL~CC}rPKoE9UBW1|0Io2_3_%{fn(5Vn<lo2mf9Wq*+43+2MfcuyYIN+|XlQyHaL z%NX)v6qMUq(5v^Qr(ZFyR5uEGivxeiryo}?@}X46zA5>z@n&L252=+j{8)_MwWlSt zid=2!zwe2$?1lBSkACnIKk~Of^2opc%<kR04}<Y|-Xag<>V-@Fn}By-b=6f@pFVy1 z`tJCezxv02_HSRm_qKZ(xf4_L!V6C0<-Iuc3dW1Y;8JY?%=<LB0Eu;Y@6mfD(L+Y> z9>F_$<R~f<1kyY-0{%TerO-=gr!^!-2cg-JlN^6oHx=!u10Ip@v&c&<+wMau@=>^6 zTNI_x4lSoLRnm!NJs8Es`r%r&54b`vMif#Vi!$nyBI-myvic}E6D99jPmCJ9E_vA( z@_kq8N~100Wk2d#miVC4dB>9#+tPo~|EEuW@tyDa*gt>!m!5jy_d4u6(qU)+TK4DU zA;DGB3lV{6>bqpVzP`S(ckkZ$g$oyE4}Rg7@4w@wH=f<M=OwT2df&at*94{pI3;AD z7ixpWVW6q%@p+|79u#{a)Ut7onIa`-M^)820<-gQND2=ow%hZ=m0!*v=bUQCQw_8w zdySrE30P>j>fR{k)w<o8wuWM#=(>upn*%+e)|gsO08U2>x%En``Rn5v>nB1_5+f-C zN~us`2Oa2jwx^})_i+s>%0OE$$VGor^kqvgq;bxZ^;8WEm0%x@k)yYX^<QLu>cHWL zf8r<K_m_VB`00aR=`i!~b=O^Y^2CV~{p(3y5aZFO7t(-e>WxRgW8gx!5F`(N;eDSw zdG64!z3Qc3|CZS>rPZghQ>O-DIO3?lr7Gj##_~q7HZ|ePd(miJLvW-f-&Em%s(@nU z>YyzZ{-H0b3Pw~n7+8lI0SUlRqfvsxaKyFyWo-hyvg<qO%K(OWjNT&BE^ESj>?5-P zf~7HQ8;HnHjb9FB@~AO8fM=pgOJYCb_!5z8e+izEzZ{{FnRX}d6?yYK*5$Yc+NHK| z#c3hezRjxt7uHYhfB(mR=&$|Cr+)0i9Y!9#=9+7sKG~(tcswiL^mr!eaxfr$($}60 z9dhu<{?i}%?7#c}Uh}eVnC;ztLwfxQhpu9}_=G}Gf<aZK8IO78T1(}&V=e^A&wa<T zT)<4J$WwsERb?acAnd(orc$}ubZW}9N>6d&>6dMi$?N{wbY1ux*Gc?Xdl1(8Wd**x z#~JD*4n{3{)8)0uzx~^iuSmNlBNV_G=|J1q(`I+Xq0CrkF`nZBNQD=2d9dwhJRO}) zsQ-sgJpQg<_^p5Vzdd&76JP3PYx-SQhrjU~zwz|rk3asrY|~wqE*AsRCw*3=HzIvB z!uRk0<=?q__w}E;@tRk>xr;{j_L)jAgzdk=3-t<IQxc;T7q^g(zfVwWJ(*B2=H^%* zQJoK@Q&T9;`AQ(T*cAI>8JM@gvr@kB@Zxce1_GdsYn*0VEpd~t_+)gwEKYxwJ8Aq_ z`Fi}cP`F3YkQhCbV>@QxNFXm!>E+h>skbc}l!|dBGp<r~Od_qCEJ>}EP}i8pN5vHG z*Uqn8{hx2FKl#Zoyypjg?!*7!o#!@=e`Wjj?MFHTa_ruF?>+b4_rCXeUo3B>XNo@0 zMdG{ex@-Hx4?o-+jBEP8+irUO&ENUvzxH3>a{X(+x15@x>UkjPl+O#0DN0pAdc|qZ zy-qeG{mR6BsqnU(zQ2#<J-9EUnSnHUceU-NQ~Vf&$wd2FEuhr5<(Ndime&Cwv;zO_ z^J$*7j(ml=vITnCc>8k50};YoqrVfGWd^k_BSg!Mug@EeZJP$_5#}k!$k#-Ki_tZG zh;@|hyR!8E$jJlm{Ken?CqMbbS3dm|jjv(v|N324ebn)St#{PY<!C_q)bq7=<Bd1& zI&|pJU_`pVy>GhnZMT2t-GBXux2^5ErSx?CU=#v|N(=H_2bxmA3K~terFyO9akOZZ zyF;exz`N~wYT#N|*joFMuVrnZX5D&5uAh^KTYIL&)#v$YmZ8$HAwW^Oi!`T<<Z|Ou z8juzsiEgi&09(Jahlr@M6RXOvr&|Z&nmjYyDR-;+zR<L~4EVlj8-Z#5WMV9?4E;ZQ z;lzWV*#C?F{JsZ&`r#crcAV%x0M%VSN#ic7IbBSrKTqj$H6WV$t-d?<?c2AvTQj=4 zJMI_N_x$NU_>aE(j+@^2=c6H64ve*Ybs>t^2*4@|QeCj70jJDUdP%j&gvcx6G%!Qk z5IYN{7^ymsn*6Sra@%OlYb2^EUTkye4HDHr1tXCfUy*LT?&aeU$G3VvbLq!ts@#+z zp3dL)ke9W;E)V{A%7f1J^nJcCW0&twfM^Z0`xK+x)%$>`1<2*`i&y^_GC%d@Ll6JV zJMQ}*er{u9qkr{!Z#a(KdFP#H_V3?+*+m_gE_Vac4@@^c+^^N_>i(|UxpU{W=g*(t z`=(ca_Z?sNsz3V2Zn^$7-)p&-44MN`EwNmgR>^DkwIY9K_!ot+0SLA8kzz#=q97OG zQS!3P>uV>kkmgO7bei6G!4JFQ%ccdqXTFSItQUZQ>Rx$i)WUv$$A8&hEhD>(yQaY> zYSzC>|6X(-!C2Oe&~on|`6XIK?v_nE(M8MYi%b7|!|~M7FTCshAN%M3?ujFxIow4Z zr@FO{W2aA_?xT)=d+uc!bzr*e4G1J%8`<3*@9R4Inl8k<s-M>Smb?Dk_g%a9mhUVI z6d>L5YC;Nvw%q$G^Ty*AZHjom0^O<WQ@pM+{e<O>z2!1ooi<ugIopai1w4Irxd;ia zc&nB2G3r?*`pJ2Ostf)X1Lh^ywehTY;YHo6(~j4Oz)@&Lr7MAHyWDi-Jne`ee^W-| za@PODC!ToMFaG8~{^<ipAJ+F*^+scODDVe=@CPq+f0u34f$7C$K!$Yhz4xwt<Rc&1 zap1s#t9I?$b@jP(=k|71d(Z1{{X@6C^=rQ8&tJ3mmbbY<i-0|(iU-*oZ10_}Hifdv z^?I7}vM<gfs(Xr;stj$qtKEwpe9hy}siDB_`mk-0$cjKyJOWKr^CUgr%lPxTYM@Wf z>o?w4m$Q1iY6d;?U#!C{t0x{4)uxULW79P7W!+QJ^h*7k`m)G-nd$%WQwQJw>%a4_ zf9iq9-uFaz+D})V?55~XbW`+aI&8b}&Ue0ZK^FrUFK~L%8IY9to_p?DyYIgHhH0(z z*YDce^QJrh*sb4k*Pr>my}Pe_<F>V(w={~6|K^Z#8fY$FXc{SbiH09gcL64zFULbw zDTussPXSHE8&@9E?Ygm|sxn<_|19$+k^YeHq9Trx-t=|2Rvn9wa-QWL@MKy7aJ4=v zjac1-UnLc?)|9OV&(W?l=`XLpW}G$Gv@thkR@>z9{OZ3f7N?#%w*Ou4``8ct`vXTF z?%$f*8;(BeICb;QH=lm$si$5P(^a+fVl^N`>cYHP_t)>%+Ii^Ep*=Jjk$qi6vTJ>P zeaD}E>pyzi?KgeRy*sw;xpS(ex{&O^ah2(wm4)@<J*k{OF}BRJTFnbytzM*>L4{~J zs8-VyF!+3hS4tDpcEOlrr}|=3(eBm3R~>>pM$MgbtuzJN&>tq8P)|Au_bxU~M+##O znlzw|^Kh*d5j`828Fy=G-6?=r+BeUY{+~U6{J|q95B&NEANaBNK6UKTV_p8!-L!je zIP|Z7=B<DB?L{$NRZA~w0|IGw_uY4|-GBf6JNNG0yJur#V{bRLwMPxf*S_LAZvED; z`QGpCqLMdlTia2MN*v5hfyxSsns=RG=?M67Tj794Gg?VmpR?rQ+uGbl=K_FgihIfE zt{f%8OE}gm&jggv+&gg3ZRkOJk=s)T#%G>TW-eyhF{fpqNwCIK80;7cUV4u<Bj=V( zIN>oG<E<c>J^!;=)}#Js#uZ1)2u<?&Z0P@DF+X+i*yrDM@W^LB`JRvcv-`VC>)m?o z+0JnE&v9HahC|bpVn8(Y2s}h2odMa|8InC`&z|iglU?a=+jsr`zj5~+H@)#K`>wk2 zjXTy_kx6j5L25E!l7c2T6x&PM2nZ8ETD{kjR#b9s<VBvXMQGei5ouZyF4h2O{`70x zIDt+PL5==)jMn^hv`#D3-@F~(wwk?U114%bfqW?`IuxXi!%BTx8*98JiQP7>sl{Bp z;0=gtKpIb~L>be4?ZBRSc~2H~rGs?6Y0R2@Oqjo>++UpjUsyl0zl$_}<B7wMJn)|$ z_>ud&cJ?ocJ>MIS*=%;E!=m13^v`niTXL@m!=dR)Ga#D!cJ;<&`*qh{x3jbUyHB4! zy{8+{-Q98jmf!ww+t=Rt9WTG@*0;Xt#;fmm<5jz_e<MaGaVO45a(rF5$?7Orqv9>7 zsdx=Zoe*s$K&U)Uu=6eDPbw67f^PrANmpxOL&-*q7I$5}3P2HY1x#rGLCent!0Q5S zNk1w&Wj}HnRE-x(zNe9xGRjs%JNYuYA;N$@(&3fp_%fI$U0*UrUXEJysqSD<s|XnO zhU|~@s8ZL2VO%-k_y=yYe3VX=m%&kf$0Gsu+xmZD<NU$1=MF#k)QK-W_?r*C<JS%x zefW5~d9K5l^Bu<Y#-d;6ICtx<x1R6TIX1f4kvUyKhC|b(j@*kW_0q8|{q5YdXV0$1 zVlhN0-TAI=nrlbrE%eWstn~)vl`sAJJ703uZLhw%i%@oL-+SkbXM0D_r#iWlQdEYv z2U7rOkyKErLbFDjjP3wbHJV@`K(TX;%uD!cfPb!+g7KLG2LX}@{Mx?_0B?GjR#!F} z!Fz3kSY;%OHll%CGLBWyA}ZU2^*540AL_U@#}|30>G~aeYFL!-3BHQ{uY+?wOk|u~ z3R!z9GUC@1&^hycuTFwif)1TI4l+1MR9tVRx*=OEHcp*Bf9$~v>t_!>dF;^#KmNJ@ z@X3QmA34#@ZVWGg?eJs0k2Yw0ZsTnF?Wd@&xM-u6HiH4tq;5oSEVie=-iYi7zk0tn zJhNM`yKCR;U-@mXx#jxT+_`(l-dpzWy6(=k*|xnqws+HClR#0X==rSD{Rs3k1|SOn zY&6HFmSAFFF?#e^E&xFR?h$5N?Mb;Or{f}z6NV?ysT&!hw%1Sf)CBr=ioE9Ng?+mm zfF-V{JoLi2RL8YF25p*=muM(z{pydErIwh-e)fHoY#woAhO5>8Wkeh4S|7E?P|L)A zt3|;51ATMZICbvA$^GXpoIZH=!pVbA9eMQ8Pk-rG9zAgA;r{syebMV88I0kDuQVEq z^W7}Rg<ZRLtv~tXlN%|Y&<ewKC8X6g=*miJOmxj;`=LXJwsi~eJ5HTCwY?LD9bJUd z8xf6MI=R`t)(OsR+qP}9&im-g@vS%BwfFbk@$IkPy>s8bt9QTTmThah_U`G7%#Q6> z-7;9JwOzMt>x|88wzjtni34!Zlwkn?2p$|NgvZ+or~=rpGR0H%?qgXOBs2_4g`a#) zqIbG{BSG1hc)$N=(cqslPe^09vVwOymO=iEDL)S4>WWSGd`rf|+L+ihn?U=#LGk@z zbgKPCbw11>j_nd@0YCC(eX4$r$_Penk)JYon6FQBl2wF#n=_RC*Dq+#y9h!$<8XfC z?7_wS!l|<tP93~3KX>Zf`k7Nt9{ud2Cr&(h^3zXz_+Y2g(&_f1k1RS}mrmF96BEN5 z!g~YJVZwzDBQ`pW&<JBaRjylbH-*u_v{?;EOoKtW=bn3J_uY5j+Dl*h(zVW;7^bzl zzwO<$*Y-1K&TJ!#PS(1)&Taiy6nn$cozHsXLS~eR;8ppZVDc^dUbFY68*bZo({-=A zrBf;1v-9e`yE>D#=)mskUDw}2vso|kozdB`cgMCJdr5jS3)-=L?=8`r?a#Jv+jUFX z1n;5s#*6zYIHJiZswu-Woh(uqtK<qOsl7{!;>A6-c2xjRc^k|E-XA<)v?@fn1+$g< zatm3Mkzlqpt}{GOl$)FD@oOCH`mvl&S=P6a1{+{X>3G)-M57LDSE8w=Db`aDBGCx5 zyY7uO^jr74zPNDEs`thm>sZV;hA04AF<-2ons=bz8*T0go}XVhJ)fUHrFEP-ckE!V zKN}loPMtn`^5mKGM^7C;_tbFzq5U6tveP^24Fh>_N3h?3-^I?IJJ-*jKR@5Sd-wX; yvuFE!y`flKfBp3vM~)oPcT(wE#-=nFG5!BmhkB$Vzyrtt0000<MNUMnLSTYWkJv;2 literal 0 HcmV?d00001 diff --git a/src/authenticators/farcaster/signers/NounspaceManagedSignerAuthenticator.tsx b/src/authenticators/farcaster/signers/NounspaceManagedSignerAuthenticator.tsx index afd2f8c8..5c10daa6 100644 --- a/src/authenticators/farcaster/signers/NounspaceManagedSignerAuthenticator.tsx +++ b/src/authenticators/farcaster/signers/NounspaceManagedSignerAuthenticator.tsx @@ -240,11 +240,36 @@ const initializer: AuthenticatorInitializer< return ( <div className="flex flex-col justify-center items-center align-center"> - <h1 className="text-4xl font-extrabold">Connect Farcaster</h1> + <h1 className="text-4xl font-extrabold justify-start"> + Connect Farcaster + </h1> {isUndefined(data.status) || !isDataInitialized(data) || data.status === "revoked" ? ( - <Button onClick={createSigner}>Link Warpcast Account</Button> + <> + <p className="text-lg text-gray-500 mt-4"> + Use of Nounspace requires a Farcaster account. Click the button + below to connect your Farcaster account via Warpcast. + </p> + <Button + style={{ + backgroundColor: "#7a5fbb", + display: "flex", + alignItems: "center", + gap: "6px", + marginTop: "2em", + }} + className="px-10" + onClick={createSigner} + > + <span>Sign in with</span> + <img + src="/images/farcaster_nude.png" + alt="Icon" + style={{ width: "22px", height: "22px" }} + /> + </Button> + </> ) : loading && warpcastSignerUrl ? ( <> <div className="text-center mt-4"> diff --git a/src/common/components/molecules/Modal.tsx b/src/common/components/molecules/Modal.tsx index d3d7d2dd..6adc616c 100644 --- a/src/common/components/molecules/Modal.tsx +++ b/src/common/components/molecules/Modal.tsx @@ -35,7 +35,7 @@ const Modal = ({ <Dialog.Content className={mergeClasses( "data-[state=open]:animate-contentShow fixed bg-background top-[40%]", - "left-[50%] w-[100vw] max-w-[600px] translate-x-[-50%] translate-y-[-40%] rounded-[30px] p-[25px]", + "left-[50%] w-[100vw] max-w-[600px] translate-x-[-50%] translate-y-[-40%] rounded-[10px] p-[25px]", "shadow-[hsl(206_22%_7%_/_35%)_0px_10px_38px_-10px,_hsl(206_22%_7%_/_20%)_0px_10px_20px_-15px] focus:outline-none", "z-50", )} @@ -67,7 +67,7 @@ const Modal = ({ {showClose ? ( <Dialog.Close asChild> <button - className="text-card-foreground/80 bg-background/90 focus:shadow-background/90 absolute top-[10px] right-[10px] inline-flex h-[25px] w-[25px] appearance-none items-center justify-center rounded-full focus:shadow-[0_0_0_2px] focus:outline-none" + className=" text-gray-400 text-card-foreground/80 bg-background/90 focus:shadow-background/90 absolute top-[10px] right-[10px] inline-flex h-[25px] w-[25px] appearance-none items-center justify-center rounded-full focus:shadow-[0_0_0_2px] focus:outline-none" aria-label="Close" > <Cross2Icon /> From 58db3494b3f08c724262ba30b52633190d15b25e Mon Sep 17 00:00:00 2001 From: Vlad 2 <116202536+sktbrd@users.noreply.github.com> Date: Thu, 12 Sep 2024 10:37:43 -0300 Subject: [PATCH 22/23] sponsor everyones auth sign (#414) --- src/pages/api/signerRequests.ts | 36 ++++++++++++++++----------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/pages/api/signerRequests.ts b/src/pages/api/signerRequests.ts index b9bf290f..0363ed97 100644 --- a/src/pages/api/signerRequests.ts +++ b/src/pages/api/signerRequests.ts @@ -101,24 +101,24 @@ async function handlePost( }, }); - // TO DO: Change who get's sponsorship as we leave Alpha and move forward - let shouldSponsor = false; - if (!isUndefined(requestingWallet)) { - try { - const { data } = await axios.get<AlchemyIsHolderOfContract>( - `${ALCHEMY_API("base")}nft/v3/${process.env.NEXT_PUBLIC_ALCHEMY_API_KEY}/isHolderOfContract`, - { - params: { - wallet: requestingWallet, - contractAddress: NOGS_CONTRACT_ADDR, - }, - }, - ); - shouldSponsor = data.isHolderOfContract; - } catch (e) { - console.error(e); - } - } + // We are sponsoring everything for now, set to false and uncomment below to token Gate + const shouldSponsor = true; // let shouldSponsor = false; + // if (!isUndefined(requestingWallet)) { + // try { + // const { data } = await axios.get<AlchemyIsHolderOfContract>( + // `${ALCHEMY_API("base")}nft/v3/${process.env.NEXT_PUBLIC_ALCHEMY_API_KEY}/isHolderOfContract`, + // { + // params: { + // wallet: requestingWallet, + // contractAddress: NOGS_CONTRACT_ADDR, + // }, + // }, + // ); + // shouldSponsor = data.isHolderOfContract + // } catch (e) { + // console.error(e); + // } + // } let sponsorship: SignedKeyRequestSponsorship | undefined = undefined; if (shouldSponsor) { From f3a8ea4d9df3996549f9c7fe940ac61cbf31d608 Mon Sep 17 00:00:00 2001 From: Jesse Paterson <jesse.r.pat@gmail.com> Date: Thu, 12 Sep 2024 08:41:44 -0500 Subject: [PATCH 23/23] Update package.json to v 0.0.10 (#424) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 78fb06f6..2d0b1b39 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Nounspace", - "version": "0.0.9", + "version": "0.0.10", "license": "", "private": true, "scripts": {