From 56a401f1a2061b994a470a5a386bad06f5cf4960 Mon Sep 17 00:00:00 2001 From: Anang Yusman Date: Thu, 18 Apr 2024 14:53:51 +0700 Subject: [PATCH] feat:add create, table magazine, master menu-data, master-module --- .../master-menu/menu-data/create/page.tsx | 12 + .../master/master-menu/menu-data/page.tsx | 11 + .../master/master-module/create/page.tsx | 13 + app/admin/master/master-module/page.tsx | 12 + components/form/magazine/magazine-form.tsx | 26 +- .../master-menu/menu-data/menu-data-form.tsx | 397 ++++++++++++++++++ .../master-module/master-module-form.tsx | 294 +++++++++++++ components/table/magazine/magazine-table.tsx | 10 - .../master-menu/menu-data/menu-data-table.tsx | 231 ++++++++++ .../master-module/master-module-table.tsx | 224 ++++++++++ package-lock.json | 136 ++++++ package.json | 1 + public/account-category.jpg | Bin 0 -> 20577 bytes 13 files changed, 1347 insertions(+), 20 deletions(-) create mode 100644 app/admin/master/master-menu/menu-data/create/page.tsx create mode 100644 app/admin/master/master-menu/menu-data/page.tsx create mode 100644 app/admin/master/master-module/create/page.tsx create mode 100644 app/admin/master/master-module/page.tsx create mode 100644 components/form/master/master-menu/menu-data/menu-data-form.tsx create mode 100644 components/form/master/master-module/master-module-form.tsx create mode 100644 components/table/master/master-menu/menu-data/menu-data-table.tsx create mode 100644 components/table/master/master-module/master-module-table.tsx create mode 100644 public/account-category.jpg diff --git a/app/admin/master/master-menu/menu-data/create/page.tsx b/app/admin/master/master-menu/menu-data/create/page.tsx new file mode 100644 index 0000000..966e952 --- /dev/null +++ b/app/admin/master/master-menu/menu-data/create/page.tsx @@ -0,0 +1,12 @@ +import CreateMagazineForm from '@/components/form/magazine/magazine-form' +import CreateMenuDataForm from '@/components/form/master/master-menu/menu-data/menu-data-form' +import MagazineTable from '@/components/table/magazine/magazine-table' +import React from 'react' + +const AdminMenuDataCreate = () => { + return ( +
+ ) +} + +export default AdminMenuDataCreate \ No newline at end of file diff --git a/app/admin/master/master-menu/menu-data/page.tsx b/app/admin/master/master-menu/menu-data/page.tsx new file mode 100644 index 0000000..b780a00 --- /dev/null +++ b/app/admin/master/master-menu/menu-data/page.tsx @@ -0,0 +1,11 @@ +import MagazineTable from '@/components/table/magazine/magazine-table' +import MenuDataTable from '@/components/table/master/master-menu/menu-data/menu-data-table' +import React from 'react' + +const AdminMenuData = () => { + return ( +
+ ) +} + +export default AdminMenuData \ No newline at end of file diff --git a/app/admin/master/master-module/create/page.tsx b/app/admin/master/master-module/create/page.tsx new file mode 100644 index 0000000..8b7a4e2 --- /dev/null +++ b/app/admin/master/master-module/create/page.tsx @@ -0,0 +1,13 @@ +import CreateMagazineForm from '@/components/form/magazine/magazine-form' +import CreateMenuDataForm from '@/components/form/master/master-menu/menu-data/menu-data-form' +import CreateMasterModuleForm from '@/components/form/master/master-module/master-module-form' +import MagazineTable from '@/components/table/magazine/magazine-table' +import React from 'react' + +const AdminMasterModuleCreate = () => { + return ( +
+ ) +} + +export default AdminMasterModuleCreate \ No newline at end of file diff --git a/app/admin/master/master-module/page.tsx b/app/admin/master/master-module/page.tsx new file mode 100644 index 0000000..75eb767 --- /dev/null +++ b/app/admin/master/master-module/page.tsx @@ -0,0 +1,12 @@ +import MagazineTable from '@/components/table/magazine/magazine-table' +import MenuDataTable from '@/components/table/master/master-menu/menu-data/menu-data-table' +import MasterModuleTable from '@/components/table/master/master-module/master-module-table' +import React from 'react' + +const AdminMasterModule = () => { + return ( +
+ ) +} + +export default AdminMasterModule \ No newline at end of file diff --git a/components/form/magazine/magazine-form.tsx b/components/form/magazine/magazine-form.tsx index e8eed6f..94f3e13 100644 --- a/components/form/magazine/magazine-form.tsx +++ b/components/form/magazine/magazine-form.tsx @@ -12,6 +12,7 @@ import dynamic from 'next/dynamic'; import { useForm } from "react-hook-form"; import * as z from "zod"; import { zodResolver } from "@hookform/resolvers/zod"; +import parse from 'html-react-parser'; export default function CreateMagazineForm() { const router = useRouter(); @@ -68,13 +69,17 @@ export default function CreateMagazineForm() { const { register, handleSubmit, formState: { errors }, formState, setValue } = useForm(formOptions); const save = async (data: any) => { - + const parsedContent = parse(content); + console.log(parsedContent); const request = { title: data.title, slug: data.slug, articleBody: data.articleBody, status: 1, }; + + console.log(request); + // loading(); // // const res = await saveManualContext(request); // if (res.error) { @@ -176,6 +181,16 @@ export default function CreateMagazineForm() { )} + +
+

Description

+ setContent(newContent)} + className="dark:text-black" + /> +

Upload File (Opsional)

@@ -223,15 +238,6 @@ export default function CreateMagazineForm() { )) }
-
-

Description

- setContent(newContent)} - className="dark:text-black" - /> -
{" "} + + +
+
+
+
+ NextUI hero Image +
+
+ + + + + + + + + ) +} diff --git a/components/form/master/master-module/master-module-form.tsx b/components/form/master/master-module/master-module-form.tsx new file mode 100644 index 0000000..a08aa9b --- /dev/null +++ b/components/form/master/master-module/master-module-form.tsx @@ -0,0 +1,294 @@ +'use client' +import { Button } from "@nextui-org/button"; +import { Card, Checkbox, CheckboxGroup, Divider, Image, Input, Radio, RadioGroup, Select, SelectItem, SelectSection, Slider, Switch, Tab, Table, Tabs, Textarea, User } from "@nextui-org/react"; +import React, { useCallback, useEffect, useMemo, useRef, useState } from "react"; +import { TimesIcon } from "@/components/icons"; +import Link from "next/link"; +import { useRouter } from "next/navigation"; +import { close, error, loading } from "@/config/swal"; +import Swal from 'sweetalert2'; +import withReactContent from 'sweetalert2-react-content'; +import dynamic from 'next/dynamic'; +import { useForm } from "react-hook-form"; +import * as z from "zod"; +import { zodResolver } from "@hookform/resolvers/zod"; + +const platform = [ + { label: "Article", value: "article", id: 1 }, + { label: "Caption", value: "caption", id: 2 }, + { label: "Meme", value: "meme", id: 3 }, + { label: "Video", value: "video", id: 4 }, + { label: "Master Data", value: "master-data", id: 5 }, +]; + +export default function CreateMasterModuleForm() { + const router = useRouter(); + const JoditEditor = dynamic(() => import('jodit-react'), { ssr: false }); + const MySwal = withReactContent(Swal); + const [isVisible, setIsVisible] = useState(false); + const [tabs, setTabs] = useState("personal-info") + const editor = useRef(null); + const [content, setContent] = useState(''); + const [haveChildren, setHaveChildren] = useState("no"); + const [active, setActive] = useState("1"); + const handleTab = (tab: any) => { + setTabs(tab); + }; + + const handleActive = (e: React.ChangeEvent) => { + setActive(e.target.value); + }; + + const handleHaveChildren = (e: React.ChangeEvent) => { + setHaveChildren(e.target.value); + }; + + let [files, setFiles] = useState([]); + + const removeFile = (name: string) => { + const arrayFile: File[] = []; + for (const element of files) { + if (element.name !== name) { + arrayFile.push(element); + } + } + setFiles(arrayFile); + }; + + const handleFileChange = (event: any) => { + const newFiles: FileList | null = event.target.files; + if (newFiles) { + const allowedExtensions = ['.doc', '.docx', '.pdf', '.ppt', '.pptx', '.xlsx', '.csv']; + let temp: File[] = [...files]; // Salin file-file yang sudah ada + for (let i = 0; i < newFiles.length; i++) { + const file = newFiles[i]; + const fileExtension = file.name.split('.').pop()?.toLowerCase(); + if (fileExtension && allowedExtensions.includes(`.${fileExtension}`)) { + temp.push(file); + } else { + alert('Format file tidak valid. Hanya file .doc, .docx, .ppt, .pptx, .xlsx, .csv atau .pdf yang diperbolehkan.'); + } + } + setFiles(temp); + } + }; + + const toggleVisibility = () => setIsVisible(!isVisible); + + const validationSchema = z.object({ + name: z.string().min(1, { message: "Required" }), + description: z.string().min(1, { message: "Required" }), + pathUrl: z.string().min(1, { message: "Required" }), + }); + + const formOptions = { resolver: zodResolver(validationSchema) }; + type ArticleSchema = z.infer; + + const { register, handleSubmit, formState: { errors }, formState, setValue } = useForm(formOptions); + + const save = async (data: any) => { + + const request = { + name: data.name, + description: data.description, + pathUrl: data.pathUrl, + status: 1, + }; + + console.log(request); + // loading(); + // // const res = await saveManualContext(request); + // if (res.error) { + // error(res.message); + // return false; + // } + close(); + successSubmit("/admin/master/master-module") + } + + async function onSubmit(data: any) { + MySwal.fire({ + title: "Save Data", + text: "", + icon: "warning", + showCancelButton: true, + cancelButtonColor: "#d33", + confirmButtonColor: "#3085d6", + confirmButtonText: "Save", + }).then((result) => { + if (result.isConfirmed) { + save(data); + } + }); + } + + function successSubmit(redirect: string) { + MySwal.fire({ + title: 'Sukses', + icon: 'success', + confirmButtonColor: '#3085d6', + confirmButtonText: 'OK', + }).then((result) => { + if (result.isConfirmed) { + router.push(redirect); + } + }); + } + + return ( +
+
+ +
+
+ <> +
+
+
+ + +
+ } + /> + {errors.name?.message && ( +

+ {errors.name?.message} +

+ )} +
+
+ + +
+ } + /> + {errors.description?.message && ( +

+ {errors.description?.message} +

+ )} +
+
+ + +
+ } + /> + {errors.description?.message && ( +

+ {errors.description?.message} +

+ )} +
+
+ + + + Active + + + Inactive + + +
+
+ + {" "} + + +
+
+
+
+ NextUI hero Image +
+
+
+ + + + + + + + ) +} diff --git a/components/table/magazine/magazine-table.tsx b/components/table/magazine/magazine-table.tsx index cc98c8c..a4948eb 100644 --- a/components/table/magazine/magazine-table.tsx +++ b/components/table/magazine/magazine-table.tsx @@ -142,33 +142,25 @@ export default function MagazineTable() { - Detail - - Edit - - @@ -179,9 +171,7 @@ export default function MagazineTable() { /> Delete - - diff --git a/components/table/master/master-menu/menu-data/menu-data-table.tsx b/components/table/master/master-menu/menu-data/menu-data-table.tsx new file mode 100644 index 0000000..7f8f43d --- /dev/null +++ b/components/table/master/master-menu/menu-data/menu-data-table.tsx @@ -0,0 +1,231 @@ +"use client"; +import { + TableCell, + TableRow, + Table, + TableHeader, + TableColumn, + TableBody, + Pagination, + Dropdown, + DropdownTrigger, + DropdownMenu, + DropdownItem, + Input, + User, + Card, + Divider, + Chip, + ChipProps, +} from "@nextui-org/react"; +import { Button } from "@nextui-org/button"; +import React, { Key, useCallback, useMemo, useState } from "react"; +import { + AddIcon, + CreateIconIon, + DeleteIcon, + DotsYIcon, + EyeFilledIcon, + EyeIconMdi, +} from "@/components/icons"; +import Link from "next/link"; + +type UserObject = { + id: number; + name: string; + status: string; + description: string; + moduleName: string; + pathUrl: string; +}; + +const statusColorMap = { + active: "success", + paused: "danger", + vacation: "warning", +}; + + +export default function MenuDataTable() { + type TableRow = (typeof menuDataTable)[0]; + + const columns = [ + { name: "No", uid: "no" }, + { name: "Name", uid: "name" }, + { name: "Description", uid: "description" }, + { name: "Module Name", uid: "moduleName" }, + { name: "Path URL", uid: "pathUrl" }, + { name: "Status", uid: "status" }, + { name: "Action", uid: "actions" }, + ]; + + const menuDataTable = [ + { + id: 1, + name: "AI Journalist ", + status: "active", + description: "AI Journalist", + moduleName: "Multipool Acts", + pathUrl: "/admin/acts", + }, + { + id: 2, + name: "AI Journalist ", + status: "active", + description: "AI Journalist", + moduleName: "Multipool Acts", + pathUrl: "/admin/acts", + }, + { + id: 3, + name: "AI Journalist ", + status: "active", + description: "AI Journalist", + moduleName: "Multipool Acts", + pathUrl: "/admin/acts", + }, + { + id: 4, + name: "AI Journalist ", + status: "active", + description: "AI Journalist", + moduleName: "Multipool Acts", + pathUrl: "/admin/acts", + }, + { + id: 5, + name: "AI Journalist ", + status: "active", + description: "AI Journalist", + moduleName: "Multipool Acts", + pathUrl: "/admin/acts", + }, + ]; + + const renderCell = useCallback((menuData: TableRow, columnKey: Key) => { + const cellValue = menuData[columnKey as keyof UserObject]; + const statusColorMap: Record = { + active: "success", + cancel: "danger", + pending: "warning", + }; + + switch (columnKey) { + case "no": + return ( +
{menuData.id}
+ ) + + case "name": + return ( +
{menuData.name}
+ ) + + case "description": + return ( +
{menuData.description}
+ ) + + case "status": + return ( + +
+ {cellValue} +
+
+ ); + + case "actions": + return ( +
+ + + + + + + + + Detail + + + + + + Edit + + + + + + Delete + + + + +
+ ); + + default: + return cellValue; + } + }, []); + + return ( + <> +
+ + + +
+ + + {(column) => ( + {column.name} + )} + + + {(item) => ( + + {(columnKey) => ( + {renderCell(item, columnKey)} + )} + + )} + +
+
+
+ + + ); +} diff --git a/components/table/master/master-module/master-module-table.tsx b/components/table/master/master-module/master-module-table.tsx new file mode 100644 index 0000000..3bad23b --- /dev/null +++ b/components/table/master/master-module/master-module-table.tsx @@ -0,0 +1,224 @@ +"use client"; +import { + TableCell, + TableRow, + Table, + TableHeader, + TableColumn, + TableBody, + Pagination, + Dropdown, + DropdownTrigger, + DropdownMenu, + DropdownItem, + Input, + User, + Card, + Divider, + Chip, + ChipProps, +} from "@nextui-org/react"; +import { Button } from "@nextui-org/button"; +import React, { Key, useCallback, useMemo, useState } from "react"; +import { + AddIcon, + CreateIconIon, + DeleteIcon, + DotsYIcon, + EyeFilledIcon, + EyeIconMdi, +} from "@/components/icons"; +import Link from "next/link"; + +type UserObject = { + id: number; + name: string; + status: string; + description: string; + pathUrl: string; +}; + +const statusColorMap = { + active: "success", + paused: "danger", + vacation: "warning", +}; + + +export default function MasterModuleTable() { + type TableRow = (typeof masterModuleTable)[0]; + + const columns = [ + { name: "No", uid: "no" }, + { name: "Name", uid: "name" }, + { name: "Description", uid: "description" }, + { name: "Path URL", uid: "pathUrl" }, + { name: "Status", uid: "status" }, + { name: "Action", uid: "actions" }, + ]; + + const masterModuleTable = [ + { + id: 1, + name: "AI Journalist ", + status: "active", + description: "AI Journalist", + pathUrl: "/admin/acts", + }, + { + id: 2, + name: "AI Journalist ", + status: "active", + description: "AI Journalist", + pathUrl: "/admin/acts", + }, + { + id: 3, + name: "AI Journalist ", + status: "active", + description: "AI Journalist", + pathUrl: "/admin/acts", + }, + { + id: 4, + name: "AI Journalist ", + status: "active", + description: "AI Journalist", + pathUrl: "/admin/acts", + }, + { + id: 5, + name: "AI Journalist ", + status: "active", + description: "AI Journalist", + pathUrl: "/admin/acts", + }, + ]; + + const renderCell = useCallback((masterModule: TableRow, columnKey: Key) => { + const cellValue = masterModule[columnKey as keyof UserObject]; + const statusColorMap: Record = { + active: "success", + cancel: "danger", + pending: "warning", + }; + + switch (columnKey) { + case "no": + return ( +
{masterModule.id}
+ ) + + case "name": + return ( +
{masterModule.name}
+ ) + + case "description": + return ( +
{masterModule.description}
+ ) + + case "status": + return ( + +
+ {cellValue} +
+
+ ); + + case "actions": + return ( +
+ + + + + + + + + Detail + + + + + + Edit + + + + + + Delete + + + + +
+ ); + + default: + return cellValue; + } + }, []); + + return ( + <> +
+ + + +
+ + + {(column) => ( + {column.name} + )} + + + {(item) => ( + + {(columnKey) => ( + {renderCell(item, columnKey)} + )} + + )} + +
+
+
+ + + ); +} diff --git a/package-lock.json b/package-lock.json index 64674b1..fdd840a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "eslint": "8.48.0", "eslint-config-next": "14.0.2", "framer-motion": "^10.18.0", + "html-react-parser": "^5.1.10", "intl-messageformat": "^10.5.0", "jodit-react": "^4.0.25", "next": "14.0.2", @@ -3401,6 +3402,57 @@ "node": ">=6.0.0" } }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.581", "license": "ISC" @@ -3420,6 +3472,17 @@ "node": ">=10.13.0" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/es-abstract": { "version": "1.22.3", "license": "MIT", @@ -4283,6 +4346,53 @@ "node": ">= 0.4" } }, + "node_modules/html-dom-parser": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-5.0.8.tgz", + "integrity": "sha512-vuWiX9EXgu8CJ5m9EP5c7bvBmNSuQVnrY8tl0z0ZX96Uth1IPlYH/8W8VZ/hBajFf18EN+j2pukbCNd01HEd1w==", + "dependencies": { + "domhandler": "5.0.3", + "htmlparser2": "9.1.0" + } + }, + "node_modules/html-react-parser": { + "version": "5.1.10", + "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-5.1.10.tgz", + "integrity": "sha512-gV22PvLij4wdEdtrZbGVC7Zy2OVWnQ0bYhX63S196ZRSx4+K0TuutCreHSXr+saUia8KeKB+2TYziVfijpH4Tw==", + "dependencies": { + "domhandler": "5.0.3", + "html-dom-parser": "5.0.8", + "react-property": "2.0.2", + "style-to-js": "1.1.12" + }, + "peerDependencies": { + "@types/react": "17 || 18", + "react": "0.14 || 15 || 16 || 17 || 18" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + }, "node_modules/ignore": { "version": "5.2.4", "license": "MIT", @@ -4323,6 +4433,11 @@ "version": "2.0.4", "license": "ISC" }, + "node_modules/inline-style-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.3.tgz", + "integrity": "sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==" + }, "node_modules/internal-slot": { "version": "1.0.6", "license": "MIT", @@ -5439,6 +5554,11 @@ "react-dom": "^15.5.x || ^16.x || ^17.x || ^18.x" } }, + "node_modules/react-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.2.tgz", + "integrity": "sha512-+PbtI3VuDV0l6CleQMsx2gtK0JZbZKbpdu5ynr+lbsuvtmgbNcS3VM0tuY2QjFNOcWxvXeHjDpy42RO+4U2rug==" + }, "node_modules/react-remove-scroll": { "version": "2.5.7", "license": "MIT", @@ -5902,6 +6022,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-to-js": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.12.tgz", + "integrity": "sha512-tv+/FkgNYHI2fvCoBMsqPHh5xovwiw+C3X0Gfnss/Syau0Nr3IqGOJ9XiOYXoPnToHVbllKFf5qCNFJGwFg5mg==", + "dependencies": { + "style-to-object": "1.0.6" + } + }, + "node_modules/style-to-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.6.tgz", + "integrity": "sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==", + "dependencies": { + "inline-style-parser": "0.2.3" + } + }, "node_modules/styled-jsx": { "version": "5.1.1", "license": "MIT", diff --git a/package.json b/package.json index 463b515..e160325 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "eslint": "8.48.0", "eslint-config-next": "14.0.2", "framer-motion": "^10.18.0", + "html-react-parser": "^5.1.10", "intl-messageformat": "^10.5.0", "jodit-react": "^4.0.25", "next": "14.0.2", diff --git a/public/account-category.jpg b/public/account-category.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a99ff237bb99e77fcad07f8b26e85db2a07ac744 GIT binary patch literal 20577 zcmb??2Ut_jwr>y+1r$+wRRJjx5Tv*K73l&}Lr3Yo_Z9^KrAn7By@t?3M{4LumtI2e zod8LA@tkwZyYKtXz2|;!lVP*jGdr_p&#bk6zqRJ(_stUEfugK}EC3G=5AYuM1Gt$5 zNCWV1-TL#v9R#=!;T=Lk0s=x}BBI-ONQp^FNr*{E?%jX*;NE@m`y?a}s2-3%qM)Rt zBqgJ!p`xI9NI^;Q=OK9bxHbfYcL@paQrsiCNAWKoH$MU7ckm+c7Vz<&0&bDx;gjRt zbOM+G06aomZ~t`o9|ztoTpw=}-MLFlf~!#T0B{QrAO98s{-0jsYWw5v0|>|oA3ouG zb^DRp2coCW6#SoJvhJ|Fu4toFA30=wY2p%imzav0hL(=)89N6jmw=#tshPQjrIodftDC!rr*^cYJ370%5k0+qqhsR}lT*K^XO>rxt842Un_JsQ$0w&}=NG8Ut3Pt# z0r3AW*1t>kU*sak$#si>0H1*9k6d`SJaGk|oPh8N-|dI5)QCPfKYGgl=?=x~n5>Gn zyDTr&4=GJtMu@3c1(w;4{)qNB$^K`81^%xj`**?qL#`PBDLx+V<>8Y9Kmd$Jb{GfX zUoI&_6%kd0Ot~xRe-Tos{g*Hh$3FS&?<=r=vPcqNjh8T>e%V$B)02$|m^_q4M>039qca#Y|iRa*;m}Q34_6wY765!2bFnzA3>`ooShZ*-}1Ij&0w#ZQI|_ zNVVwt@zr4ZRxkJTTy3E(0?tYSnp^qVVTY;q^XY9e6zc!_TmEkbt#F@(|8-ly;bqeH zeHjHA$r?P0Rs0BF^)Vxvh+7Cinnk+&t?UKuB~B2KN3Mb>bK^?0x;sLgg<(xaZdL9q z|D!*J+CK)6GgiK0Z&+Idzy8PVo)85V>`FRf=QqT-Juf@#J%yUgV`7f%kN;l^SNgkc46^stl z$Dn0pv9pgifTRR;G)n#46|2oKvTvoP+j>Dgs$iC5nuW)YwbM!(vY<*7DfbBRf*Bk^5h&(38-2#n}Gq@9FXvVq8F;VKtNT z-VKDeHRo?Qd1Rjc4^lA~uVESynhn7sT}2+Af$Du04tK5&F0aR9PvxSy^j#o#B?Cfo zvvWVZO;qK6)gAD@H5vbERKDyt$F=;f?5o1r!Gs)ev=u2$xn0yt)LECnXPs=^`YqE9 zj8=D6zJ4PIP)y#s2nO=Ss>!^%-twXe_V?n(;-CGvyUnrkB)ooZBl^80p?r?br!-`J z-k;f?izg%Zy#K-K$(9ytqsP{9v`rpWmoN2ZX%&mGHv3VQnfYdCfMCFYL3bXdtT@8B z`Gjl|ig?;nukmi>*S=I3M-h#h3rD$)rS!`0Z>KW=Cpjgv z+sP4DKc@C%*@ykOxB=`CFPBLHy$VzZ=ZAw${U!Vc8K`NK!BdM-ztJU?@y?Vh1&W-! zLJ8=E9_NUFXSz;KDk8aLrNH(4tCr1Awrt`<#M8zN^VlwmVRK3Npiwy-!xd8oky%82Fo!NJBaBC4-lP zLHdAPQNievg0iO8DhJVTjY8b}qImbW@@~%H4j4aCl5_0s6N8Igpy>Cihu+VsBOFWE z$}OHxvpN|7A7d|4tKRmb;$`3w5~8lI zT^Z9XvW^Xv%*JKl{nB3i0QAn`{T^?Q6)vbXOcKb7rvsB+Yr`K@cq>}S`EdH5;dK8vQgdMLlG23Lf= zBi$F15b_8gfOw!!Ce+L;Q?2!|C8)rg3WI_6AQf%8rMj5)pW9SKzF>DrrcS z9F-l}hD(NoC)7+{^qKc=0ISsQHvq#Mz`2^CyY~$s5G|L#Ir*r|*R5QBbf36SMHVo8 ztAQ7#Qq6mH2XO=NgQLK~;aS>RtH|3^IpS7*Tq(+_;|akxfV-2pU#|#m04?-rE=~#C z?6)X?SrG6#OMm_9Xl$mQiVl7Zs!w%A)Q|E!2>S?1f(^Wjd#*4_?f-rT zr@zsk2B8wZspHzzXm&bk48bET%JDD<`zVs^?~ULnwKJc^9_%{PDC6J^kmNt^{QYq) zq5tTTKAPjI*>M%(N@jh3eUD#(z(!{h=!JZv)zhl6OWE39q=e+=vgmC#{!r7}UMylW z>;GX`YAKAdO4LNxy9>pYxJuTr=HWKQ5j)kgy%AHbK)a|4&ixyi!y zI-M6fqQe*Dsh7lq|93r(f4l7ZTQkmU;^z0*rHyEpgY(bEbD1{)yww}PidCo@JmVEz zy{>#ulne)A?lvF=_kDLQ;%)$-@V|||)bZq?wfNyY`4jk_QK5K0vKEoicu;xhC9F1)aM!YsV#r-~6Wn z6htIG{Up!=Ju)KMGuf6&9f}ShZ#4a-!Lx5s&t;LY#`QwDLWC)8f>wO;bXk~9J-2Mn zKGygXCD*fh^-4Z>%UOO%qb7Q0a$G>aWG_ypn*EM2!$XC=%SpoaUfY))T=6mYX_bB5 z49rS1a=WZ_Pl^^io7GO5xBL!#7QdCyr#K{empBL=Imj$EG7z`k0PbYuij_hx=G~Y` z8bbVUQA9)@B|hYJa#4YBP5T@IO}Sp@{z&XDPN`_W0ki`P$(EzB*SWZnsQ0CyNw_q?c#o*V9-H>>MqI1H0YpsM=#rE#H84pye~@s`u?GZ@%47xHPh~& zbAxtaO0~|{*p(>XYo5)&-w|5&2}bX@7jtq=So1$O^$&5LhKQ~BeK^vPJ`^ey*i%;+ zUG1#=L?P2XD$jtu-OSbi9%N>yu{C60iH|kN!mP)}$T*ef4&o=7Fsk*aI}snt3df4x zY97e{>|7UZsb;9#49fTZJ#(C;nj$%DcnFKGHl~wiP0?CP&p{+V;*@)P+9TPFpxl%q z9A^zTiXwEJA1bAFMG(t_j6iyq`pbUK+s0HpHHHtwHnFd)Q+po-^8|79Nxkzt2}VYV z&@jJ6Q7JEQRWKji05r%d}=sxI#@9^aZoSM@v1+O2N`2)0zYuAXzEh7j7CCGT!`@2Wg*+ohZ#`| z6emss=hiaI;gWusSx+Q389Cd`z9(}7Abj{siW4n#w9zpS?C?qW3|B|kS{FBMYHLPq z(e@)gzT=nu3D7@q4MVZ)X|?H9HLP0Bo9ilrEICb|l+0jSXCT`d$&GIj6-08OlKCsLw|X^pzRAnu?i3P2Trx`#g{%059>R zADMR1S$1ILexCbubxP5W!&sW@$B=fcvBi4?7j2g=Vh_Kl&Qo4(T;K8&J!0OWIWo;aL?HEOT?b9@iBj9 zyBB-1^A`J#9+rNTM=*Ttq4!t2v>pTt_Lk(Jk2&S($$&xjxT%FpOsP#Vr6wUhz$7PD zG(2DrsdZ}A3%YtxA^?tY;zBrd%Xl06^3D@CYWgBGY>B$*=#AQW_I_0#MerA{C81^9 zPPMDI`{KucF@b80FV`1i@@9F_CyqT+un{BJdC~=l83piWeQ7Y;vf1=IHGj1Sl&6Co z8;5MH>|n2L&cwKw-e;WN0RGgnJWtHJ0Z8t*9@OSxf8jJp#s%nN7F?vJv~z?rI*_S3 zqQo13mGKQ=*f#oltMJ)2bW5qO#I?|M2A& z2y;5IEueOGhR&RtqmpRcOM)zBVy^^RZ5pxY#bnsK>}VKl72C4xl3{$F3Og9QOc`z& zu{%>}+L;$4sjq+!WDt5F^5wUT+GIr5d3cT@TTGnPM{;_hcB9?o_i8Fmlk!OV&9Z_q=9NG1Q|Bj{q4O9O&XR@y7DB~)goLuZQc#+I#OTd@xp$)&W zwO(X9)tA`;BN>3116Nyix3~EP42A|?Q=o-aLwueEuYgFW=XZq8`*;P#70jY^dH7E1 zV&qL4t3J-*MG+}pfsq@#7eD-bMozN=5GqIaLp@SL!l4~B)^=qSA+)sgNRyI!{+AzJ z?hshY_cLTaGk?gi>^jBhY^3bvE4(^f--cY^ijBl<9$+mK0tQ^ zv1U)f`PbM%E5Au|VF@Ms#ZykBS~HSOt{MfW*?dSDm)NOk1+uxl66e|dQG2(r2~b_V z3v~Gn;1fh~GY9>~67;z}MmP6WTR4G;BnAZKonE=~PBxW{%_Bl1Lt^gDY{kb#UYKGW z<@VfK#a;NfcQ*NKMuIe=V75)=|7yuiO37^c_8TO%1uI7$hOJZ6q(8 zpCT45a^jfbSSNW9?iCnM{zGHJBZ5wYK;{PwKvM7_He$U*)cAW zoL<$J0bPrjUDwNT++)?8r^%o5l{{p5r(XncRn~cfLm-9UMTz<1xJ$r_rXi;=rP*b`A_~Hw|)h-jOIP8PJMIzvgHgAb} zf9QPu5UEohDJ`rH=*^`%;!5~O|59&75F2zfI<(|$pS(0#&Wc}#RUZhROwGt-+IPEsODrX9-wIotVNbcgf~%hRT_?`>$!7M$0l zpV~l@BM~y(sb`t~6v2-m2Yl50)R=bd6X4#Qz3t&*{6>5G(G&`iRn~`mHRkwoW9z&! zZhl!El3+3CMf6u)ub9h|8$iBYFFI1Q;=9k+{M?oe?3-f#sDav28Z(AyH5pTQha}%! zp_2u@%qvR{Y<3*>LHg^(RL2Jf5pKFkURcOzy{MIBvHun}iFa|=Zla&LVNq|rwF0f` zc;N`;`MCFV5A*|DvQcJAX>nGdD4wJ3EHP?K?@ z5B`71!2e1P{-JUw&M%5{v0ax!COl6IY8q6LP8PLPbyBmRmkNvdreGJ zS8}D0@2bn4VVlcvg~@$4WyKlnkm=yPJASwURw&9!}T$^0sL)e&C{+$Pd~k7Igq#ibGw1?xAR z-E|kInsjvgZ60Abn=L*IBh(5dVoE-RDxx;zQOQNWQQM$L1_M*n%Fis-e#T0?|G^kC zg2*TI_s!qdzUt1j_qTqWII|*{D9kt>5q9Q;%KOsX5FpoOsmo}PKIY=7u8&&`#Ww(6 z-q*RAJM`Pu)t8`2(D)c|QlFWFG8r0i2|DE6(sLj1iZcqWaG`tbi+H0N`UXeWR)Cc zdNqCumK=e8AxdBWX8MZS;=X5q4z~J><&z5;8j(w<)s3CwqpOK9js_CSw#+`(E}A$A z-tW%QWs6(VwCEZjh4~HO>)X$Gr{dn|;w}n9!loYPq5D~;kx8hpE_bd-UF8m%cD=3F zAim!7mw&!Y&5i1@syJ^8$4@L{nMy#DvjT<7OQHly##aEAeHxK-rUa8P(ZDX>PT86? zd5>;2_={b>-Xf1{4PIKRA=jt-5iC?{bEYvGYX10z^DX1{=LKqtNP758i62|^P}33H zfwe;*=eZ#cGh0xaSQETx3e7GuMQLE~>3>H*9ur=utB-w)#i^;v2`#@m#puQ`wBr@E zvM<6@hN3rL$ty*H-iD)B@WeO$!}F1!KYE{b-~IXgui}Q5&7^6?oz!n{dC8fI0#S1Ob)G)Tgi!Y$src?nE;q=Xg@AvF}r#K8|f1kVFdoD`b$=drXPM z8?z(XnA{TV{^a;jhlE4S7py!;>`2KQ&L_HsbL{ry&ETjCKEL4DA!-%Ap~t#CL?bvNU=(eLL)bWy z!Ri858bIu2+>d&lI7L#u-7ipykD0#R1qvesMf&+~fG30?%%{G*pGR!INNosDEmI`JbNcm^*_^H8R-;5ID{DF-bH{}E zrJ$MSopV!EY?b!{c}vp9>oFZFNjY$Yzvv&6d&*+*Dt*w&F-V%{_A>}nqp3Bp zUGhX~QHD|V7nnB-wSBFBxR$WC{{70RNWgR$oTbSO;V=;tc zj|=P6KB=Ufi)&p*shTs|j!wI1Xv;Art$(xCK2j>^8OU)VE%Ch4<_Y(*-~aqvSdMc> zE^F7O!yl&SA12gEh9>a$x6S%>sx|gk1}C(0Bl3hi;R=5gIwW8%(y!fHRV2u&6_KE= z?pnRXtQHX_>#>otnG?JJ`1iQoF~XS*!G2uGE2y+1-{D_7W0z+CB?Q!0M=8giZ45!< z=Op&KW?CCxPdqYEz#zdj_w+X2MX(OhYOa3xt8~4r#}MXC)88Z8kaWGCZQI+rk(E_U zRraOJgWo=EY7FN~YZs=ztH*iFgUSI3B-(v^yV7y{k~QM6%iW2r9}B9k&QBHBrYvLw zYQiRpmNQZ4BrLABnv71DhC|z3Df1$@N4L0cn%p|2>=V9=x-AX+^Za@5Ov|L+b;D50 z>)*(;B4F>P#~CerCdsizEKHgot-w2ddhfMLXwQ48-1iW%tpNHNOmrKaBE*M<9dp{% z3U$r^rS=^*_b{578Kb?Jw~P|9X8ogO#&9n6MnaP_R*~?ze(ghGQ!CpIfM7CXZS-}Z z!p|~&gNb{{UFk2HN7#|GvJ@|wPF`9OQoa}+4U~!OQ1AE+peYxe9O|}mncrVDFcH%~ zxR4DWFBnVF{&Y@DktMazsyA162tB;c76r{ij!IKu_qWwHgkqU5UM%)C_h{w`TCzIz zz0~{NxYTTo9H$$yrj2#ba2}$8M5Dl-Mz7eQduct`HzSIr#BsC)54`q_YHV2sZAoL< z6IimV*e?_q!cMA)og)(D&xAXAt5>cF2ig}FbXDbl!B=1EFabUzme*V-bq!B;X0NoP zzvf?qLJt-T_H`jrAn42Xa!h7NElGsMiyOej6lk)ZWq)~ge`+bYYBKv+wuVB@AOsiL z`a8A#KR6R5_<5k%nY)zv=}S1(r;Mv!mn%H!bjcFsYb_9ce9n3`)pd0qUh2iJ9j7|6 zYcY1fvP04Tv16PmLJ~oFrDP1mPEQpH!Io30E}Kfc*Jly*)3^O0L8mYx{toGwDLv2t z#xl@#06h65LD^Nq6Ye!FT;R5-DtW~Wk}i@Hy6pka5;PquW_kI-XBAeaMq|PpM?5H@5&KC8egnu?5qIhbp4=LdqUwPIpO;i!}=L}Q70;o~8KTx3E z3k7S^hT_*1&C9CEU$)y6o+#|g8J*S!NQ`j%Nwa?zKqU?xk4`_+2`olbpT86T6zIk5 zD{-Q?BF$nRrP>^jp0pZ&7!#=%b{wlLJiR-0xepOJBBC}qv5C!6z815tUde#9zTDY@ zm#qy8JD*ZMt$9Ui&n`&>wbt2sY0Ui1UgcO=72E9V>KrzaNkTELmhbW8DM7{3d$Wli zH0UWo>_Oz*rT4~BSy+cskg9Qvr^15l&JAEPcf55i6Nv$ST7mKC*tu~Tnpw)xbvLTL zE@Z${b~xiKOl`iCO?6#^ueo<&Yus_A307b|`Qbh^p}n5wtc~ZvI9n~oUCvc!WHq1WmYJ!PP?GjBJBLU z(r8YOK-w)<=ohfE;ZQJZbiiq2FRcC%73if8`52|~&nqK6r40tMc?3rF6unbkW?;eP zT$rOg(_L-NPT%X`l~z1b1-w<-^uSlUAOwUwHon@x$QT{1r=ByuAIKq}i^M_hCl{?* zXq%+qR^+kcpWD7X*(ISHhH9NT{osUj(qEV54YxUT<>#7Z<<#CR;=1+)4gJOEO2 zS}6`^XOwHtJas--w>YUiz?u5i*35p2C-FUP*~CFPjzbVq%>|PifR|b`q=|E}=ee1! zp8n2^Ojl{em-O;?p+ht-WQyUcM`RIhzVgu3%Bt~LHe%Mr(8oS$5m>GIb>53$`l;*o z8ZG|?g;#RLy&cT5 zye`fAZ!%_E%WKU*AK|OHGHXu(`YIfuLYYk-}Pi$a;gNDjr?o)nI!QA!y*PhicW*+vfq zA*wE==#zcCqrP5kTxriofGn!up;+(kqDxXR^$%SGuS)aGcMaCiJp&V|7lTto=!>%b z^7HcaJKc=4kfcp(^@zgB*rcS(U=vh-w-0;ABB>42)1zm3x1+Ol*ppp-U7TWyp2*d+ zeF5B8czj>k9z3*o_|EvwqF4X9?9o|S2ID^W<4`rL@kb3J>`}U|QSAaAH-L{}?JB)h zdM~uNWFLAc=ll#{hqQr9oA{2@k&1@}A>0xgOV|7rEk)Fy^0_8g(N5hrz9HM+Sc!nXhUlNn#3+4m8w-?C4^JA3@sVh+x;&HtqEd!3L45;$@jSiy{LCtZ1bnFeOMwx{xev%S3#`hd(GTE=O>90xNa7n z0fc=nW=>5mvy%^X!fYa~$5hVk{c$!zi{}5$Q~6I&^bc(Hle^a4=}<@23l`VPW?J5> zphdFMl3^p56a4FqW0)CRtw{`d&p)F=b9WNKv{jS)_Bjo;9U*UA3TYK++CPf0=Xr~! zS&DJJ0FPs+KNWx2Tvspok^rT4)SlXMos%F$vK?lA5#S}K!Hy7S*zF^`bt&N=`_I&! z_ak?V4z6Vlx8aL-hH{omk|T`lg!u<8256z>Dob)Ay|4X0!9LnyCA@^Tz}RPlB+Sc+ zGiq1CEN3t%$b4~z>`mSH50rnQ&0)>jfRcNz;}Bcq*ue3`m$n}9k3#{6+kA!w;@^h} z!=h^nyyhjflZ@As7JSpZtj%VqyIw^4XaFEd)k!wt>YUNoQkQhMGud(KA-jF}>8 zRRMNkg#&Pl>mJBbx6BT@2dx27DqyP=M@9wRBwd}5pSMLs9bU~w*-k*rGQYxGX#+@q zdm+?oLPn3V+gpC$iTdeS2fq9`li*mL+7yL9Q19xauxg(xXns z2-rE(bA~=znC0zBFkLox0KvEYt#!;{76?EbUF|k4ai+0nha1Ttp3N zF@|VyD`9o9pwY64fBaEhaP-uu>yetUPyD#@LSwdBkN*DDhun_Ut=b*z5E6BQv5j_Y z)VKlI8+B)CFMq_x|AeKaEK)31WQmA3oSvH3LwGwJ_BFU{ zEP_C(7MJpq2NQ6lunEE%(_=4;}NFg%jx4 zf(&i!+-1<#FKil?vJ<6`1>v$N${^!v!eKSKIbI7#$+U`<2}ZAWW|G=}Vk%9eBwDwD zqj|D!FOEOY4_T`SauvPV($6Zr0q|GT@24OZ4NfQa9iQo(aGY?pT*cnWtM`v#k^en3 zK`RL3(yJ1Wz0EGNLE)VM&z?4rHZ3as))R5`0iWlth(l(c$)KsbBds_0>KjJgq+68{ zNKTP+?)+F2?|AP7V}B-d`#zaLdf7SXS;?gF(Q#(vM4c3?RGFOoufUep_s{17Hp?I@T}2ItOu5vFxOA@GDNw%cnyYU=z8)VI ze95$~IqqC-b^}Nbuw*;Dwd9|w3*U!P1Rar*9aHYOFJ<0#HycH3zE5bE^Ctg7B|_gu z2#H~i^qu#b6V}q~&$?e>A0UiT)&Ei?=KXnXQ~}h!_(PL=@|}&gCsoqBye?>`Jw zJy@2;oTct@jK+xZJHOr&%?!H3;ZQ+;;Wu>Q)>BkdM*a!O6HKDdo+$3#ZKD3`!M)rE z9t<1Lm87`*9*wk!St(`PoVyrF7?~ydT6%qc8P8Q2+w8G=)_3f3&*vaYf;qo5)F5hs zZG3$9QMFB%R`dW~w`@RNz84W^vC3|M3|u_zl$rkw9qF|nrzJ{zUeUcsb{6If8}R(O z7%T)K2%z+Wv?XfL=Z$@MYMWj6a$wg8jCgODil0VGdStlvwA`G4A?R0_-r1;vE;GHl zOOdc>BfJEM{gd(jJMY{0Q)|tS8$d)hs^A7-O1XiJw80$1+M;KPJAY#*m?>B+Nc9ct zl2|ac3q)8+gSzNoX5|1 zX=_J2b61y1Ka}QKAEtF^1}ZWqD4f#5K*iE7m3%G8_DmfrL9_Vw#` z2@Yjz1jog*l%^WkzWvp}RR-{mG5S#|R#~nCbav)@1IXhCBhBG9m>67&go`}%n$yb; zcpK>HLxcYdlQl%PB)4HG;xVu6%PgKLBS!#5_a9r1xvN~hXlwQ=Nnq>@Fni;<4IB%v z0!jGN)+njp01_e5r$uI_m@MMerLHF|M~dP9_-ENBP=Tg7Of$Y3to!{tQ@lM>e2tN9 z=u7Vxg_iiw2QS`vTxHr=3lUt)<JF2KimS|q>lPARn<%)Z9=nZ{CyJVg8?NCU{KZlu5!=5LX=Y+ZptE%3#C z_-K9l#KbG3buFgO>up>8tm5Pf?Y3FWL}$kh8irZLbI>F?6-z}&VV|y1y z;YO*iJvOF2y1$#d%=6Uh>uFE7bxM3htj?ZEV;Mk1q-SPMYx{76kYh$K-&0nFUp;E` z()Qh`gPZTA-F^F$ zBInbi=iC!yXG|eYl&Ow_kiU)yuuS7Qjc`!}8Iza${yp2o^|-dd*A9pN;@&x#{C&$2 zL1~ovt<2B-31zg#+-U@DX?XT#{a*5{Nn%6iw2CoY{OXEo)0wG?Jlx$%nz+nQwI}~f zwHV_Peh%N=W8DJPQg@2f66#vk)ESmkGxLv9vo9u!O4Y;Wh|xZ{HJocDr-&(L+ALe# zlYBU|%WOdVWZ3x16vtz;EK7y6BvdGS8W&5wgX=Xda#x39(zKM^x3nEv^kpv|2h^-H z=OEt5+0V4%qOeQJC#Ca!Q9LIkyq)XY_h1vKjS zTEFa@vR({O?Pa2UPs`FkM`Y>4T8G90{=qU7;QRn5lSSTyQvC=&C}}RUe=p*s_$oHN za6UxFW_!}n+W~ri#F@l9#$i+C&g1I`^5;XoT6cI@nj%A9XzqE<9y~dH+L*;n(MYR6 z>!ux39*)UEjY2HDuu~iQ*Ye57RXF_9-FNZ4gMO{&g8naTLJcO9`r0^M&ef9PT@{au zBxXBD%Z^9mnPLf>;qih6ahPGWIjtbjn$z*bSf%`aiynFi(%zss?)lQX>Y<`SshK`y zBikE$_Qc!X?6kw9dG)`?UVIi#RPCdO>K#4eZq(C>uD7RIj6Pt}YoJJ9Nz$N#+im1- z+LR`YN`+e&@wm;lE-+tu*0;AV`OvkEKX-V}cD(<@%6KHyxB%**QA8`weNCgnZDTa@ zCeB(fLMc)Feix3qEy5*af|YcQ?!pz2jq@4Ar)b-J>~J^+Hq_LlB|}#Rn(W!lVRn8g zR+29DJJv4&nz@T=ok4H@y-t0CS*=AAe69;SgmarRfO6;VaP*Ph%-`=u|E=oQHAILZ zydoTvZhr%i(2m~SalBlq`NwcEPai>QE=Tszzg>8`dH>!TR0VC_2%FsX(UbpexR|a- zN7*9EqdJ+lqP~sTMMwE?s8h~_QTh{FS@q~)?l5q$Vs)UryW)c-+GkrKYL8&?4}0ad#bFrLAk5>}gh5z3JJcl-Gm zt3G|&lsq!<>^k_GWPH!g?Q*YryyaS>;bqU7w&afoBHJpem}48OJ8vaS?w^At+nfb zXl8+guV6vi=}lrk`}bQ3%T=G|UTn>@K)zHmAb9$@R`@9P7%BHN_B<@%F%}|r+NO#L zoQ69i=jJw?jln$2JH{b~%$4B^r8z? z@t5v<2=67{imM1W7o8hrMwmY`t zNbW}Pb~O57>|yVrX;)&#`={J~{c9J7lZO#lanR8Wx~z83IDhd_A+-{F4;5@*Z69?t z`q%u><|@q%070~&{|oz6;_a3(9{V(G;Cd#E1NII*0DP%An%(e0YEt1ZL^3_4oxhyg zt`}5{3&~F8_N>e`zuk3At%3QF1~-lTsA4-FTQ+AnV|uAxfMkfyp!BJb=lg0niirzm zXf)Cb`6=sBu1URkw0#2zJt^9TcJ2sPFGJQ+?Hpl5S7V`_p9gk)d!JjJuyi{I(wLDe zvFO;4Dmhf*&=2*3G?vmxv53uw>uw{Ic4#5EnP(7EbGQ$qY%%kcPI%&r^(yu4O*!6H z&{@uP@!pHmMmEJR&?4XB@$Z>NIq&HngSA9jET5UO=f(UuwARy^mncwAgY=82{6mqObdTbRGUbFFSg&vneXcjJE9%t* zOPfZT8gTq9EQ7ArX_3$M+sSD>kj}i`QdX65&L69*R_2;&#o20rY80G}O>IL@c9VsXzMRE4D_xj;3ny z;p7^rqpc`Wks&9kgsP)Q9rnwPR5lH|1Z+*aEW=*I9FT)pV2r>1yNZhXDtL2U;3yJf z$Jg^3Z%C z8|js(nJdRG-T#>0oGqjp*dxwL{q`?W9A>3^-C|x}{T`$JCVZ;mae&~^wAZYvlG!(# z#K~@*HaFW~b$&7Ol$7C4F^{Y#QIpu2?Z5c7X%mK5??H%6%72H6=)NloiPuBrj*SlQ zAA?E{QDKxo**vk4gmbXryWeiptJkZtl9z&un=NExP_!8Q_(@&E`#aWTeXUX=%&G=c zcqOPzr9(`kflW$ee(J5jZl(H3Hh{aR32@S$$9`YpQU0(szroDhE7A&O+P{QS8wck1(82DM zgMOfB%h326fR8q)2co!Td%6og+Sm>-l|wn>5M2Gez<-u))xv{QT4mNZ02@sDDKJ=T z-gZUbz8mirmnqV5;aNrUIW66klmEn)I}C%Fdiu z<5+Co2Ryexh|-aGh4Yl!j=Fw@y8oVJomz4cBk>3kmK5`L9+1kN>PXxfZMA^lz9%Z~ zZUdGlWj@-gjUAQC@1ZZBaR>n&9bJMqBD*uC;tCC>4GNN6?Sax<5cl|Ra_hkT8vu$G zbCGn!-aQEsKB)e(zJzXN{poseasv?4gnWr~H6KhGzYMU#2xf-?CqdkQ!rc#xRjs3w zMVaSI;)s#r_&EF|45+8Q7-j@!C(g5NCk>UCJ!0m|=H+^>-LR^{XFdv|HU{GUo(%75Q&QKyPtd%x9UHvfuzsRVr6w2JGxY$si zpyV3L5XCqAE07GSpR#(3p6M=ID#4Yrk)QplZx=bCg$a4Ol*Ts~B_0vh`~F^K1A-!2 z`Qs5beeYr`=53}xmSfshY~T}mD>G62GTWeuvVw*pqiV#ll{Mi|a?==uZDYihDw)bP0(&ZeJX*PptjV^lt%TDsKRe zC@je~oQdR+Rj8pL+{D1xhMHNjC8N{nliXFWlgle{@JCOEPrHk?Lj z4W8yR3e$3cHb3?kGdbl2q+J2Xe7?8*;gX^Z*vlFhCN;dLrOMwu8Wt&bqTmr{Ty#3t zS1w5Jl0^jBhaHQ9QJAA!s?9JggwNJxBPLQL9)qr6|ZcIte zwe3rNlVZq{%MIWq^R5IO`zZ?-X^=xlO{zvOKCrmH!X8|^!fyabcjt0MZ;oD!eeOHN6&4iv7|yP4%N2s|>Li@u~_ zl}nNJwD2^I9dJ>A%`$&BQF8nUBIV8_G&jC)-8j(@$jw3oin2ZSU9xQR*GD>bD!=TQ zaeIh~Sp$#rYN_-qIk_CaGzIJta7gOoHwSccS9=NzrTBk-E$)@T4MnQ87cP*B?QsZdVub|0V8*wk~$psFLec3GP&D&gx z>qR`?eTLH~Y6cbZxJ;LUf4cJ&77tm<&pfvETs)`5rQ-gI^fxrd1?$^X$`TjPO=5)z zQX?%!1z9TSXEWPWH*_^ow3};-2X4)3m+W@Uz>CJEZk)$`r?m~YonnhnqPAk>Ids}N zsQ&$5orj{V54{+smgRy@!AI0z1tOolSTM)TX_vsu4BL;|&Q1j}_y{^_Is{#@><_Nu z2msMvgf1Vnp_v+;Rn^wg6Ii+BsXhOtlO@QE?+Q<9m6?l8rEz!852cSh0H&Wx(e2Is z*t@2XbK@BjT{zqM9Li<+be(Krf}k%K=!Hf0jj*A)8tA%@dJ?>kp|$>!7e%zw zOrd6!b&1==_8&U{yT7tt_uZ47bk0;e6_ljd{|P;(#2)4B0x?K!tAc?pGcc8N^Z|2s zuD;h)HW?x%Hq2mv0Jk+%nrk~1QnfD}5gE#Cvidugvw zf5q;Q(jj4J?zMq+Mn#(XUIiMw%mNWKaI9_ovqnVnpdR;h4%cM_|5tC$$TA|4Q_%3q zd8sqK0`0fn8dkQ$93r9u&|C1Ub6QB%GjEtZ!AK6?SNGVgsi zm!uMWkJyTwn}X8)%5UC4F}QrrJ$;69eeuxfO&y08jp;1Q)s(aDj8L$BR_6}D!n6C5 zz6fy&r90%)V$m*1^N=J~a|#UqV~mwwhXMN`*2CfWOR%3e01B^cQ39U`q3%UhB7)Q+ zm7XXv!_wI=r_u^7S{~LaX~jbV$VLwkKaQQqGNw;mnL;Sda}6N}e@Sq+zOA|A0($}4 zdg!kdnan``FyrimG9<~p)QH|!glR=9N@3bmT|P>{n$>l;Faj~H%sl`Th-Qr#W_dV( zTaS_oQZ?s@-Joj_Cj8tM)p2ADuKggn5nSUhEc1}}))U*u8P1spFOJ(7h2%kDO$k1+ zb{KV+f}{^QgrmLQaExK*gGmj2Bdt!}Ht2sjcnrS&R^p_? ze7QB+a_1O$=8C-=l$Q=VcWzE4CEWPJQ$YWvt@E860=|EJJ&EFqEznhwywCGEvYgw~ z7ClsUeeQc`KACq;k{Q}U+t{epqmif2M=})%4jXL1#QNb0__Co4bM}a^I@86OgWfQ= z(biEv|Drx`o$MLO=sr*uZeL}7?b8>|DrrVv_vX;G@g=&)6R}hE$3HON0vO0H^CpR~ zzgtlgC6H;zGBy-1J%D~uAi7Mb}{6jo>}-udqG>fV(pd#?!yFLO(0taHp& zX8#!s{o*bISlTe^3IcJikq&Q5RlqXgV2?0eF|uG#I5X8O54@^di&>YoCb+ zY13jd7>s1Zd4{d`qKjb3koWWlI2=9G@iRi{a}4as`_Kc2 zsx;DThsRjT3pq5!*eg23ZkwwIm|byV_W>C`f>fUEy&k(3 z9z3=%Tiig3NIKUxm(?>rc>QZZUVa(--gctDSUp&7@5$gvMWkW$qb5`r9CXAnjKKlL zb4t)BDK3be*N$ujw*T1gvfVq=Y91amBouZ^Uv>uiY{zuc`Je~ycxfPNK9m6Oa%yZG z7NW_1U1EhD6QQght=Mu?lkub7{#$-^fHO|vYT>r~L5v`Xzu7da$o>D`?0 z_lwy;3RJDK(}A28Pc%tmeTdOOOg5Gk)CG$);yqGL-Ox8$6q^yws|?u3t;>KB5X027 zX9g8;*KH99*`BjX$qdPn5AS#nitn&M9W{L<{nw#KB8^hv9ASzRKlhSximvK)AR= z<3?ws-uN@v3fr;39&$abOF!}agwYkdYbB?5b+95BdJgMYd^GJH;5g&fSm@V;^w|7v zDs`D1DWzk01{6m4+L>8*U6(_mjgLVDwr4j0?A^73aNcRv_A0=S1p{LhkF%9+9o(jv z#ba0xF{S_$Wv3E-&4ZSbBL%JKo=2yav3kZGUzTJNH=p~?DFHvQFdbuP7rb6#SahZw zAk9J)*AAvw%E_rTln+w38lF(ft!=d$=gRl?WNWgfwWdiGM@ezw#_a}hb#|tcCZ4W6 zo}|(ux8_#N(FS~3Ubz4CTBfOjDJl=b7q*Hc-Trff)7F_5c3k|I0yoDY7@zg4(!{3z z1Hto>s_U;Uj6M3&i9$;Vanb+v;6gAeArcIS-Eo zRHM{hZAG;r6}3wdA(6hkfA7qXci!K3&iixE{c(TY^WAgqcb6~9g=njC@NM4{6!O8L zY2HrQ)Njyx(BxPP!5txt|M)LlKYiy`B1CR6|3VGcbO`Hd*U;3AKYqDN@dz9pe6lQ) zNH=W>3mWcZ1Xc^CHh-W%@(bd~4w78AAwT5a$XQ`EGiRpZa&#sMOKAx~}tii1#-%D|`>3@RH ze6u(Si-SxE-S~H3aD0vm4|Az06<>qj#GfKWI6*2-iL*MK&ZDCER)WC!4k@=_gCBrn z{tQHR*w0lIT=r|ZD<{(7XBHw%k>fK>H!`(;qT~!QuN>td5xL&2<*lc)pOHpaX?e)= zJ?NS$w_fAdu8p1nLH-Rf%aM1w1aO?H4L@_urU!NE1NFsNWPg)P`#Z_wBSdGSc^OWv zMVS%1sj$7ec5fPVHx@()47yy>6>F3 zVM3*Jn8Zep3q1vAhh_+=BH1?nLo;SZbkU?WJ{WOK!$@||34_wg`Wt%IH`jfyKtPTB zLT=8Gz`9Xjit96$Il1M!W4=%y@JYD#yZH6XvMn}8vx}2eoYrGI7KpGRvx@^N)$+e> zmfgS!8w~aM*T}~;#sjpe6B|%ZGii1vcm{YESV@Gkb5}`ZTy9LkytS;Mn5rMU&yR_kl zy}fKnG^R?zii4c3)7kO|ok?m&KX-M#!Zdr;mT@B=QG|;K>={%)MbO=o zmaX~xF|6NsCGW#PJ}*3B*ZUtM!48Di-~&UPg)$!Ci(sy@NjzA>+lV7 zQG$vdM&tp9Dkico+1)a?-lDQU&##xBQDr4r-Y11S{-86`bP04~2tlWRG{je9jzoZ7&`LRnT zu~^Up;tXAk^C_qKir)=>;?uh0e&O0A)oUNNZzBpnPJQ-wU6t2SaCsHfCYAh!=)B)V zDct({19WwExv8;Q)tHCr^3=wA#>jQ|SuKbh*|?{Sc-x;>TgU9L%7NsJ8BBVgu&WE?tbx9z9|Jxa^Uuo-R&(8b}1a7l(~OviQQr*zdP^h zptBvKqoks|skR1w6MJ276$iE)T?HY=D>o5MemeGVA6QGcVpKVMMC>fjB>s^R zO&^Qc@X$rpnn`}dJ4aE#ahMqn8NGudM`3h#`u{*3VJlITxqRgEYL}^Op=dB}f5RRt zE7m=k$wSJ`4VNDlxT=W^x66%Q=}yc!{7jwlXF>|iZfE2uw$JjYQF|{-k$GJh`DeLL z!be_SU+n}+nG!mfp$XPZ!#rvk#p0+Uh#N;>q17c@PYM4r6(fk;#J87VP!{*Q_Sc-Uh?@3b`8xuqtk7j+`pmKCCC0=N!!2(rYJPbd4m>QIei&<=Kh zEmUy#SnpHKR`f!Hm*0;rPHqh^-6U9sFMEhD*JzkkVB8>N?d!m8 zN?pdsA2)y1r*!R8`aSWG!g^e>n8hrQ81}nI?mEqAWQG`|Texdu2Qpjxngvu9&%GI8 zmdk_jk^)KmJe~8TP3zs;JOw$9@lnYs<-^G t0zj-tX9fEvY~N>Zl!zsN#9;idFX;FDKlXn*R}w!a{t4qHD@FhS literal 0 HcmV?d00001