From 279ec10081f245f4d5bbca8b63485c841f619e35 Mon Sep 17 00:00:00 2001 From: TheArcaneBrony Date: Tue, 19 Jul 2022 07:21:26 +0200 Subject: [PATCH] State update, havent tested --- .gitignore | 3 +- api/package.json | 17 +-- api/src/Server.ts | 8 +- api/src/middlewares/Authentication.ts | 2 +- api/src/middlewares/BodyParser.ts | 2 +- api/src/middlewares/ErrorHandler.ts | 2 +- api/src/middlewares/TestClient.ts | 3 +- api/src/routes/auth/register.ts | 3 +- .../routes/channels/#channel_id/invites.ts | 2 +- .../#channel_id/messages/#message_id/index.ts | 2 +- .../messages/#message_id/reactions.ts | 2 +- .../#channel_id/messages/bulk-delete.ts | 2 +- .../channels/#channel_id/messages/index.ts | 2 +- .../channels/#channel_id/permissions.ts | 2 +- api/src/routes/channels/#channel_id/pins.ts | 2 +- api/src/routes/channels/#channel_id/purge.ts | 2 +- .../routes/channels/#channel_id/webhooks.ts | 2 +- api/src/routes/discoverable-guilds.ts | 3 +- api/src/routes/discovery.ts | 2 +- api/src/routes/downloads.ts | 2 +- api/src/routes/experiments.ts | 2 +- api/src/routes/gifs/trending.ts | 2 +- api/src/routes/guild-recommendations.ts | 3 +- api/src/routes/guilds/#guild_id/audit-logs.ts | 2 +- api/src/routes/guilds/#guild_id/bans.ts | 2 +- api/src/routes/guilds/#guild_id/channels.ts | 2 +- api/src/routes/guilds/#guild_id/delete.ts | 2 +- api/src/routes/guilds/#guild_id/index.ts | 3 +- .../routes/guilds/#guild_id/integrations.ts | 2 +- .../#guild_id/members/#member_id/index.ts | 2 +- .../routes/guilds/#guild_id/members/index.ts | 2 +- .../guilds/#guild_id/roles/#role_id/index.ts | 2 +- .../routes/guilds/#guild_id/roles/index.ts | 2 +- api/src/routes/guilds/#guild_id/stickers.ts | 2 +- api/src/routes/guilds/#guild_id/templates.ts | 2 +- api/src/routes/guilds/#guild_id/vanity-url.ts | 2 +- api/src/routes/guilds/#guild_id/webhooks.ts | 2 +- .../routes/guilds/#guild_id/welcome_screen.ts | 2 +- .../routes/guilds/#guild_id/widget.json.ts | 2 +- api/src/routes/guilds/#guild_id/widget.png.ts | 2 +- api/src/routes/invites/index.ts | 2 +- api/src/routes/users/@me/delete.ts | 2 +- api/src/routes/users/@me/guilds.ts | 2 +- api/src/routes/users/@me/relationships.ts | 2 +- api/src/start.ts | 1 - api/src/util/handlers/Message.ts | 2 +- api/src/util/utility/passwordStrength.ts | 1 - api/tsconfig.json | 2 +- bundle/package-lock.json | Bin 673595 -> 378759 bytes bundle/package.json | 67 +--------- cdn/package.json | 19 +-- cdn/src/routes/attachments.ts | 2 +- cdn/src/routes/avatars.ts | 2 +- cdn/src/routes/external.ts | 5 +- cdn/src/routes/role-icons.ts | 2 +- cdn/src/util/FileStorage.ts | 6 +- cdn/src/util/Storage.ts | 6 +- cdn/tsconfig.json | 2 +- gateway/package.json | 6 - gateway/src/Server.ts | 1 - gateway/src/events/Message.ts | 5 +- gateway/src/listener/listener.ts | 1 - gateway/src/opcodes/LazyRequest.ts | 2 - gateway/src/opcodes/instanceOf.ts | 2 +- gateway/tsconfig.json | 2 +- package-lock.json | Bin 851945 -> 792479 bytes util/package-lock.json | Bin 466540 -> 467541 bytes util/package.json | 2 + util/src/entities/BaseClass.ts | 1 - util/src/entities/Channel.ts | 2 +- util/src/entities/Encryption.ts | 2 +- util/src/entities/Member.ts | 2 +- util/src/fetch.js | 1 - util/src/index.ts | 1 - util/src/util/AutoUpdate.ts | 3 +- util/src/util/Config.ts | 1 - util/src/util/Event.ts | 4 +- util/src/util/FieldError.ts | 2 - util/src/util/Permissions.ts | 13 +- util/src/util/Rights.ts | 13 +- util/src/util/cdn.ts | 4 +- util/src/util/imports/Checks.ts | 125 ++++++++++++++++++ util/src/util/imports/HTTPError.ts | 5 + util/src/util/imports/index.ts | 2 + util/src/util/index.ts | 4 +- util/tsconfig.json | 2 +- 86 files changed, 229 insertions(+), 211 deletions(-) delete mode 100644 util/src/fetch.js create mode 100644 util/src/util/imports/Checks.ts create mode 100644 util/src/util/imports/HTTPError.ts create mode 100644 util/src/util/imports/index.ts diff --git a/.gitignore b/.gitignore index 0f1d93323..c4d703d25 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,5 @@ api/assets/plugins/*.js *.log -*.log.ansi \ No newline at end of file +*.log.ansi +bundle/depclean.* \ No newline at end of file diff --git a/api/package.json b/api/package.json index f8d8376eb..1fa85884b 100644 --- a/api/package.json +++ b/api/package.json @@ -39,52 +39,39 @@ "@babel/core": "^7.18.9", "@babel/preset-env": "^7.18.9", "@babel/preset-typescript": "^7.15.0", - "@ovos-media/ts-transform-paths": "^1.7.18-1", - "@types/amqplib": "^0.8.1", "@types/bcrypt": "^5.0.0", "@types/express": "^4.17.9", "@types/i18next-node-fs-backend": "^2.1.0", - "@types/jest": "^28.1.6", - "@types/jest-expect-message": "^1.0.3", - "@types/jsonwebtoken": "^8.5.0", "@types/morgan": "^1.9.3", "@types/multer": "^1.4.5", "@types/node": "^18.0.6", - "@types/supertest": "^2.0.11", "jest": "^28.1.3", "jest-expect-message": "^1.0.2", - "jest-runtime": "^28.1.3", - "ts-node": "^10.9.1", "ts-node-dev": "^2.0.0", - "ts-patch": "^2.0.1", "typescript": "^4.4.2", "typescript-json-schema": "^0.54.0" }, "dependencies": { "@babel/preset-typescript": "^7.15.0", "@fosscord/util": "file:../util", - "@sentry/node": "^7.7.0", - "@sentry/tracing": "^7.7.0", "ajv": "8.6.2", "ajv-formats": "^2.1.1", - "amqplib": "^0.10.0", - "assert": "^2.0.0", "bcrypt": "^5.0.1", "body-parser": "^1.19.0", + "canvas": "^2.9.3", "cheerio": "^1.0.0-rc.10", "dotenv": "^16.0.1", "express": "^4.17.1", - "form-data": "^4.0.0", "i18next": "^21.8.14", "i18next-http-middleware": "^3.1.3", "i18next-node-fs-backend": "^2.1.3", "image-size": "^1.0.0", - "jsonwebtoken": "^8.5.1", "lambert-server": "^1.2.12", "missing-native-js-functions": "^1.2.18", "morgan": "^1.10.0", "multer": "^1.4.5-lts.1", "node-2fa": "^2.0.3", + "node-fetch": "^2.6.7", "patch-package": "^6.4.7", "picocolors": "^1.0.0", "proxy-agent": "^5.0.0", diff --git a/api/src/Server.ts b/api/src/Server.ts index 2b38f4a15..f309834b2 100644 --- a/api/src/Server.ts +++ b/api/src/Server.ts @@ -1,7 +1,6 @@ -import "missing-native-js-functions"; import { Server, ServerOptions } from "lambert-server"; import { Authentication, CORS } from "./middlewares/"; -import { Config, initDatabase, initEvent } from "@fosscord/util"; +import { Config, initDatabase, initEvent, registerRoutes } from "@fosscord/util"; import { ErrorHandler } from "./middlewares/ErrorHandler"; import { BodyParser } from "./middlewares/BodyParser"; import { Router, Request, Response, NextFunction } from "express"; @@ -11,7 +10,6 @@ import TestClient from "./middlewares/TestClient"; import { initTranslation } from "./middlewares/Translation"; import morgan from "morgan"; import { initInstance } from "./util/handlers/Instance"; -import { registerRoutes } from "@fosscord/util"; import { red } from "picocolors" export interface FosscordServerOptions extends ServerOptions {} @@ -50,7 +48,7 @@ export class FosscordServer extends Server { } }) ); - }; + } this.app.use(CORS); this.app.use(BodyParser({ inflate: true, limit: "10mb" })); @@ -91,4 +89,4 @@ export class FosscordServer extends Server { return super.start(); } -}; \ No newline at end of file +} \ No newline at end of file diff --git a/api/src/middlewares/Authentication.ts b/api/src/middlewares/Authentication.ts index 1df7911be..2d9ccf571 100644 --- a/api/src/middlewares/Authentication.ts +++ b/api/src/middlewares/Authentication.ts @@ -1,5 +1,5 @@ import { NextFunction, Request, Response } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { checkToken, Config, Rights } from "@fosscord/util"; export const NO_AUTHORIZATION_ROUTES = [ diff --git a/api/src/middlewares/BodyParser.ts b/api/src/middlewares/BodyParser.ts index 4cb376bc2..35db3c6fb 100644 --- a/api/src/middlewares/BodyParser.ts +++ b/api/src/middlewares/BodyParser.ts @@ -1,6 +1,6 @@ import bodyParser, { OptionsJson } from "body-parser"; import { NextFunction, Request, Response } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; export function BodyParser(opts?: OptionsJson) { const jsonParser = bodyParser.json(opts); diff --git a/api/src/middlewares/ErrorHandler.ts b/api/src/middlewares/ErrorHandler.ts index 2012b91c3..8a046e06f 100644 --- a/api/src/middlewares/ErrorHandler.ts +++ b/api/src/middlewares/ErrorHandler.ts @@ -1,5 +1,5 @@ import { NextFunction, Request, Response } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { ApiError, FieldError } from "@fosscord/util"; const EntityNotFoundErrorRegex = /"(\w+)"/; diff --git a/api/src/middlewares/TestClient.ts b/api/src/middlewares/TestClient.ts index 466d4bccf..167b4c47c 100644 --- a/api/src/middlewares/TestClient.ts +++ b/api/src/middlewares/TestClient.ts @@ -1,11 +1,10 @@ import express, { Request, Response, Application } from "express"; -import fs, { writeFile } from "fs"; +import fs from "fs"; import path from "path"; import fetch, { Response as FetchResponse, Headers } from "node-fetch"; import ProxyAgent from 'proxy-agent'; import { Config } from "@fosscord/util"; import { AssetCacheItem } from "../util/entities/AssetCacheItem" -import { FileLogger } from "typeorm"; export default function TestClient(app: Application) { const agent = new ProxyAgent(); diff --git a/api/src/routes/auth/register.ts b/api/src/routes/auth/register.ts index 94dd65021..9816c5fd1 100644 --- a/api/src/routes/auth/register.ts +++ b/api/src/routes/auth/register.ts @@ -1,9 +1,8 @@ import { Request, Response, Router } from "express"; import { Config, generateToken, Invite, FieldErrors, User, adjustEmail, trimSpecial } from "@fosscord/util"; import { route, getIpAdress, IPAnalysis, isProxy } from "@fosscord/api"; -import "missing-native-js-functions"; import bcrypt from "bcrypt"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; const router: Router = Router(); diff --git a/api/src/routes/channels/#channel_id/invites.ts b/api/src/routes/channels/#channel_id/invites.ts index 9c3611647..788f7d6de 100644 --- a/api/src/routes/channels/#channel_id/invites.ts +++ b/api/src/routes/channels/#channel_id/invites.ts @@ -1,5 +1,5 @@ import { Router, Request, Response } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { random } from "@fosscord/api"; import { Channel, Invite, InviteCreateEvent, emitEvent, User, Guild, PublicInviteRelation } from "@fosscord/util"; diff --git a/api/src/routes/channels/#channel_id/messages/#message_id/index.ts b/api/src/routes/channels/#channel_id/messages/#message_id/index.ts index b7f1e1307..0b228ed66 100644 --- a/api/src/routes/channels/#channel_id/messages/#message_id/index.ts +++ b/api/src/routes/channels/#channel_id/messages/#message_id/index.ts @@ -19,7 +19,7 @@ import multer from "multer"; import { route } from "@fosscord/api"; import { handleMessage, postHandleMessage } from "@fosscord/api"; import { MessageCreateSchema } from "../index"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; const router = Router(); // TODO: message content/embed string length limit diff --git a/api/src/routes/channels/#channel_id/messages/#message_id/reactions.ts b/api/src/routes/channels/#channel_id/messages/#message_id/reactions.ts index 2a387fc1b..f56f18d30 100644 --- a/api/src/routes/channels/#channel_id/messages/#message_id/reactions.ts +++ b/api/src/routes/channels/#channel_id/messages/#message_id/reactions.ts @@ -15,7 +15,7 @@ import { } from "@fosscord/util"; import { route } from "@fosscord/api"; import { Router, Response, Request } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { In } from "typeorm"; const router = Router(); diff --git a/api/src/routes/channels/#channel_id/messages/bulk-delete.ts b/api/src/routes/channels/#channel_id/messages/bulk-delete.ts index 9e8cad235..2e40f110d 100644 --- a/api/src/routes/channels/#channel_id/messages/bulk-delete.ts +++ b/api/src/routes/channels/#channel_id/messages/bulk-delete.ts @@ -1,6 +1,6 @@ import { Router, Response, Request } from "express"; import { Channel, Config, emitEvent, getPermission, getRights, MessageDeleteBulkEvent, Message } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { In } from "typeorm"; diff --git a/api/src/routes/channels/#channel_id/messages/index.ts b/api/src/routes/channels/#channel_id/messages/index.ts index 6d4d57941..f8e62d8ce 100644 --- a/api/src/routes/channels/#channel_id/messages/index.ts +++ b/api/src/routes/channels/#channel_id/messages/index.ts @@ -15,7 +15,7 @@ import { uploadFile, Member } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { handleMessage, postHandleMessage, route } from "@fosscord/api"; import multer from "multer"; import { FindManyOptions, LessThan, MoreThan } from "typeorm"; diff --git a/api/src/routes/channels/#channel_id/permissions.ts b/api/src/routes/channels/#channel_id/permissions.ts index cdcbde3d4..798f7c8da 100644 --- a/api/src/routes/channels/#channel_id/permissions.ts +++ b/api/src/routes/channels/#channel_id/permissions.ts @@ -9,7 +9,7 @@ import { Role } from "@fosscord/util"; import { Router, Response, Request } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; const router: Router = Router(); diff --git a/api/src/routes/channels/#channel_id/pins.ts b/api/src/routes/channels/#channel_id/pins.ts index e71e659fb..5c314f092 100644 --- a/api/src/routes/channels/#channel_id/pins.ts +++ b/api/src/routes/channels/#channel_id/pins.ts @@ -9,7 +9,7 @@ import { DiscordApiErrors } from "@fosscord/util"; import { Router, Request, Response } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; const router: Router = Router(); diff --git a/api/src/routes/channels/#channel_id/purge.ts b/api/src/routes/channels/#channel_id/purge.ts index 3a6997b24..7ab4ad9a4 100644 --- a/api/src/routes/channels/#channel_id/purge.ts +++ b/api/src/routes/channels/#channel_id/purge.ts @@ -1,4 +1,4 @@ -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { isTextChannel } from "./messages"; import { FindManyOptions, Between, Not } from "typeorm"; diff --git a/api/src/routes/channels/#channel_id/webhooks.ts b/api/src/routes/channels/#channel_id/webhooks.ts index cfb276ba9..52f7ef7d5 100644 --- a/api/src/routes/channels/#channel_id/webhooks.ts +++ b/api/src/routes/channels/#channel_id/webhooks.ts @@ -1,7 +1,7 @@ import { Router, Response, Request } from "express"; import { route } from "@fosscord/api"; import { Channel, Config, getPermission, trimSpecial, Webhook } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { isTextChannel } from "./messages/index"; import { DiscordApiErrors } from "@fosscord/util"; diff --git a/api/src/routes/discoverable-guilds.ts b/api/src/routes/discoverable-guilds.ts index fb7b844f4..2d1e60b61 100644 --- a/api/src/routes/discoverable-guilds.ts +++ b/api/src/routes/discoverable-guilds.ts @@ -1,7 +1,8 @@ import { Guild, Config } from "@fosscord/util"; import { Router, Request, Response } from "express"; -import { route } from "@fosscord/api"; +import { route } from ".."; +import { Like } from "typeorm"; const router = Router(); diff --git a/api/src/routes/discovery.ts b/api/src/routes/discovery.ts index a7df120e7..30c418c62 100644 --- a/api/src/routes/discovery.ts +++ b/api/src/routes/discovery.ts @@ -1,6 +1,6 @@ import { Categories } from "@fosscord/util"; import { Router, Response, Request } from "express"; -import { route } from "@fosscord/api"; +import { route } from ".."; const router = Router(); diff --git a/api/src/routes/downloads.ts b/api/src/routes/downloads.ts index ddfc080cf..03c73f440 100644 --- a/api/src/routes/downloads.ts +++ b/api/src/routes/downloads.ts @@ -1,5 +1,5 @@ import { Router, Response, Request } from "express"; -import { route } from "@fosscord/api"; +import { route } from ".."; import { Release, Config } from "@fosscord/util"; const router = Router(); diff --git a/api/src/routes/experiments.ts b/api/src/routes/experiments.ts index 7be86fb89..fcbd9271d 100644 --- a/api/src/routes/experiments.ts +++ b/api/src/routes/experiments.ts @@ -1,5 +1,5 @@ import { Router, Response, Request } from "express"; -import { route } from "@fosscord/api"; +import { route } from ".."; const router = Router(); diff --git a/api/src/routes/gifs/trending.ts b/api/src/routes/gifs/trending.ts index bc143f005..61eb76c4c 100644 --- a/api/src/routes/gifs/trending.ts +++ b/api/src/routes/gifs/trending.ts @@ -3,7 +3,7 @@ import fetch from "node-fetch"; import ProxyAgent from 'proxy-agent'; import { route } from "@fosscord/api"; import { Config } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; const router = Router(); diff --git a/api/src/routes/guild-recommendations.ts b/api/src/routes/guild-recommendations.ts index 069e42218..ee2c26f1b 100644 --- a/api/src/routes/guild-recommendations.ts +++ b/api/src/routes/guild-recommendations.ts @@ -1,7 +1,8 @@ import { Guild, Config } from "@fosscord/util"; import { Router, Request, Response } from "express"; -import { route } from "@fosscord/api"; +import { route } from ".."; +import {Like} from "typeorm" const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/audit-logs.ts b/api/src/routes/guilds/#guild_id/audit-logs.ts index a4f2f800b..7b1d00628 100644 --- a/api/src/routes/guilds/#guild_id/audit-logs.ts +++ b/api/src/routes/guilds/#guild_id/audit-logs.ts @@ -1,6 +1,6 @@ import { Router, Response, Request } from "express"; import { Channel, ChannelUpdateEvent, getPermission, emitEvent } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { ChannelModifySchema } from "../../channels/#channel_id"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/bans.ts b/api/src/routes/guilds/#guild_id/bans.ts index 1ce41936a..eb38de0db 100644 --- a/api/src/routes/guilds/#guild_id/bans.ts +++ b/api/src/routes/guilds/#guild_id/bans.ts @@ -1,6 +1,6 @@ import { Request, Response, Router } from "express"; import { DiscordApiErrors, emitEvent, getPermission, GuildBanAddEvent, GuildBanRemoveEvent, Guild, Ban, User, Member } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { getIpAdress, route } from "@fosscord/api"; export interface BanCreateSchema { diff --git a/api/src/routes/guilds/#guild_id/channels.ts b/api/src/routes/guilds/#guild_id/channels.ts index a921fa214..e3c6b8bd7 100644 --- a/api/src/routes/guilds/#guild_id/channels.ts +++ b/api/src/routes/guilds/#guild_id/channels.ts @@ -1,6 +1,6 @@ import { Router, Response, Request } from "express"; import { Channel, ChannelUpdateEvent, getPermission, emitEvent } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { ChannelModifySchema } from "../../channels/#channel_id"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/delete.ts b/api/src/routes/guilds/#guild_id/delete.ts index 86550005d..e26246511 100644 --- a/api/src/routes/guilds/#guild_id/delete.ts +++ b/api/src/routes/guilds/#guild_id/delete.ts @@ -1,6 +1,6 @@ import { Channel, emitEvent, GuildDeleteEvent, Guild, Member, Message, Role, Invite, Emoji } from "@fosscord/util"; import { Router, Request, Response } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/index.ts b/api/src/routes/guilds/#guild_id/index.ts index bf77bd5ec..d9c8f13ba 100644 --- a/api/src/routes/guilds/#guild_id/index.ts +++ b/api/src/routes/guilds/#guild_id/index.ts @@ -1,8 +1,7 @@ import { Request, Response, Router } from "express"; import { DiscordApiErrors, emitEvent, getPermission, getRights, Guild, GuildUpdateEvent, handleFile, Member } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; -import "missing-native-js-functions"; import { GuildCreateSchema } from "../index"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/integrations.ts b/api/src/routes/guilds/#guild_id/integrations.ts index abf997c9d..19f685635 100644 --- a/api/src/routes/guilds/#guild_id/integrations.ts +++ b/api/src/routes/guilds/#guild_id/integrations.ts @@ -1,6 +1,6 @@ import { Router, Response, Request } from "express"; import { Channel, ChannelUpdateEvent, getPermission, emitEvent } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { ChannelModifySchema } from "../../channels/#channel_id"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/members/#member_id/index.ts b/api/src/routes/guilds/#guild_id/members/#member_id/index.ts index 5601097e0..e4a060d66 100644 --- a/api/src/routes/guilds/#guild_id/members/#member_id/index.ts +++ b/api/src/routes/guilds/#guild_id/members/#member_id/index.ts @@ -1,6 +1,6 @@ import { Request, Response, Router } from "express"; import { Member, getPermission, getRights, Role, GuildMemberUpdateEvent, emitEvent, Sticker, Emoji, Rights, Guild } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/members/index.ts b/api/src/routes/guilds/#guild_id/members/index.ts index b730a4e77..2ed28bda5 100644 --- a/api/src/routes/guilds/#guild_id/members/index.ts +++ b/api/src/routes/guilds/#guild_id/members/index.ts @@ -2,7 +2,7 @@ import { Request, Response, Router } from "express"; import { Guild, Member, PublicMemberProjection } from "@fosscord/util"; import { route } from "@fosscord/api"; import { MoreThan } from "typeorm"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/roles/#role_id/index.ts b/api/src/routes/guilds/#guild_id/roles/#role_id/index.ts index 2ad01682c..7efc53823 100644 --- a/api/src/routes/guilds/#guild_id/roles/#role_id/index.ts +++ b/api/src/routes/guilds/#guild_id/roles/#role_id/index.ts @@ -1,7 +1,7 @@ import { Router, Request, Response } from "express"; import { Role, Member, GuildRoleUpdateEvent, GuildRoleDeleteEvent, emitEvent, handleFile } from "@fosscord/util"; import { route } from "@fosscord/api"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { RoleModifySchema } from "../"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/roles/index.ts b/api/src/routes/guilds/#guild_id/roles/index.ts index 534651054..2f5141b84 100644 --- a/api/src/routes/guilds/#guild_id/roles/index.ts +++ b/api/src/routes/guilds/#guild_id/roles/index.ts @@ -11,7 +11,7 @@ import { DiscordApiErrors, handleFile } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; const router: Router = Router(); diff --git a/api/src/routes/guilds/#guild_id/stickers.ts b/api/src/routes/guilds/#guild_id/stickers.ts index 4ea1dce1c..bfc462915 100644 --- a/api/src/routes/guilds/#guild_id/stickers.ts +++ b/api/src/routes/guilds/#guild_id/stickers.ts @@ -12,7 +12,7 @@ import { import { Router, Request, Response } from "express"; import { route } from "@fosscord/api"; import multer from "multer"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; const router = Router(); router.get("/", route({}), async (req: Request, res: Response) => { diff --git a/api/src/routes/guilds/#guild_id/templates.ts b/api/src/routes/guilds/#guild_id/templates.ts index 2989c0d2d..7e4119076 100644 --- a/api/src/routes/guilds/#guild_id/templates.ts +++ b/api/src/routes/guilds/#guild_id/templates.ts @@ -1,6 +1,6 @@ import { Request, Response, Router } from "express"; import { Guild, Template } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { generateCode } from "@fosscord/api"; diff --git a/api/src/routes/guilds/#guild_id/vanity-url.ts b/api/src/routes/guilds/#guild_id/vanity-url.ts index 29cd25e23..e841b8b39 100644 --- a/api/src/routes/guilds/#guild_id/vanity-url.ts +++ b/api/src/routes/guilds/#guild_id/vanity-url.ts @@ -1,7 +1,7 @@ import { Channel, ChannelType, getPermission, Guild, Invite, trimSpecial } from "@fosscord/util"; import { Router, Request, Response } from "express"; import { route } from "@fosscord/api"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/webhooks.ts b/api/src/routes/guilds/#guild_id/webhooks.ts index 8b2febeac..7f5b95928 100644 --- a/api/src/routes/guilds/#guild_id/webhooks.ts +++ b/api/src/routes/guilds/#guild_id/webhooks.ts @@ -1,6 +1,6 @@ import { Router, Response, Request } from "express"; import { Channel, ChannelUpdateEvent, getPermission, emitEvent } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import { ChannelModifySchema } from "../../channels/#channel_id"; const router = Router(); diff --git a/api/src/routes/guilds/#guild_id/welcome_screen.ts b/api/src/routes/guilds/#guild_id/welcome_screen.ts index 7141f17ee..ab1251311 100644 --- a/api/src/routes/guilds/#guild_id/welcome_screen.ts +++ b/api/src/routes/guilds/#guild_id/welcome_screen.ts @@ -1,6 +1,6 @@ import { Request, Response, Router } from "express"; import { Guild, getPermission, Snowflake, Member } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; const router: Router = Router(); diff --git a/api/src/routes/guilds/#guild_id/widget.json.ts b/api/src/routes/guilds/#guild_id/widget.json.ts index 154b25173..97f3c3034 100644 --- a/api/src/routes/guilds/#guild_id/widget.json.ts +++ b/api/src/routes/guilds/#guild_id/widget.json.ts @@ -1,6 +1,6 @@ import { Request, Response, Router } from "express"; import { Config, Permissions, Guild, Invite, Channel, Member } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { random, route } from "@fosscord/api"; const router: Router = Router(); diff --git a/api/src/routes/guilds/#guild_id/widget.png.ts b/api/src/routes/guilds/#guild_id/widget.png.ts index 4c82b7407..4298d0fe4 100644 --- a/api/src/routes/guilds/#guild_id/widget.png.ts +++ b/api/src/routes/guilds/#guild_id/widget.png.ts @@ -1,6 +1,6 @@ import { Request, Response, Router } from "express"; import { Guild } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; import fs from "fs"; import path from "path"; diff --git a/api/src/routes/invites/index.ts b/api/src/routes/invites/index.ts index eeafb22ab..b0a349393 100644 --- a/api/src/routes/invites/index.ts +++ b/api/src/routes/invites/index.ts @@ -1,7 +1,7 @@ import { Router, Request, Response } from "express"; import { emitEvent, getPermission, Guild, Invite, InviteDeleteEvent, User, PublicInviteRelation } from "@fosscord/util"; import { route } from "@fosscord/api"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; const router: Router = Router(); diff --git a/api/src/routes/users/@me/delete.ts b/api/src/routes/users/@me/delete.ts index c24c3f1ec..1d81c2b98 100644 --- a/api/src/routes/users/@me/delete.ts +++ b/api/src/routes/users/@me/delete.ts @@ -2,7 +2,7 @@ import { Router, Request, Response } from "express"; import { Guild, Member, User } from "@fosscord/util"; import { route } from "@fosscord/api"; import bcrypt from "bcrypt"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; const router = Router(); diff --git a/api/src/routes/users/@me/guilds.ts b/api/src/routes/users/@me/guilds.ts index 754a240e3..4d4fccd4a 100644 --- a/api/src/routes/users/@me/guilds.ts +++ b/api/src/routes/users/@me/guilds.ts @@ -1,6 +1,6 @@ import { Router, Request, Response } from "express"; import { Guild, Member, User, GuildDeleteEvent, GuildMemberRemoveEvent, emitEvent, Config } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { route } from "@fosscord/api"; const router: Router = Router(); diff --git a/api/src/routes/users/@me/relationships.ts b/api/src/routes/users/@me/relationships.ts index d03014b64..b2e39d52d 100644 --- a/api/src/routes/users/@me/relationships.ts +++ b/api/src/routes/users/@me/relationships.ts @@ -9,7 +9,7 @@ import { Config } from "@fosscord/util"; import { Router, Response, Request } from "express"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { DiscordApiErrors } from "@fosscord/util"; import { route } from "@fosscord/api"; diff --git a/api/src/start.ts b/api/src/start.ts index 841ad3d5d..9ba198e72 100644 --- a/api/src/start.ts +++ b/api/src/start.ts @@ -1,7 +1,6 @@ process.on("uncaughtException", console.error); process.on("unhandledRejection", console.error); -import "missing-native-js-functions"; import { config } from "dotenv"; config(); import { FosscordServer } from "./Server"; diff --git a/api/src/util/handlers/Message.ts b/api/src/util/handlers/Message.ts index 31ac91080..0a74312ef 100644 --- a/api/src/util/handlers/Message.ts +++ b/api/src/util/handlers/Message.ts @@ -22,7 +22,7 @@ import { Attachment, Config, } from "@fosscord/util"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import fetch from "node-fetch"; import cheerio from "cheerio"; import { MessageCreateSchema } from "../../routes/channels/#channel_id/messages"; diff --git a/api/src/util/utility/passwordStrength.ts b/api/src/util/utility/passwordStrength.ts index f8badea78..8eca63b8a 100644 --- a/api/src/util/utility/passwordStrength.ts +++ b/api/src/util/utility/passwordStrength.ts @@ -1,5 +1,4 @@ import { Config } from "@fosscord/util"; -import "missing-native-js-functions"; const reNUMBER = /[0-9]/g; const reUPPERCASELETTER = /[A-Z]/g; diff --git a/api/tsconfig.json b/api/tsconfig.json index 91396aa8e..80fca16df 100644 --- a/api/tsconfig.json +++ b/api/tsconfig.json @@ -5,7 +5,7 @@ /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Basic Options */ - "incremental": true /* Enable incremental compilation */, + "incremental": false /* Enable incremental compilation */, "target": "ESNext" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, "lib": ["ES2021"] /* Specify library files to be included in the compilation. */, diff --git a/bundle/package-lock.json b/bundle/package-lock.json index 5078696fd47b825037a4224e64601b52cd8459a1..7a409df31c788ca17f64cd94ae3b3d483797fc58 100644 GIT binary patch delta 13900 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 delta 167581 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

3)GsB`4`fnXD_x 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 z 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�x~+-R9`>}A=4Ud#D)gj^3!(#Np|b=avsEgAtaVB3%WHM*5~Ql*Q?C<+ z5)Ze(d%O*tS^n_?f5Yx69!Ho@9y}PRxcWN&K)hR@_#h8F5Ccf#1^|&ply}k82!Hwl zRQ><(2LaAP9qm0B4uT}inV*U21Y($}E6IhvTbiWWpcbhxS~lAa8pS#Tv$nIzteQN5 z=`Al^@lyq>HETDeK@KBxIeb+~&(=+1)*Q{U)=J`Yph(XaWm%rqara*Mk?({uS>YXtdqea?P&e^k{uYQz;&dUJ1PnR!?Vg8SI1j}_ zA<<5G@*2dZVo9yQp17JPtPw)#_Il`r>!wW34K<$M!hp(WnuU%}pyAWr+X-O*F4 z;{L+jhL{LMUjHmi{@E)B?@HX*3qSl@2T#31zB}=~_uYSsPZZNsfxXTLMR_!7h|O+oqnC@Go{`jowh~3)uRJbWF|_=1%_mCIWOcS8B}`cv{tV3 z^or3vUJqtevDs=B+y*ClQ?WW;7+PlCH`cBTw4&MhCPJ-Wzvtx89Fg*b`A;4^47hA^ z8%aOg1d(>=TXa#xpNfT_x(|fsf{CEk@;2fF^&ggLh?Z||)T*f#Csa9IA|amMPS+M2~t;9)?Ok^aFE0dy;jtn(< zs~>sNzmxNR9I@D=Vvq9a+eHK54oi%&cv$i#QZ6wi_AWSeP5UJtT}- zvqh{n*|MbbX229dyO``1+AACk(S)w80WXWM^Hyn{pX zq=(1j7S98ls19X7FF^8~Rc=H7)MD^Z(F?{pu_tRIOi%Vk74R~wut7uNfC9{C(h?8H>*H`0G zYC~YPw6j9%>wFs>dK*{qR&^8;E4d)E%oaJ|Y4Z9bqh-^T$%q3=1=o?ZRqJFRd~F9Ny4Nb`oN6~uXd2sF<_ z)eGi6Z?tEoF0C7&sJB)M!UF3+tYTftpdFWX2JSdT54u8Q<(JhFZ_r|SKJl{zv7SxF zW1MG7#M*~C=6AaXR}+zrI}mszt|X#dajdly!%OmlQ0TFRCgSM9Xw$aH4py{HnsZZb zNlGaoKt9EKeuvQ!H*l&7!r`eAQS$tB&}J4^FQ;*}p|SBM^tcE3m`*l@;0@r!gyUN% zelYP&`0!68zI3PRI1^JF1JLBJfuSejMqK970mm&?!`4_{*qLz+N{X9h7+T180oaJ&cW_PSAnDyDq=5(=*Rc& z3h(>z#2v5v%}*r0?I8TC)&5n$5rQ1WFYaA$*^KSesTAfBR;S40Z8oD~DWZ`oDgCP6 z&u^NUI%Jwv6Ucw2Y2Xn|x4cb-XbY~RF4Pu17(oVNV67|TOg;k}@qjgZ!|yM4lI-jUASfdkB_E%)}bDmx-)-4u?=K2uLHMl->yz-(_SwXOfxf*>(Y8= z#8?wPBR5h^Ps`&xMdv4zmNlG$daRO}4u&jeH;hq{tEB5I!f^m^+|E0Uu$&J0Cgehg zxx&_wi5|ew=kI(h41XKS>mve;m@|)QuAu6>&K9IewVhsjUSm_rDtcu}RPzOfAWC(> zk`mOEFWZIG2u)j+@{m!S^d{Y^4E!dPAM@^{wq{+tp3}1+YDkKd8~x%NFPj(%1|*Jq z0~RH6=Kx@__Y;YS!XJAWxL@y`ZOi-<;V)m^*4^C^e(y(}!ek*+%~Tc7wVHT(lEv3WwpjCPrO76!d;H8QF6%IVQtKSxQ40M!?xdQcUn#6= zrQRqP^f#-O<1FxH9vO)nO4EP?@!WKYx_ECQa#TYgyM5?PJu%b=#{Ina`qquTwYS@M zPpI5xR@spAqTZ>N97XR_AdphbgX>pL8Ch!QDkE3+UuB zYnYZ-Y#6*EEq%ORQt4Hm>srffzS&MMoAY3Xwmmezn}l(n@4c|?Lu`chK{7cm&5aIO zN1yu=7B80v;xi3UMn~uWxMlvzjaFk&&X;&yrMYT-I&bthJXxbi&zbn1UnEK-P>_JS z6A$#GwBMXFDaqRmaK#S&jL0$IIxAML`_Y-3*@BwP`ch}X5TC>mkV-KU2UkMHD>LcknM72+H^WjYe@t7Q86!PvW{r&jOm3$ zG%)e_y=HqrhMXhZ%UAz8@yH%^l)reTJy+YZr%jiPmtqLN*W@Zf&<3fH-YBojRVjlN z!IPI$9Yq{!xnRw7da9X19J$KXu=LVyxRlkvXN!#P3<;{-$|5o_A4X2y)5+);p@L`t z`89AO!>@iGlocWy_h8%r6D$5dxR_DvUNx>!&zT_g=z!K74zj6SQRsD+rfm8{zqFf@&xGBV5-;BYo~PkJ zxrp?807CidcP6j3yXtTzg87(~Hfpz9q{d#==?xl7DX2oovV?GKp3iU#p|apro2zA! zJ}z{}a?s7`4iLYCmmN%ul&R`EIn1THEVHT_N{Bsoa4lZF+kII45a@P^FD33wI12+P z$>0Cl@B{Aw^d)W9RJ}7V)4jr4DAt$Ss7J|x*Q8LH`+ zw3aTUaBbuHgR#Y|TPd;F!*U4H%3F;fZ|9&a^Zki*R6PB7_{%}!uCV))2Oz=|>5-^> z@@gC8^juJ1ZRHp7~0A)P-;l@ zAVp+mDvf}2^NdVTGk|e0mE3T#O%5HKt03{3*jz=GwEy9*t$P@yZr=BC*sOaW2V7=v zk-U5B0J-k6=-@7CNDV|9;q)-O79=9zR;gkJG}>sY*BR64DLqYhCS?n6IP-BQr<*+el~G5(HgX=Jg(hV2!0Vnz)-b1*-O@iAs_4_gyb1ULXF>B@o>B_?JMnjI~Hq za`En1u{f3%Ho~L|qOEhQ!?y;#nru`8+-ae+HlmLkl{Ev@5RA@<3ff3_3x2-bsW1Cp zFv3RlKrmRq)~s?vX|_FVKewMuhP{89y!ga%h|1OsXK4Z!Ha-F?`%)7m%(r*}!$2p5smmi9@v}USUdSx)( zbw}`Kxu&COPK|dLnTbw}vcq~8!&r>q!>{fquiXVd7@yF{c*}VA&+J{>!;boYg1xps zorBow0PN=RE3ljZ-hF!iM!W54jNK?JS#M@GS7o=U@HpOe`cPBV^d@s%BnxK@{!=xDZ$!Mp(|uidr1?8m7TP<%L( zTRWDNo<`~;QIXiYKd}E`_>0daUrPoNt{5)e1+#Z`SkbLT#LU3JaO*$=5GwpTA#pXF zkq}KYe{=u!*Uo~YqWeCBl{(BE2|xZ6@M+6qB41lnyHd?n%GB5b!LJ4qR4p&4bW%M^ zVtj!$3ObJ=o-gtRZ`0}6BVy{ehN-$o_f)^h@(|y5g>GYtSqyyW`-mS0 z%$O+27yh?jO#JkP;}dJY4(d&Zf3Wxc;rF`-myUwZUkbnS2Oy>P!p9PK-)XO-a_6ZT z_CEp!D`J=pzxglsE`8IS?5}dm&Ajay+(yl(`yNVW2n9oB^5iHCwytl(Ci-olJ@%;= z_7dUSKaq$}nQbwX);aqN^M{(FSl)jdD z~u9=e!!E%4?vnU)z;&y;5goQCQ9N6s3+=6A%<$&~!Do zF)~JlN~wT6;2Hx;C~wqOZYn{R4b;=72-elC_HrI{K&HW3_-b_g-C2M5y@<^)=3kHW zYHwnPm2m@D%Vghe<|#JatZVhO>+T3W6y@;cpY8#i2#y0Mah)(c8PLXk!D*%P|RRED(#@@ikTksfoaf7cQ~}< z#`*rjs_+5E1RyW%a2<=9?qUaS_=Ptm?%2kHfBsA0y4Zog&H&>BZ??;Ge%+`Tg=V)$ zmH132?|?9E&{mo);18cR93wTN)@)N8bSj{pt>>EscB9yoZ!xRPW(C|WUbV;Eg$lczA^JKy0*>?ER7C9bx<_^B_F$IT zKpBfnj;4y}M`6z=LjME6;Q8VQ_AeJtGN!OlOpshZ(b+zWIe;cue&=LBBl?Nh{zUd4 z1kSD|AAJq*FrVxr;io?UE}i&2$tU;UiG`mi!Q%VO2Owg9m!1Sw>xjAfT?x?n_&2TO z!)+UBj_g&@%$6#HK}U}Ob*Zj1HcOjT$|ZS`uh8lSXpwYKHsET$Q){84C1zz5C=VT& zjQkzmo`GdNC1wd9r4if78*F7P+lOC3^a;QGMb)4!C^4kBjP7v2LpNIM4g z`?p08kv)#9AGX8_u0|Awsj*89WzP1pc?0K4DvB;sm1(7}*(p*=)pB)e!=mC`k{3AY zO>iI~kmh{QV>E|o6R1N9tLZez4SNevA=ejaBKAz)rn%YUTDU{_MJREJ4RW-Qvb~|BPc<#HVUDhsq;;H@D-q(j+PK_&P4o8l&B>;t6J|h`x3ZTL* zlR&1ItBUztpMY3UP11U}-yr5JA?61@QA68xJ{ZE0Y(j~A4;^8x>AJ^EL}gJ}DdVD5 zVhf&I_khWYspj*VOrN(IQ70x)A@Dme;2=nN^_v4C*VEG^y3UYb#n$qqwkh@|z}=pn zoHcQ`si6xm5_=Dwq-tVr>t~VM*V;u-@-|Tagi^gRa3}hHHc_#%w`L#i6YW$ z>BTncdOF*br{kuv>bOoD2ji_SB`x37#$6R0+d!$#nHG<=1BrBJU*_s%eRBzkoJV3!pMUfPDN5pE!7Miw51L z%j0Rc&GClVk0c(tKSHy|Z$`AFSSHR~KYJ1_i5ud~^~q%1-T_1hqC{W#IS;slA}l`S zVxoB*r>7q{0{}S9?}sH`#Q*N!M({8bQ@}b6mALxpfIEAw;daBKiJAny!?Y zJ>ZJXEW}P~cy&{0210>fcAIhZOw4p>7EeSH&t<`Wt;d@S+n|Lx?!He}-mrsF&UH@AXeE2pkaSv4J?kHz(sjWFS zEoY)RuP#7|uZcY2-5KKK`(o7EtKev7@Y^x$M7t;A;yorW$VP7d<#Xc^2eU>__#C=_ z3fe@ox4Q;@_}0-p{xr0lStq~)xolVSQ{A34+B0!D>r*TR;_Nxc?CF4@tql+JV z6zDF~w_hNzYHsYmHFvak?}On|OF7m7ECwz`q^`Wm zA+0PUse<0A>8gOsWX-b%aJGi+N?X^uTou{WyA==+Rn$Dl6i}`Rf`){YD%M?Qb3KMj<3mp%(6 z`OwKHVhXhI%lklp20go)NW+N7uaar#BoTA8meU?*j!?O4vc(MG2xeNTuarA*24TjV zDtO~6<&{g!xRD(}>`~ZgO+=JawOUQpmYlj?x->D(j8oOLgD^9h69x#uGSQ;@=BQiY zx4dKTnfs&d?u-i_&Q+l0y!j3wu$z7W;xo=82g##Peeh=Z$UF9)jK?v0aXOAI1*g&M za%EJMB^IFT4VD|1CuL3J7eq;`wm}W9$)$v>O%oQ>N%d#Ck-<$A^n-L#6v|wBQ>|ry z$ltYj6Js0xVm=p&;gcUdcvI9xA|AO{q3n+5?AGL|-eLi?5{GfZJU&#$x#-BZxhG}~ zW&WPaBQ2D_?~({R5tZQbxtfFyg8l+fyN-}rZHPW6x;5I)S7wh(-@)%s;;eB3N(lLBnU2L??RhM)-U80~^i{{MDV|7hF&;{r4_V zIe)5`_~+rz{U4C)`0sypaOwVYxAv;t@C~;#pI!Oe@!bW%w}o%Dl) zGO8oU>5UEwZZgk-1fZ~51*FD~a%R1OSssVYoIo+8305LS1>oCAR;m|^mBQR@+O1Nv z3kq~t4CUvJyAs=b*tfydj2tjHv0>b9khk6QUOfSVi1_5u@B_b;_~|=<6e^nm{+LML zHT?0v+`B%>S7&|2s@UW*)9eiDl>+cu5UFa_ST!=MgD6LuGM*F{ z>+IM>K_hQmKqs34=wa9VO)w`-kgCdHbFF(W!#n7^P_^CnmLc{xkcNBDry<5Blv3Kv z1Lqt{+pRL3fP%qbo*J&W<D0@lv#JoLR?FVDp_nmbe}we-8Nopz<)Li&2lqm)Jn? zip#~4_?Ye0^5IIehXS1IM1-_#gwp^ zvFs8E&7vsUwHwC}o_O_v6LM&*x0PI{r>1c4V)8OnUZ&$+{f>dQ1hnwsdp`#X248qD zxWZBTw}a*e)p5b<8Hk>#@}0(H(_K33st=^^Y6&yk6;K+nvK9E2R=|sa$ByhpKV2>G zR=b5QN?JpaWp&~#@qQ-T22MkKNL6d6jQRHVhtlr$_=bRD?6;z`?`=f zo227N)i`7vu|f{Rm+yt_N-UK0czcG=qk{L*%7gNgwpOz`p!p246o}zDzO?{RoSKg-tC;5b>O$`I#{+XG`mi0Wkoa~0Y<=!O zB`)8260M63D}d2ndLj9E+nnTw1$$uu>u;&<8F@YE`YuT!K)sr>eY9RLW9)`ya=6z7 z+Vp%{1?8Y>VccwwiY;%P(?>41+)OssDrcn!q_}BRY62jRo&$u|4}Mqjjyul<0N*@> z#}n5Of)*PPbeGBPF*1ZpB)xr4NTW3>a@ z5Rc4^)~M7J5NS@iCI)0?RG+Q57#$Qz;Fxct6?m-mtSU8Hc~7xxVs(x|3Mq<+gou&6 zdHCze_m z8&ekwZk%QaXM^Ouux7sP-y~ia{?woBU5^w5vGBT+d^8!srSS0gUIX#opBp6a3;*_) z6ZhjV!68C=GQsDutpfbt>067w4|G4nShx_s3Fxu#i~lb1=tH?%%zwlPH0W>R#Nrnd z*PrbR2$o7Id|Pt?*pi)PQfN?AeQk(m&K&v&M=!rKBANOWKr$65RPS@NiOlA6j%FpY zO+koPrA#tE4{VZbPFBP)70@z@W@&}+NFhBf*D8IYX3S>&Tn(w{zTwx5URF@tRNlyX z?J3uYw#rw$UrGGl-km43bMc`Bq=@kF$$u9KlAm(uMZVdYKO=5fEcT6g$M)(*e%Yoo zSx+Pi+C~{P`bw1+mUt}?QJ~5er{hd*q83Z#iA@y-AUBX6Qf^`FOGRcOyDZn-D1=ij z7Y9b&Dj_v7ANwIdQec~&tHH5rxjl$Sds!MqQ7oO^!ObE5se*i@9Tm2yqbMZrZ7a2b zIOQfrk|z%^-WV5fb;M4&b!Fh&c3*QF2EgmU8@M|#-WnetxKSa(BT>fa?$8R7&)z=( zu8?Sy;D4u@F@_YhK+?IK*I9Nkt<>5~8aAaFKx(p;2Ca|Awx2bAZFd3l&8Sa*woV0GQgqiqE*l9hULe{_50%+f{0!=6L&KF%9r;ppFqgq5fUNx zVB%VP-jQ=PIY;r!agI(4Vr^57!$00k3C=D*N}B_pc6`bOzyB z&<`^^6JD)MTd7%d%8HIqbSefAM)8~JGTjcAS)Als8$3hiiq+=43LJ-{61|vs^M$e^ z+6BhW7iOi*um#IpMNZL$k(c%IBzZOb)7t*^7E@8z5X_e{bhB)&#x$0l5LF}3;kg3q zRuly1=xL$R(3}jprWR6~@3%KyIbH2obRW1G`L&GVm0@R$R&#}Pw@;_XUM@tVjQwXm z2$6L2&V&0?U^~*cE_6@V;n~MY%$@KO6gnS0`Nt4=elhXb>#@UBU2X6y9U;7YU*`Jq zj0ZMX7E{;s*??c@{0KpbhWU0{bn}dGeER2>b;6f<+hMF1#Dca4hyee0z zSi}TS+;qP>7@6{BF4g^NMy=!cnz70do-0hperME5SEhjhm>8SWqa^e$1#>Rp7k=(N z5dHtTO7e*b!)r@8-foCy&26Dl%a%8+FvKlf4Q62<<`2{u#?142S`k9qlIrr?2e;KH*#GeFISi~$E&aUq#ja+Z$wR&x= z)mYm8x*&AZEHPA3zbh2dod(qekqCbcLR-Ktx~QiM5;t$ohAD~wB^(OvWb?HgH*e=F zIP3QiV51YKLdiHEoAlg)vyK#f!XNos0=s_@{~ayk_(k}+uO*&olg*MeFc5SkQ32@p z3N0E{7~2&9YpIX)9Q187tL0h~+HBDceIZe$K(#ly4(D1LH(SrLi%xANLjtccA6pfZ zn5RU=i-X^nps;Tzin+Blv2z|4J^^eqFCYL6`0xwK%k53ytBn_+T9gV_&bmLZIURBU z)v2;jE@Zg56_g6zvRUlr0r0$NIe5=o)s)t}m+OQ2QLo9@K{##WuSh-R_teft@3dIF z7(Vn#;I(<+hd@y4XFr*E<-)c+E$pWtp$U1(^lNtoYcL+W*WvFYpob`u^f>Rzt6nqJ zVT)}R!$y^Y#H?}|Aix5~f0N+2lF()6H9SqY^mHs|QuBb~y_Mw>=4vf4g1QVc*+8mE z>3+*&azIcL;fk)^aZF7UZBklS)Y@8lRAred`aKvpjGIJno;RjGJ2fX`qD+<5(v)jP?oyR*-?&#vt&DWn^0AS*1xK6jOh?DSS+XC{+U)+D9 zRWt@#y`r0Xx05b2OcSR`kRn{*FyDEi60F=JUzG+Ui)-{IRJIf@P!}UzaD<&4-?3h zQ?bvei#z4dsDtrdKIwMl&2rTvnzYnOX$_-V(njQ*aBE&q!Bb?n&2Frq+i4jor|c_O zX1=xptU7>D@{km>J!O(N&|nP{g5vnfXbmFk*f{Rj1wf{03-joOM;}WbE>ytyeVV=6 zHh`#lj?}Xt?X)2_ft1bz`6P#p+QuvclXk^8T_hkgb$?x{YDiC2H)LAuv@&a=uuvC7 z8ZC9Qf-$YK*nCxPf&Hdrxf6SP&u@RvIdo(H;CLH9bIu$_m=WkvoD<&`h5!KIH0BHK zz^O8{j;nOR-8psqM$4%c)6OpN_=}@7z|K*O8;I~*YRT6mVprR#CZDvTrjN3U5UlJ$p61b9l@FL;upH=sLt#xVZT4gt zV;a6Pdxk1bVQ?-%Plfhq@6AoM_#HV;Z3q-R}mMl4%o76qRn2{^Cvx^uvqKeAviOj zwP=%>;*1eNhD<9g0ot7%aAesZ#QxLsfWg?&u)H(E8|~u#g9xM@cN5+}gC){kD33cP z&W%q8yH7+E3lS4Bv_@kRr=53=ki9$(Rh&RC;KP`CI%se~^ab%Jqau`D67$udjkrU* zxdwa35DKQ^Ko7LM+6hxfj&H{x`}h87;`(5~I@4vbL{!VOp<_&HLkgrkR;A5^s_L`# zx@cHk*}5HQ?#S;L;!=~SL55imt<$=} z#N4-Uzj9AF{>}YopE=(a`|P*A71bX7IiSqddYkgxo=+k}nU$+czfaD16!h*TkDCO% zkoD83>I#jvwy5ZuL^QH((6wtLr6s4adYZ>k9IU*8w@FoHZMvL80%uDucBg8Yha=M% zg$bcYtDLZ^6j7n1A|un+kgnKKSW5#SWE~Um-ohb_ zF4se-A42?`}u)Yd3$Q4gk^VXbEcS z@mdD&zNV5B|r@<2dQp%oFCS!ST^M$Hf)aULS<6!h@ABJK96=SORCmbYEf^` zvnoEwslGUohZ|jDn)4O#4`n?g*G81}#tW~1PvVgTjIbA8ya>OQ3t#@b#N%yny&2G| zsk9FiWdv&I%{>`r+3cNKEfiJgJlS&+vuB zcXexZzjl(yF==sWjrD?{wyFYf^r2N|S=4*!`DVXPyQ2@(&Vh;6hOwS+jH-C=`}eN4OOlY`8?eV}6+H)$Cz|I<@(9Lyp28>j z{DQWo4SJ=nN(@2MSfy8$m(5bXSsV?m4YjE&elQ}f;?Q1A`MQRr2zBT%!|h^x`m>3P z`#0Vh$8|&W#pLBJ4Esc?UTF-|kT8+xlv~GI{=7GKRcYZZU^ip+I*P0nyJ^~430V}= z)4I0=LG48$KjOSWdO@L{Fi16-Chak(q&PH%Dnq@$bQ{s3EBuRJOV|f0)c-}=#ZZX3 z#rNX53T=$IU~Kl5>;wcaS2mKF47dq`c|DIS>7EEjo@}iTnj)(*rlX^l)+a5~S~%X? zp{5-bFL#G3(JOiPSkKGIPTRZCks)3@sK^qesZa#W|#9x`;+&RUzQQTDx=+R+*oM03+~h@ts&vYhp3ZakUS z7NZtAXOxoKwGEJN*c=C?q8uDdYCQbz-$=Y^s}}w2zf25|RzLD!_`B~;Ms4I#Ub@yw z)urKB%ut(-$s$=ZXS3WaPcHIS#_b^75U_oe-E-5OdEJldn>K7=y++Y?*hNpATTZ$tnrvoGS-ydc=RpdqPpJ&j%|d~0vEClo<2uNY zP<}SMnWQXCHo~`mCgI(2wzx8U{9o+f9e&H3_AfhJFeuRN;X+?z^U}C3gIqNTB=B54 zQ=wZ>dq8hoOXbA;CWTa6?x&Ut?^ z|0lR!U`}UH#bQ0YkEg>2KqKwxb1f05<@_5U;s961<&SzraW-s;4Iqw#vFt$Rj4p&e z4VhI*UZ+eK)jiks$99?RcFI(CjjP}+4XwhYT=%mJzE-K`10xqK3v8!fao6>>&9N~C zI{frU4lX}(#?N=PDbx}~`}1ylMjl9B1%Kg1CYgC~+YEi(zBr67+Ivg#sdlPNXE&WZ zRqKwjutzFVEnlnnD`GLg#Y)+NqAg2@>aI%AKt0bd7@DruIhCMRl)l1zvOH)m{lN3) z^E{}>2z5&BV|BK4fXX^4`5Ktkq46D=UXu>GeFVWFc_b_d%3> z?v`n#JDJS+r9F_11z$|9$GOF*i%vYI7;Lz{B9}pwj&O|rtSayf{5v*5fbM4w@bJ%m z2{!JZ`gHQH@LfL|J+qTD_13HU7^uw|EuerDhLkYQP>cLvx-3;dX9Vi|^7We1lrg(U z7U*0HVmz#%fWnk9CFooY_=XU7qacVf9h%MBfLj%7^?>Twd}qef!M3F5=Ia2tT>I6; zo${^6^_>&?4?d1Z$=uziKovXEgjFZu7o5bScN|9pLQH~_N(5sVm6T$uSs5U?s_b^z zLdOk;Q9(MdyE+0@M-d^!jW-L+-J!moD*NHtyY7~n$zRFjdU`JE| z8&^AutDcJp#~Mz0`0|athZ5i@kg<#W$oAcsCF0~Iq*|c$-Cx^#QXz+FV$?CqN`Oce z)Kn`4%Eim!|M<^)Z;PXAulT=}c>OWNKOzYT|E9lx>B^MEnwhrG z4RO(K4me2bH9XYofF8vpRDK^yz25b4Fvh>~cZmmZ?9j@LSPCQ0H8et@mO{%ZtK$R9#(ZZtC)hGQHxaYlAW7`;r%w{TlmwRvxzirs+OrYh}>m+=+3FbHw{l53y zha)2J7-ymtmo)E?_-us@OUw4OvR-7!fo6L19ECRnXS7I>l_|Axf(cNv>;0^a_R{nk zco^7DZZKWo?0R0X>^UQibfdy?gj7Ns#5wp9{P58yYF9$wgGd|=uUu`58;0uBygLL& zu2wZe+aBjvAS08(e1jh}HePR0X{$5ER+;fs>Tl+x#PsQ|Q7h+q>jF~D_o`6HX3f}q zcASxH1QJ2bbnK+R;oME04eXtdRKjK92i0qYG6&e^M-JW){@8`&^#?R{==KkxWMNxExMft?)^hy8hoZ8dzG0;s z%3>fuwoU@Rb9T1O3S4hZ0@RE~@YQky<*ZaMvuac;LI#m~9Edy5ol(BlG=MrD_@O){ zJt6YL;f$~h((O1MbsKPqWW4W+Mq_(N|KSfnWy<-b#3i7t3r3}`Tg|LmKG#v#PRCsL z7D3k?p=T^Z9QQq+G!L=QCLT^e7?_H31t@l#v^toI+k9{e>4WHFN79c!(IV}Fyk;eZ z$^$Gxkn>QY>WOP<z4_r{q`fKY=iQ_ zOew8=BfB22F`=9Wu$nX9WHXsg!9g0LVJ|SGTwX$fc-rJz8;NARbZf|CnI^bho%XcM zWb@&#|6ziF7-90#8y77EU6*qOv@luMFsI;Wr&HRs1`y{z`*@*}&e7uo{5T zNO?YH+H9pGN>0DyRW^;aJj5|mD%_7FlQ8Q>V&Y# zVib$|ss4mp)Or<^mr-#*6y-D}*8z;Tl$%3Is`r%&nr>nqE6p;~Q5`hK;IuN&bj&&= z7h7hHcJOSPbf|OYG8Pv*)V8Q&*ig3d-q#+#9ifX)ULIm`6goF7RfOqWD>a!V-lN^Z z0t9`kww>G>~Eq9uY(9Dhl{vu3)NAQ#+MqqEWJRZCb~ zc=+NUK@o75nc@yT(j69e*{Q~7>Lq-`;GHzBKrLUY3h^MSX%2xgNtY_XG{AW!Qa02v zg}}kO-ql!*Z6dts3AVNHqy?vAz&W*bBqLGar+2{^_;rBN?8JWK@Fnyj3Jb$oZvUAl zL3dJJ0vhWkRNyV0D0XubOz8Eh3>K*E(kBj}xdTUj{=PC8Hxvv0dMGByZ3Nh3)-F zrT7rYrM8L+(J5kgdvHa}`FQ-s8x@$Tsl;~^y z$wJe^_x$qyv-==Q^O?Wcd*bBQZc}1&Ht`g9Y<6Z`b+DGlk$JGOyZqet*UwxBy@8zE zaMvGzK1LhEUB|@1H|5hu6R6-y%o7`?gyF&1YsvB-0mjhylvy&hR5| zPd@wPnbu>O>s#IlzxsAS5J-i(Wf?tg*>6Mm&{Sx(Rv5L~{faQ=N@-DXv5q+`=JLMD zjIoIlR5d6hUe-XNIbW|3y=tR^8aQi+cDCx%8MZ~5jTy+8-AG;o?zmef$eD)>&p19h zoYUt!<5om-AfBn;;O@`YE5>XcCo!-)!{2#f@7Zs9RZU~Os?UGUhPAyF`Wb;-59OI4 zR@?FCQahcc%!<(M0WywU_j^j&K#EzSUpGK9WnBV~PiY3GrRNsXMy`T>&9Lav;)0e3 z`XudI)QB5RheW=84(Ad{kXZer2j2Wh__dn{*V_|RTi`}}Qq##gx~Xzzel(r5Y|d(} zSfRYifs~ve4m8%4krp>DbG?c;qG-Gw4BS35nOclP@%m`d+)PKTHELKaUY70fr9TEN z$*=uU;_2{LzbAR=sk}9w6M`tgfk?=xrCFKH`E&yvmKEbt_@1PDI=1ctE}uU+E}+_q}kCp zy2v9&VaewkbyTf+Exe*KRl6mwM&nMlU)JV}0*$x>!I_~|cQZxDZok{koZmm($hEx| z{=)BX)&9DZj;qe)Nv2+yWyxj_9Zn3U+A*^TX^sK>0S-fpo2PLR87jb^+61r_)?K%P zz9nE?XJYGy*HW`WF& zY(QzvDRAwbO}1!(ruM^^zZC)>5$);4`0r>&MehR!=D4hm^qR9?&r$Qe2AvmKh84JR zy5>-ob=h26mby{#95W&m5OyB(CEh026}|}Aw+e%EbA65yMa1`1pUrUPHn;{$Y^9FY z@pkt7ncz>nE+9s9YK>y+9^;tewg~933nh%aDTrZih3mG43^tO}=4iE@e)3$jXQ~00 z;l47iCh6K6`iV7qTC}@hJD_Kp7AtC8svVD%vedlIiRj+l|y2p}iZEfx0AHM(l z&Q||zOD;<2oh_@;(f2|`C60OA2D&?wt0SnQ0Ft~He+4+|-gwUwyxSZq9>5XXppa4M z2@45Xj>|N@Og8`tMfRw&Gx7WtYY3VIB6p@TU}xM|=NV-^92TdJ#q_h<1fgF(tTPmQ4{OHj=4=2hl(76}=E@;oTZ1{uso?v&xszAy6*Oynp29BA`hciTN zHw8Q#89;ut@YuA4)kwz{MwJD-ZlFxD(-7t65UU6}6VmDFg7GN@(%M8AP~##CShb*7 zaYiiO#cVETmDe5_75??n6E6cP5dgwmjXwD8M~}tOyi_tlUijA3DKAa@W@}{-kd2!l zPDf-qK%iaktu|~LNt1BG!FCvS)srY z>?YIUX21)yFpC4zSQZF-KxcBADbzNdAvauA7Ue#&DQ-YAwp$B85u?B2YWZwD^mj^A zhjJ?0v3P;vJgJeoO#5WF3n%9<7YnYEi{hy8VJo&i;9vf3>e-_l z2y;IU!H5Rc$x%Jm^qpyMp#->y)cVuRj9Ln-yrkG0iD=HI#Gu^brDku)yHLt*qXE8H zEY?LA2*7QX7hG+G=hkMWCH5_8xvQ@D%il}g4Quole=n6g23PT;e|Pjs;P3@dJq~4W zZ~ynH`b{yc9*oux{fpy4^b4Oqx@&*nOaB63Xy5+(sm4tSb_R{U@e4=&`_GJz1Au+> zR{QkX=r6u-ba#@;xn}_s6aY(z{-^%{vNzyrMsL0gG{8aP`=^f|jDJ05$OY*AH^Rag zmtTV|y{-0NETZ?`3@FyOtWR%$;a34hIVI&LHkOH{;|{pd24Y9mbrA$VD$_AhsT8qn zxPgKbSIuQR!=i)Ez{YDgeVSMlq%?={2wu;St1(mHtDM1tu4i@LDO+(q_rd6m|LXMC zyRKt0x(0&P5&rt)C!U{VT$Zxg4Q1ekX;DRJNOVzHz|5P)Qi(^ja>s(~w^Ykcy`YmT zGED=eXeCQa?T}Jx^>lh|I^|MbE6e&4ROB*+elJg4NWFYnmh|YS?*$#nUwZoy^7g*cAg0lk z9A#*0WYul8+!~vn_VPpD9cR_v;VzjpKFPgp&0~GCi9U2MY~}ykQ;)rQkZv{3rh)Q^f)rFDSC)Z;sOLRp^pew61 zI&j>4-G-Fgx%Cizf;)NO+7EooeK0CNR6TyeBpflA7ah|pbyxXnN5Td@V34D7Xy0hp zteQ1}JP8A6U}@FTs~FeIY&tXu?eq|-BsyL2y`6S7s|Ehpoh|EKP!1f-R>cbu^2z9G zA~H7L(#7q`ERcuKPsC}PgHO??-wSqkc?LNfR+Y$EGno4=(DErx7m#-m?C~Nuss?4L zFV<(18m1Ymwj-~LeOAbHAu~dbdYFO%N0HI(h^RsHBOrlkGt{bQ2#J+&OI-R8uS#g7{{H@{=SLujsbvxLUEpk>w+e&2_w5;rMIjaFPR4tez?Ip6z^VrBKw%tv!JuHPpl}IAM zaa9iDNf+Yrw#2b9T`M&nRja zp@8TI-vCrDzwsp0JjdX90Ua*W9uQOu6KtdhgCS1Ig`O@*%sQt7pK66SsdXkZ85I#D zWAyTvk92Tmh8udOzwY)md0+Ozlak&vS=jAEY(pn{=tq!JbsE#zm zisWWu&ZQMY$_sv_4{NoCSJcQ54ZXoOQt;8+PH%bFQ^);-CH$Fpy&Fg_wyW^FejJwg zPyR{jmYcRBqS4bYf)*;O9%mldsfs3V9jpo8NeFL~6{YKRg2I?ZBvWMZm64Y-(|lcb z%D&XoGl8NCEL)QX>vp}ZC@z5(tRPo3y^2_Bjg}a6Z-*(s(m;8B-Kh`CXa`V>oSD$i zzS;!*ET|gpahGpO-re3ej*rHcpttm*_uK@GIKTaesXsmedGQzC1D5u?KcC9PD!+-` zc--vWpV6m2pL%*r#okL*b@Tbfoe>K>}FL7b7Hwk0fy6EliJ$d+r zzfIl#!YfXIEgBU2Os=M9mnhpB`nqTr5SCmi)>>iMZgw^HHO>L8E1-fCYC5i%-L8{f zYn7?rlIc=9tZ7yTYmNc2KLCR+M{i~`IoM)&-tgkFa4*;yTYNk?~8q$?EOPs~U;lLt6m~Wl#a2vqE4~p`IeIUjk z#KptsB`m^*>=XiKU4gB~mt%axQm zl+ad(GbY>R^mS)R4%^LnI!MzK2PrCgU?)}0c=Xi+5sZ!=ywYoGpnugVFmUl)X1z9`z=>-F@Gkmb555l~X#dep-G3{nD9?3EcVsVm$0v>+ zj(+6rz~u=@7OlfnOI*4~3W|%u4SZQ0RK`$01Bo)T(Q1R-n?mElvcTv*z_DQXur;g4cSN82EI9nwi>dJmK%=9Ne=k6S+#gCk z!LN0<#rBAGL8beCk@5%g^rYHT>K(0FZ0Q{UPO755>E{ej6G|>Nnh6_l2~fMh*+DT^ z884j6av5r{A3k~{%Ke+vUC}Rm8?5HT-_FgEVkk6OtHf6keULXKRVH(*bQ! z%nyZl**+SaY)fzw=*suY*1qN5)hSS60x=c{v+gc~T=;c<<4Z4&-tn6dl79+RjL-Vu z@Rts{=J0S5hmJ*kCu?O^nxSjLUAL>jXu{4w z{xGXAwJ`)}N^67)O#_whuAB^7ovC}J$o&~i7eXN45a6nkLMfkq? zcVS}O{o&MU^y3oL5`P9*)}v2;}Ns{VTZKQ8XA*r%@ zRdFy{@k+x^+Nx<>K0H9f{^AEu?~VTK*MP_*u@}wX1{3@BZ$G|Y0L`^-rr1I<65VGz zC7wZmIbcZlP}6CuH9(3j6?&k!ZQ#u?mu@u>g~_y1WGO`;%ZG+tZ*?>vERaeSwLK0bvcE!< z4yV=}#TLPcrYB8)4RH;-u&@@D1+G#aaNe!gwfaKlsO`e|KmQpF=-1wKj7GP-{Pga- zVn6&qrhJ>){nu|l!k)eEOl*Q)e<&ecO{@~f2>s>~a6&a{GSI_zp@B{ol;AFx!&zHz z;yOoUP-a=DL!($(kRvf)nB(D`@CHQB&IZO{kX3+jnZevbtFMS7qh06#OE%!IPvEB8 z+}vjxJ8GOOaXYq=uwA3JAFf7k`JL1&`b&=-z_tVyB5SyM4h^yevz;$jtr<{Tr(5oP zT>*jC0#n3YaVQBH5gB2n{zU6CwMM(876$7W&j@}9Huo}ZegeCFH)6jtw#^``dT(;` zi|Luqe)q{0h{)a^z4b$<&tfmVAkP2nTYBM}@d?0ozxPhShvAj^mYo!x*`_>E9`?% zO3B#TBXPIQpmG1>pfuHGDDk_@gGo=*$J8>SAl% z-IQ$zm}l+5gdDbr=pG2Be)xqyPH{&!!H9w4ofzV@m7^$h>KezER0zyUK{r$AS+#XK zD_DIWry=1Mj%r;Zt15;e6(N=Km(ZqeGbvb`?5nAJi82J6sH zY|=P2xUcqkQxdfN@W1<$)DuT1PyrMrLardD1}sN^d;A1H=oB5KQmOHJ-D_}8E>Kp; zhHQ1xratHmH3w6)Cy__1qYx~?`^$|%h@kXNTD4Y-FheF!xRbk)#9 zVT;1~fB$3ZSB`+tMANrs(sLh4Wgd@L%J>k}IKj(3_yo&;l1-PE+^W=E78jH`tD==P zDzkc*YNtDnK!iHJK-#LB6=uEiNOo75n6I)GjskX4<%W>!o%PbaF_}Sez5y9lWYj2C z>|RE&6Ep9}|19;M2hJ?a_};LfJL+P&iGJ(vA)^5NrAYSh@II9Y4A%SB?!R$(YCjlB zyeu%onymveiDox$jR>f9$&Up~fI}GQ5C#D*Kop>(jz_scRVm=WBVG~Iyv?(KV=M3t zLY?^w*Y}lvEdX38Cf3H=1?c@gpa5YMJ{W2Lcj~{~0Zm`p+ZY5Gp>O-sqX*7r(#zuq zI6tZFdimhUzPYoip>XY~W!402wy|roTt@_vfPl_6IwOP$c_kZAMHHWQ`WmGrG$hf)1vtIgdW^`qYER#A~l%&pk1t z1-HO7hh~q;_BykLrF!G(Xf$k8b!1T&IJ@nVlZ;V7D4%TAM}4n5&8&w35b-3QQwPDl zjzH2a+O|cd((watMmzlrF_5$RrRc@arLKSs0RU5h^uSz(3SX6d-5WI9wA`DuiGg7v z!vdNEqpe_6%}fJPh&(!WU~=}gY=!lfn%u6s#R>10+$=F0_UaX7q4vE3P}|ON*N05x zVXb^z0(v!0sySO42mqjBkDeb)s>%*OM%`~cekD)iIw)T6g?$TnY zg71qis}-Wb<)ms*RY91tHSajoeA5PByriLJ5?Fn7ch>6`Crw%#1-gcDbCWqJcDXIS zV^W~Cz@tyR5}er7AHXW2Z8qH*xqws#Q>~P1Hq`a9ZMnj)#tmY&?9b=?6q(}7oR@Cp z?XFYruC;cdG?3F|h3jQ=GtpZHZdZp2a}@X@dX5qRhgxFEwl77E9b{AC{KYETgVYe5 ziv!vFtWfr~_zU#O{R!kQ`t*N-G=uc#5bgzPmc%mhdA7LB(1^m-g^4mHb*$od+ZzM~ zW4R7r6rtL4nBMeqLqiQSu2Bq0ol5IOXtZV9RqU!zCrq}Hbxe)S^jEb>k1LmYi6`^y zSap)jIm9pyGDSL2K`nqCJvJHR%v0tt>imi~zTv4P?)=o(KXn#KTH0U{0_X)etdlU< zwzemElwUKB?~3la8|a3+&zz*9H@y7x<|L~LdDw8=*4#nARv=}y-V>bF1jzJ>36sUg z{fVqjH>QS41W=f6xK+nRq;#>f=`J*fUlhPYH{BJVU)6^-ujh+%&+%pgn(+NT9^I8a z{e}q9KYsPAFutalQ4&aPpe?}H(Z6S?r3hHpt%Cb(YFqR-BQ?pIOLcIn8 z39{<8JbbGYw9WU#+Hi0EmK65jPCN(}$=zR9fuubjef-MFGdv;b>GD!t1G*TIf(%Pd zOf!@)oYR3Wy3JotmZq@Qg(YNLDTF1-`;2}+ZG6%hrG^`ry zphpWC(?JhhqHFF=k8c&5(AR?|NNJ(As=8oiN>j6?WH%n7qU^+Hs-5AcsxSoFFi1mg zmdWyZh}23v*gbWs=lv|{`CDU1JxKa}fCR#FT=q|bQ=eM2Qb{~{N!@s?^ znTWVV&u<`q@DU8cn{WSLPals-H8XMj=2QFxjGdezmd6`lPphpZfipRkZPTN2PV5d= z3t^xNyl*VniaiVmje4xQV{c~Uj3Mg<;PXz_ zvYl@Wi#q_2KJ$7&`{Uiy2Y2!_3HrY)#DUhzm|f96GtX@rIdfCXj-4Ev5%HOyP8Vz0 zAuTtu)xHIkD^0h&2neUOR?RG|DRx0>ErG>u2~0C%Ylu}9PwaO$3)U3SZBwG3Q6Mku zeLpBV_x>`Kj-=ZGkN79|9lz>$5p^rQYjFO&~?#isomncvj0p_>@RVtOF zF%f;&U!{KRrY)i=div;i%i9bBK{rSL<@V!eAHM*2ibwk)04hT6fSsd*mWv=e4Ft#= zD9={vb}nya$Gx1&b3x!pU0v)=`(b-M6bdcgFXmUK)vIop^>`ul?U_f4T}A+wp1ZQkC)Ibt53C!aii;qEg-4y;{xk$&`B-wOfO44(^(?jQaPt$ipF!OOp19wyBu?R%N3`# z(HYwU)%RMS-bqseQv!L^c_-h_A+@<^BSbqp_nph|a6mqsne zkfj4x9{B7MQ~jD_Zimx<{v34cM}H~x>;t!ut=2_5bd2C8>m&# z@y0O2LkflHHftUmdJWYk*Q<60;OIoD;IZu@srUS)gZJ%Rt^-B7zP*M$ralejuHC_) z%)BzKc9LE6wz&ItzQYSIKYjR?S3t4Fr|1*rC=#wA^Bhu6e+cx6ReCS3#P1OB?o$!6t`i>l4*vR6(h3z2yeg$xtTOCiW z46=Z9V{RFQJXmiGQldAa;EY+=_XLLKvkENZ;j&v(fQeNx{Qfvtso7z@GSNhrCe&=M zU}0sf(46E;!^})tusv7$T1Mk8EszA>!2$lnBgZj#be}BPzVZF1BxvXU@zK+Q<@v#K zJ)E>eGS^vbAoE#b)4pSs&>>pXoWNQ-P&qcoXr#|n(Xb6PIZR7HsDX@-t)XY2vf@;X zLI-VDv2~vujv15629fn&Q$Gv>boH-OPu&uyTF!cSkLTKQ)5mlD0C%@-=fQ!5 zi=L+>R_4|oES=!#a+wU2ab$viNw5aZG(D~6g<%gjdTVvs!bnyTI%C@HT7=N0=e;Ij za*Isfq8ba`U(_u|=~C$0liHKS>AC&T>)Nu?*8e*7!zVCQqL1AK!VpQAZuI-Gkh}Gu z!~=jUU&{3-v^@1yS5)#^m~Pd#8fDxsojw`;!fQ@$k77E%M{`+X-Kphc28Q;qydW4V z%dV>vsH}uF?^j&Bm~l_Qz(gFt3eT zsK}_6UTJV%-mhqMx8~EFiiuu_;gT5DvF=@a@zeK3zxUfHpS;} ziUR`>tw;of4X!Of8`d zM&?}A&yz~X%4>C;aSZbj$YLB{ucPubjRt`nivTiT#;0 z~XLk_h{Za4s%iyY)YiD`S(HuD{0m2C?1S))u$i{mn6o%8+4j9N*u$F$OO zanKn~t21o~3aAWcErQ;HfZyYiEO)#mz^I8sIMJtHcl_`ve73eZ_%qCT9OHqPy?u4? z#}02^Nr#|H%Hm71Rk1NpRIsGE>CdS4y0#dFj;b;xd|elSC=9O{Jihisuhtt#ucG59;m%x+xBJ1?2^4UdKM3RH2TF~Pu>5jeJ&vZ1s!g~7jV(h(Zn~-8-rX}2=n!218`(`Uh*ftUk#^dE$_5x zqtUV?G+$ojJW0g;YL<6^jZRk!YNxWUNQJ>*;^&4#z7T!#uTwv9$5m@PNiMD)UwSvF z?_Rm~Y&<0nFW9Zn7Y@M!jr=@pyEBYO>%EX^*}0)9)hA)k$1|NN+0yG(+0&d6CFV%g zom7VfH=qdu^j@3&;;JashuD~7s9^{wWXL%{DI9lM7K|$B&juTuQktNxuKVd(eU-!WM!zp?GjU(pjJXS%b%<<_ z&^eS7$05JWb!T>%_ighJzp^{A4+Qd_+s65_k3l&K>952Mw=8wS&9q>YIFnY?s@-Zf z2KfP1;VEUMD+oLGhUg4FW$4N#Q|CcvyspzoCP)`(gl9)xx;+LR_ShhepXc5S{uY>( z(A66y2rYsIAs#BfcEWt`0j%VwMO zR4st_Mfs~`hq4BB+rgX+z-_t;KStK0DkdFNXTcP)U2z9pp?rqZs8*OGYVe1US2bTO*BHRyBY| zRmk9dbI{GSn_V5MM{6qG_Nj?IRg@lt)AeC%(&<)#$gF5b&GCuV6Dc=+69E`8nWxe3gh`or$jpdK0^nR<}}Myz;G&yE=XEx zS$`UETDQcM@xfp{cS+sTy)X|7Xnhm|*2w90h(dYC{SUwNm0nGVKdweE{yk)|6X&4# zQzyxav^|lO&}jOM;C7rcy{ovex|-{@H6hAuSaTEE-MjY$QjNnTQln}sYn_qi0IUiT+F^RqTIbM!ZZFbv zq*W~CizJZ~mn52BmCBXX)T9)$l?0+5yl~$$t(PP*6y5v&V+YDCXvv1W@(o7psg1f5D_Qm-&;tj%S( z3O#SIg}mh;pyNway1iyk_sKZ`aNqlDCz0+l}a>3#y{j$}3-b-T#%2-ePg=RR>YkgcE zb)6=tYH>WasIdmmLWp50Wm^uLV@rK`TFwZ7C|7(UP$m*40q##Om$MsxGwv|;w&+cO zw3X_CKMKm@mk*%bQyomrxja*^0*7Aom(QNOGHQWB1gzo*kLlU|LQz2!+JT=1rMB0< z{1nUH;EHV!L@+th;cwNHE@QSG|-*7LMV^wDoRe(;`yN8Pq0`pjoj z4_^=zPxwq;A|@W|s65jrYW=Kj<@woAqtQ;5;Q_SM6R=9TGHv%6pd$las&ZW&(wvZU za8YAyiCR)Znb#N+IL9VqO`?UhALg-I9;mj2TGrphvvOBC5YxCMqwXS(|G5~*kDP-_ zFP_!saVKAm(TiK4{{q$==T106~v}yuhP3KnRxagtdEYO%Y<(yvE6Pou|BxOv=!(4=C!d?N@+}kOeup-~O zZK1wU{OIVn0qy#XlR}<2KY0ES@g?3t>y=?z<+7myJm|$>nXXUSsa|o=j#`A$dIe-x zKn4@DTE%=JXLno8N+-=N)O0}0Oha9>yg^Aal5cm4AhlfKz|Js=Xzph31!hP zr}xqt8Ne}lu)il4UD6ZDFCC^{F1e9s$&NSO6$W2_{(0!b>#JjSz3dzgCrI?2JsOmZ z0GaKM!r_ueB|?4MQFz!Ru*52}!>5gNgbyBOiNI^wj!iS6p*){{S9XW>vq=YJpz)(@ zm7NwgkUp#yD~J__7PjeXwU%*iDW8kJZ$ z8xMdQQktzRb;=(O6m~3E89P63#GJQR`|*tv>a9zj^B+14qxP4MAAIa!ti;u6$?rpC zD5<tFJX-*M8fE5PK%k;UsC@qxG;8UP}5XPeVa$_cUP z?hgP#XeMIulUF3%oDpzyJ{`TM0tHB){^iq$5~a2Hj|lyPlV_v<^qP}5MbrmQ?u*`Z zdh)X9=3hQVqcC^+?2}u#$5p@tF5`T_;m24iBf^~1mq*MmpUTnKf8gZSYsep*MsNKO zAVW9(iPLug)$zxF_XNK;AxwoYC;vl91QgQ0NCDm0l9UP!WnG@N#az28>B6$P8t`G> zglto@&*%)9nKz_C53gCYi)+ADRp&yFai~Dc$Wn$JOPGyA|Jp07(4SID9~>=t=&SOjEl30lYBauJFOb1f#`#3DcijNrK|rXOLtPBztvhhmkWK}!9?0| zChyiBSdaIqsMw5g{`>(0LUKNdZe3VzUwVaSo2#=Q*g>41Kf41g^$-Q$|Na32I{Ez@ zEab_#8%*-}mx0s=X1ToF?Nu?v?u;HHNhp6kNFdwWJq|!8=e_z>Z3NM`ycQHH-u=Gg zdyd`|z4(K$OuXxT0JM1}2^nIjGrTSOz260Tp!fW{@ zfJ5dL8Y)i&b!sj%u1T5|eLHz>Njhh&Pavsq*8^u$=aI9+`-u}@axiW3J-3S$k&YM| zMt=ZYc#tR3T`eer)SOn@G|L$VMBvlp&~3EFE2EO{Y4mLA4oRcEn2lTg^tjyI#K7Q@wHFsXe zt`<8dFH7D>QfTzhbuTHlvG(nZ|2}w0@}iH0gs0(~LXpqR5U63~BTC7a&@>ZLE?N}AvcMD5I#V^mMt}nMo?K#(q{#WcxINc-BgwXY zXip|>{xa_#pmLA9S6sbxE-^tvE)Z zGObA~Co39Mp0Yg96T_O2&oqjX&t*^_>XJalq|%qyoZeN2NClf!XG@W&%|LgZaD6ma zubX8_#55Jh*w>%u3e$(j#F|*grQLOmVA5;Mmtpyxzc3gJ2#Pmk1j!ZkE!_PCg zm@YV;4;<&LGsw;{vb!RY8qgtWr8JvnF-d6iC@}*)-p-0@i!IC0pqiB5#FD{VNcrta zlXin8uH`relE%VEQuxK4W&h^(qbh!5Th=b!Ht>K#%4<%dC!KlLY&1(_r7-U{LROrQ zS_r=|VYM-}>7u)Wve9KaCnIS9ic)eo1De2B0o42ZH(LgIA)KaYqb-Yqvm9n|c++I$`%Vsj5l15xN7tiCx z&n0#Q68+RGj_*IpoDC0PH#--zcvBoLI4dSPC;;9LowKDF_R2#=3owYc`X?_j*OPAf z%Depy=6>?+z+TKQ-RW<%TjTLo9?0hYTXCK_f0=g$xQ-d%y_Z04|FKsb9VlvVgB<6l zA=kctqZbYyywyQfXiP2E)0@k3#m<^FeBMG=1PZ!V#a23OjcIz*@bZPhFxNnVt&hu6 zEpO9Q8}wl66o*ARgL4FwSqLj&mZ)qddK?# zAiFn@w~u>)WMcog7Y-gg?u=C%IhR)FO#p^9?V3T;3t%E7<)yZ6&GHp%HpBHUfarn_ zX#)aBD(B6X)Cu*{Oy!DHjgZIP7Gd?Uas~3|*@ilx$>RC0|NQx`zc(pkvt$48*PDC) ztvcr{#1Q??>rQ|@cHco?m%M_*2*g?coP9+%54xvY9a~gg4MxjsE*mzx6AaIj^pdJ{ z?Z#Z{=ep=jO84}UDh+XQ*#SKwr_5BUc7Gs_#@Li-=rw)d^da3qOqBe(C9tz}v}0@BIAnGY{=X)oURh9A{E? zzl{O53}l|;g6caC`|s+t7azYr`sA;tZa?qf*Il>($`^q8526qHc@%$l57-ya&mDBV zE2C@&2NKqhwcB0WZ;eVyuDDtP(S2TJHKE&{1s26vVC3LdzAOvnE`#uxW@!M}0xES7 z`EKy2-;nWQ3sk^I{YiB}C;MD)*ECICf7!^uWl`J%i*?__aeyE$usQdVwo#yM;NWa* zC1Hev=c~RN9dq-MKdfs({H6EXf%%x{A?IfYmY5rt@WT;?wAW}GwZIc zme)p?K!ayan67To{h3T+KFWehd@)&3o{ygoBB&OO=Ii4c@wnKU@n4NQu#8>auN3cJ z$d(tAEu0O~r_K$#ui!Bx`GBYQZZ|Y-PmP=W7KCQE#>eHeWA8Da-S;|I{onz=YzXNq z&a$l~_IzxJnhZr0ChclVT z%|W>Nt^ddItuNnxEy=E5|67nZ-2RaK`qO84j^>(GS{@rhA#3-DZr7bI3&L0_4uYN} zj7g1D3ZhjX_4In6;FW22(f6Bt5s+{zv(f|=-At`C$wP6?a-|HR)U(y979dUWFHask zk70wp&tsAH^{4klKlkkr01LkV^r6$FW1?^PwxgHs3)>fQFn430_-yh%)92H9pwU-~ zEXycZg9bzt@Db*CJu_pPi+ND$c9#-J))zN3eZ6SmovFZ@PHSErG>q1!JQ>ewTCoLm zHloe|S(N!gUN(B}{ihG5;%RyLit!a^`d2fDzg&Fd+^~sT z`g|NfJaC_q@%9y#fXnuroza_o{RZ3lr3P{Ik6(Lo^T`N`&12@Et(CU@{kXvAe7oAl zJN9?p5BmM*vr+#vPncm#Tk367$&`5{Zw@DOAkoMaq%v8nF(Wgb!x!VCBd!!79ZbdC zyu9dD!dZ9h;J}zZsq2HHhDjs8%7G}JU&TQ?b^_vb;B35b`_V1O7*@veG@U-1_wod34-MTI zKTg3M!rqm7=J-vyYoCRD+M_>`x($grKB25~zcO!gBjB)jkcm+IMJ%tGY&SsBYc1t< zRQP$&Rg%7ReA|;3hHc#1{iNG^nU{~*f1o#-43@7v-s21e;Qr5h?fIANJIkwI&8)b= zxU}S@zW|o(L~LmXGKrb^&*ty-p5D#7sCxzwUH3)Z?>kLF=JDx&lzJwLRga<{`qSeS zu(ZXS%mXi#KFUCC_0zw1@-!^AQr}m2siOv7dZ1Q(qik1dp&k-VQXz5z0uVsP;5dj5 zQb5yNp4Z#sNzMW(W8LacC#&Jc$1-M{0!}=!yk6!@Xg@%c?8O7;Tgsci{}kEnA+ghQ zZu)MW$+$=Mb1DA&U>=EMcjC~2qi{V)JeD$9pOLC9T%Gp{=CWRI0*f4_7Uoj}idsr8 zC`+OarjI~*V*+B;wW)>47@8@oqdxd$b-9bVC6-(!$@3dKljr!0!*O_7_AVKRCy<&0 zO@q|eZBw0zrx1PmCk}n)?Xt1=A@+~D|9tSc+;G&X6$ceh?yrlrQpfRn15-3t?b)h7 zlTdNpn@n?|G+&MLK9gm`jfR%!f~bqlUT0!X^C;%}1u~74y*|+?mzUE{3F#!3E*cN> z8-^y%T!^9@;@N@hvQ`JIY6#`#j2hLlNVMo}bGGA|rY zt1TA|rj=>rjN00y>Pn6c0)x<3ok|u$euG|1Rm$UPZtB*I>UDBm+gF(wiWmKrr;=XS zS&;h|x%+tj9{WqeRa}FbhHBba>D4aZ&Pau2p`uo;1tN#_zQ|U9+j^2!T0v97xmK}f zmDs+>=X)QFNp*8Bx?Du{4hy$xs&k~UFIEL!c;A7xrG?T-uq771pLA+?cBC2_ty6R5c`YIKzJrX zek66vSsZlhAa3K$XZ@Xg=e)c5lG`ibI4TJUX_V}|Fjy6qShKk%Rdt35b-LA6naapf zCLHAb)B$iwI?l#wAvWoz2lD_#Ij6RV&&>=G3`d-psbLvpn@WqiKbpEby85$6FT4Ga z!8-cHv#`m%{$r_op`kk|*suFEpx!?^JiRSxdkg`IUj2tBPbHs{L~+aED{Z`EkC%M7 zUNu=WhXb!guE%C8I_=d~oF~*!2#6@z-e^!`@KT*9%k%wW-7zgQ9O`Xf$dW<2 z>bKXM%yNUXG0Nh6sl5|6va7MoKr#`D=(G6gQ!fJvznJwhk>3J#!R&p>$3%B)cgpgj zyZ#GSk^uMPQbSRXn2k2TpI>5rD;XpwUmh4&X6AcGKydDZ^8} zn7`|R==hJICch*3Ik6HNvl5#rWxHO6tq(n5cywI5u^A2vpwT#{Nu8);PR30a$}xE|tdMTA5e=xDUP!2%JzO0V2RY`t5W$nB|_ z?X)LO8bslNF`i}7dSlQIX)3G_t2tAru-O#qOW%L|`0X)V;;IMM%v`=2J!gQ7WlU|V zwOe_lOIaDw5U2H_g_+EBR+S5-euwX|qA{2XM6rPMtj-EJel>ULIt7uccZhk9U2|)! zXWGOPYBk&u>OuU)mphvbFjOA0tR&l?TV{+JNZHC@$8D2&_LS-P~wIC z43Cps@jTqc+ZOYEncr|sS+@>UJL2CV_nyMpowggvuCehBvUBiu7XWA0Hfk4td;cUS z&&**ir(u2mp7)*H8r|Ii3C^F!00sE*j|1}U4{iAC(K}AP=zS4HX8wRVzAbXZ(^d59 z?@Zl!Vg&NF7w>-%xX+*d;?WbJOe7-fX{Aza@`VNoap~4b^)dlf=!c-EI>^zh(2)_2 zk;d!x($dlzcr~jkQsHg)98U9%gdevlv!f%$Lyxy z3hfz6Vz2$|Nv{_r11+7nJCbXn7r$_H<)MTH_a%F45WRRaENB1AcL1x0M4Q7>ku+O< z(;SqST$c`!q1gBIJcpvbR}sh+wlv)QvcnI~diaq`TQdVTHuc)kw?6UTo*Z#~I;6Te z5od^IVCC>hfmqZwE(lo77cFkQ25NDtE&?ZARWyB3SLJGfY&LMv52g$Bn(eYEqqdNa z0kXkWkanQepi^KjuueuVzT)_wC46|%PyAi#cTzJ`^`n9l7pDCNtUX`nq@KMiJ{D(# zlK)} zxrJ-kh4wHDRmYoP%88Wnb#-poes9FLX_=}IWPIqBarm|>f ziC$yeFKW~z-*6jUo7S>pq}pOED+t(Sp8(EW$7YQUQx1yEluL(>Xrpqm6j(rb*%xZ^ zwkG=iP3nm_3VtWtOWvfOAzva70L*c_73Tnp7W0^?+xP(i?lcy?YL&Wr|Ml}Fc3zUg zeW;Pi+>y94Fffw;BM{JhCGUD5R6|3VuFT7AWSw1w1AGxG>3lCB`UMstnnsZz>p?Rs z(CNA-1U8AZsf#ZKNal7HNR?i4UriLY3(h1xpx%C@feSG^?udox$ zx&AUeDV4#Y>1OzV0RXsKq=y|SJIbCs6212=$Jpc7y%i9=2XYo5{o9E0jZJc=16_}s?an5s8qk*(H-pnj$@tK1|6|73|3ouI;`G^vlY?7&@3`~N$-X1`XWgmDC584eem}NtOb~e+x8)~@Q zH)m#}GePIVy2g#vOx3{!T^%Z8zbzRuQ?@sxL-{p_t<(m!d~V>hnr7S0Czj!z5ZX`f zw%uux>XbWod(2oJ*+4EF$$xS55b(w1uibO)wXeK*E_PF|I|3+i^x9M3_cRZ%kxe-) zOBGuhOf9ZvIhA;YK7aNlI6` z>^EZTAbN2PX!xJ{V(Kwax0QxLGfx!|J?NKdOfO9f%Z%3x2O8SC?EA6l0L#ji=!3s; z{20{*9-vBV00JE?tRB?7CfyQY&M`C+T=wO2vm&8|NvI^=`75bM@JY4d@=JZxQ+mqU zDG}PBlP-d49^X2Y*gfkAFg)UV@B@CgZ+_M3y(q>_CQDxMH&)p2v!a0e3qmJ_rckZC zv^8LzMDIm`Ea%_9>hzJv%j1p+2^o3~v=v%oO!1XXJ&i&|7zqy&1)ooS=w`5*f%-+6 zCTz(-CYy?W^Y1`+v|*Fu21=CXoZ*L7(BQa?!>fb&7@^V01jfB6YQa!Xt1iZa4hI{Q zrfHS&q>fYyB#HuFpsGA2rdYAkDgl>se_9)PP^$&o_sce*ya&~Van$>fo3^Es*FIF; z3Jc%2ucd_1z5jE&7HXNQ+Qm_(9e}jy2q8-$SsoKr+|oi7HNxC-6fVkmP!Q5KRaM)x zN-UW42K=Kj+5nXZZi0C-Rwz$JSI?$xA?UOawYFX4|NgGi+m6U7dp|_nLKi!|Zr4>J&FNw@t9-B@ztPw>vtl`59 zl+~=*a=SS$nM13S5k_@?+>qvLua8#Sjh3nx@pPllnSHj;jrcqZcCs)J8p@nWR*CzT zb0?|ai*L5u6rPw91=1QOvE+2%2OX0SC5`2UA(V33uXiSp8wEw}o={rlAHc%el<^rJv;0bJ2Q z1pMbvgnk&(h`aMZqbqtF20Uf*Xoa{P#qWX^9pCFt%He#-V@z}I2l-h)je`8>s<~)t z)kUCBY!eyV17%zwhORdN>C^V2+MJEaTx;Uk2xG5Cb>15-focxC&<|(6m@<#9z5coT zqyPG))bn6*$3iOtD5d2MitjBuLc!sxB^D}NgyKxZdV%O5cB|D{xZ{n;6-77O8?-B4 zZ?XYBLA__O+Pp2!>2=qx*4Led-7I8)Hk9h7twJFpj!uCJAU05@jhZZQM2%3WKG%|_ zxJ7bop|&UyJ!`_J$8tAc%PCxGF1u|*@7TPA3UsN(5xBFq*tt-}YJ;FU9nk{|^bpo1 zw?7|3*>+5H@!aw09gh$(wfn`Lc@A}t%JsZJ5ABY|tTOvQ&zXQa?x-`%+7(tU4D$nV zuo;^^MK_F)8VF-RnacB4NfGD1%S%RoX3>ZTJ-(W7n>VVu!vB_p~)~KOL zVa=^62itFQ$LPI(2C1WjsVHXh5(3dRxPF>rmbo5^QX8(MnS){pc*}Uuu`dBDWR5}+ zFgf+woYy8&%`aj^SMQHO;#*jA0?}3^+6Y@S+sHBoI}G|PQz<0+Umt$U@##m8ZrTYN zB%Vo9j0{wCAY_|whwE}47XiJ}Y%fd5|b;mXizXTMF(TMsIr`RDCDU{KfwfhQp|^ z1_7g@FfmB9JP_$h#?PQO9ZpQ5mYYpyoZlU!-IX)W8Py&=&yAUN#{gEE3SB5Qkm;I{ z^3Jr@K&7b!@<};EH*@TGYkS9v3irp@-MwS_%;9PqAuEU!{QZ^GJ+b+GjDhd|baVw=4}j(s%nCOljaF?l$I|H@+LLp^ zY6@w|>VV8tWv)~020eMYQe{+Y@k))K3Ti<^&|(P<^cAH~vu&wc#0D0|SLztT0Fd4U z2|OTKyywyDU5EJ$YV)0|iYa?h;g2BXA2%fC_!YD!qx34R>Czwef?fg4$RNP{eT z!!0;MaoMR)mV##Zg`xvC(t6qjwg6?a8co})GFr^*WpJ_=$Z{=avTZ|=C9>@y+rjs; z#Nh#l3-r4{QH}ln$9aU+QD)vT!n!Sxq=YxvnLDr7C)Lg-H*9*M#kNge>{i9nv;(;B z(zxvk=@J1w_3p1yahM*9M#n3DD^ zS^^+1C^Or;&%3Lmccf1ryk*P!1a4XM#@g}AZ}w!*g!G>i6+UqKnpFI2(c6CisF?12+d8AkzlX((D)>gaqu%4D6Ynmw>FED5!*-i)T<`2XDP62n{kF#50iHm8v*Ao z^5oX7x}=&T){sVi#2ehgpOR>3~^(?>5m8!``W4chPEPM_dc z0u!`&cPceF78x{^3W=&!SK0UjPt8thbh_OFi4MQH;0s-_SzJ)5Tf?42j5Mje)Ih+t zMHIS%mZPmvroh2YR6`-w?>=<;RJ8gKggbuaq0_t1ZhSsgrT<^XYP`lp-*a;EWb{41 ze{$Pt@**RQIC(-KB*N@h=`uYWjx`WQ0+IJ+yI{Jr)p#u8EL*I!(I$e_!u7Nkm~{#Q zJw0>fH}8`4q@2#aS8|{=w6T2wnVa(OXfNZn@dL@9KUqF-*QXx`T@KV zzv4{v*~b#C?fn~tuk9y)GS1`I8dvpRxzX56GN~~a*lp3Tk|z%VG8oB$2r+?xyTJjG zPnAY008)2W>sCnP=jl!TiB-(@Kq*_S#+Qu{;tonndL=7{Q ztk@!lL!FJ-#~^j`j&D6BBJ^FSVf4;4(9gZ@yHa;1^i)8F`?BbDKYIF*)D!TbgSRAH zR;6aPmM$Wk0Wo|7eopIlPbI3^`*-B-I)M=x(5awIvaKp>LoMbT<%*6wnQHdA%-Mi6ZX@^#7XS z*h#9UY8prX`{4n2?|a|(JAy&ML#0l?5ZKDBW5{)Nfi4r}_E>o&^SLx+dX<3<EOo(PpnaT7o#p`a~ER7dz#i=?ZJ zG+r*ZWPmZ7)v{AIL43XIf-|+u1STZ|k`Ge*56F@Wv7F@Z%9`MOnWk$0{@oB(|I`=u zZ%K^Q;6;t!^}W3ZFT>|E`E{tdEEH*WL>B{bau_~RxW-{3SRS7!AIHD_ojoDG{9}jr z?OE|_k7XVL>x*w?_8wC!!wtCaSf%N3Y&xBBkFbmBTJs0QDnGO%6beg=;x(~BGG4_WzBBW{0gP8^e87)% zwpFjsd9n~{da=QS>~pQp18t7p%y47elqy!lZ+oV!*Y#+nwD2KVMyyEDtyR3CupG?o zF|kCJ;7e5xAhsggvZEH#aG8-!Uy(H@9j%f<>}0ltjEkSvFR#H7Tt6bF@5|AU_~1jw zV`=ifykQKy<@l$PSu?pfJW;!TOz5<N(Fq+0G!lOdW?SVm-p$!~7E4DOr+;Rkl zUlKE{w#hd1g4fWqR&Lzs4L}gq#dUGC0S6>%x~P&`Xb?4`5bEjE`MpnNo{S;Fy)FLz zw`CsW*$FvWb43J$;_lkm2w^UoxGsjPIilMdm+Z=g|xW!thd<6oJ3KD#d51p ztGUs-XIETP#qlCY%(Xb4Wd>G90Q_h&)IR@y(4POJX8^7F!bgGKk74_l;}1P`aL@VC z9E4NVkPfWSre~CDF|~rOR7NH_f92mFW`5_E_)EV8Zkk_vPlgvK(_$;9WVyN0z?2FY znqnyJ%)lT+Rvl-}kX1WNHZ8T#Y*cb`cV6rUWsZdb#87K^v0&GFjiTjSIUwU#wAre) zo(|dYmFMrwbPnU6r1wAY%0IX_q`9nDP;VfnH}ch$AtY`?oK3Lc155>P&Ijf zQ?su8G^)5!eePLW5ggIg!Jv_AS8QU?%9&x{$#WDG)iDL_2g7v@pDJMH(#p-$fo=hJ zqtY3b!5D$=1yOcIP6??v@l5P?cf%j$<|^tXgkvD}-!we%=$j{3g)5vwowOttms)?8=1}IqnzH zGRVg-{O;TzoR=8x<`eUMrvMe!0+B{iO3Ps;5Z*okVq!t^dL`()&%RdpA+o_jk($0;axoQ6* zq&oiU|AZR+15ZNz?e=FOA%|8vH?^%2RExA;QY-6vfRI6(T=zf#yS`la4JUndpMEOy(}#)Q_|;3l_W&U35}VU| zj||9@zT8=nCn|7BFB-Bf4F(MS{TVIbEpDWA*w$p=aGpb!L2@`;&6@Jmo#B`cxXwzJ z5q%Oe3M-zdSh!dS#tv|K5DaXI$NiRC)Nx4?cEYsr>VH4H=@#`!yeCabzw%F?%Di?t z{u%?!lJEcczVHg($^71%;?I>bZ;wCpo0)U*b3eTQ=J?&^4E@S&<4kxMzbJr+?$>Jo zGyg3j5&mT|&!ux_{NmrqWHM>_5vov+$NE?HpLlrZpP7^-;WAG*j+s&5m=nlTQ^CZ! zj1A|W>eU5fX*zRfAVdu;@*H74kXw9x5Xs@1uPo(CZW>ZtW2^;!Cvdx2W;n4Nq|)ye zMx}{eX9$ToO-a0I_lscPdG+O&9sra|{-{Bzq3219cJ`hrRz)(XUWE6Gx*+Gq;42#8 zH9MH+S}S^rhz(HsZL@=t)wiNK=Q5!&8i7fuj@-3TzJPx+?a_+R`e4q*b8} zTI5KYn@YOJI)IltSuw_c{WMgOfBQ@OPdu155q2N920o@T5XoCVTaBzV>7bml#%E!tYBbC;>k~a(Enuc)zEG)qsFvu=4omD zBxM5)1a{C85XgxU+8HJ8+f_`toUneoZKo902YeDE^wlQT%@G*HZp>dL&s7 zp7~iD2KQt?tbeadC%&OcNudG?>q#bAbMO^1LfHP0CWaPxvyH_*wJbx1)SQ%ANSd{} zeRJeDZBJB4yyq`!QdBOEm5w$oE@x6S#2fuaA042Z8qn}^E8mqI&%CCv4nGeS9x`74 z#y)!W)p2G~_9S^gc=;(gFziZ+H)YJwS+{5s#KvW2EpQ+b-FYGGXG{4k;K*o*6jrl= zTcf;XumNSjMM2!O$DOEP_u+fB2E;qzS=i7~@5V2`y!TN2fxp^A?mybIdw`Ojhu09W z&k1gd(8_%@968R4VA*=jjig|d)rgkRE|{ZkB+wvolgAh`JW~TpndW zPPLA+)DSQ|Q^VN0ecf~x6;xX#)7s7x9v<71I~xC4V!b*1nf*r<%kO(01ju!AxbAm- z5IS(^X0I`13-q+uwGY1(wEu1UI31*rA}f(k3aw9}aNxAR>`@4Jg&Hzzt@Iadb zb|3sdz!@Vsyj$y>yhq2!<;YV~P)NGQIeny$j~|P9rH4)Vy5!Qsz_Z z^H;wA?#xf`9cm!(zbmt*WySnYWRQF9WM@j$Jo*IT6}APHFLFd>>pc!k8Kg;vhQJ+P z1SUakC&4fT^bif&^h-lV!3(l53D`o})Yfdb!!84Jog*A$(Jtqg<4O%ml*N1-{0p#= z*p^ZxXt)7>AR`|(Wv?%j3*WI6g2Klgg#PS&q%WvQi?vos5Eo(;_dY@twQ z83hcJ!JddH8o&Gw?y=U)yecq~_%ERSm*_4+ho+7&bN-#6$o}&!mLh zn~&VTQ?ksPj_=%&?lV-E9))q?@cEG~I{cc)X@XLE(Kt87%QU8YZDm?^L2Mk6E5t}M zomyqQ#D3~vzQwl?95$rwkUvwgJ-LQiirhbz0e|#)*RNQ5d(@kQ zK~JZZ3dxCEhQ+Xa7E)5*L$J2XVqYj&`wC;E(Gv zvsp3=WYBFEz!zhEsVMa4E&2oj@*uy)FMD+zlEZGt}qTv7Dl3esiN6lv>C~U zxQp5U=bJJY&q0n^_BC?`?;t?ZOmpWtmzZL~g$FiVTMIKw^XzuUl}BZ_wMI8AK`7M` z<&0OktP0v?K?941-wWUCs)2P^Vd4GoV@|q6F)^RsSGz4&SnOV+ia<<8zh$Mja=qKmV(l3z*nhkANG)2Z*>XtJst+wQ+4d$-!)%e0c}Khwq(; zW$xVCj^#D36_!ZGmNTb%XR!C=ye1>V70OzhdY{UQL-0$lsJWoKnK9)FImb3*h99o^ z5Fct{Fzuz5O@E=&PXY#x)XU zw^HV9SAXU8M-Cu=9`C&i#_aMYw7uLw9d3u-WU8{}mZ>TV$!4e74pclDr>m8wlchff zo7QGsAtb!MEv~~wsNn2e8VC)*TnAwDFrHxafXPmqtWnjjW0t@>wwi)K37B+jJPm|1 zKJqpYpiAwW!3N=$_(LFBJ-q}yVGGyYc*>%AVOV}>PwX~<4-&a8KB#L2fIJr zOl6>tK0ztEaFzSmCBD1q28hv~`(?Ul=RqoN)y_%PlIt|bb6PS=_S~Ac2-D`qqwLsc zErD=y$X2FDOUUPva?hmE<+eTkgfa3rJ00}{5 zcN5|DIR;z&=(CwWkN3{)XA`{GlXp0)O|*M4;Q5TLLI&mMM!i@vg7(N5s1vGUgMG@#o%``OXO@XvdI(ENLn(`tZpQ!j+$V zhGiX=YK)Frc9-t==zJp#viguleE=S3zV!agH{)k6WU}!$ zzJBn;{YPg(^Nv292qwnQU&vUuo#~DE#XpC@{<~j=Z0S!;_n*9cO+Te0&)JSk^K6Nw zw^GS&4YpsFX-dVs8RSo(bY1S}87{!lX=gKawuK34;O*gnuV57;EEKI)vnuww{<7iq zhsHPrFAjdN!uq3Hzrj%AM5_tcz9oR8y!0)oWdRuOwivkzZbaw4y_exbG0NKcLCwWD zNIoG@WA_T79Tcd#CY0ARs&7tlaWpf~QI-_80ipNtl4<0JeT!>jsz*@64Tm;5BGb%{ zxf-7<)fQox041I}oeb{>6_6_{^~elq*%5%{CXQBM)Pxlenydp(A;1@2 zqN8my;B^2GG~8*nt8k_2QmdQ6re;|aoXFNid(mLL5js)Inv-ycoMCiLY?RhdcZ+UK zP1YPIfl(6Ry>QpvX;`Gfl5wu*zyWtC75g~q19H-hhN`#Kfhmbd`30LV;Ii0t){@*^ z>)u?ebmrEoU>UqV%PzM(zN+N`6xIS!S&nZ-G9Rr|7weOG5*p&4qVnGQ&j2~1)y1)& zUFRFKnpm6U383njt&%YaRAUP+2STyl(KwUkb>O9NQzqB!sIHf5wW>A%2bZ%zn;?09 zQIq@2InQ-l-aPO`E&lN3%!T+*J`JRVmp-|l0WDwey_p}p`snxx3;-16uk0h|lhRCTf0iVgPB-99h4SFR{^cQ9F7%NJC^hoP3|ZMuuG(UYQoqgv zY*taERIc)==@_vq_vJEuFPTzCp z*AlyHh|}VA_3*JnkV8RJdet*;Jmc7jd?&E;w;sQOp*x?4V2M|FBAOEma={@v*66MB zt)f3_v;(1_`RJ-q06XKFL}EN=03awd`e6ry8rwAQ+xl!#*ImRQnWlib{nEm~U5B7{ z+G>xVHsI(b2P)>-@GgGmk3tcm@qxX&6A)xRraymx#`KTw-J6QhCLb~&5rXBf?tSjk zb9R0-%udv^_xJDJ#{jtV5g!W;v7AXg7(o;3+&!1S!Ui8+L$Rr4H~S652C@2omt*o)+5vsy`&|aX_PPlWGk^1urhNRRKR$T)wxs_yJE%mw_iljOg0=iD@k@WY zcP@VMFq3)SrzN)z4%t=|HFFD@DmMI5RRhpism|zJy)+;St{6t1-L9^^QV*MR&Eb-j zdc@kYt3!;Kwy=U>=(4mmi7eEe63Epx`Ket4o`xCCTP69trxX5V5`m_pRs88HP!@nt z1WC{QjZZy#Yc}@veEp%)B@=&CGyu9qHr5V0v z0ns>~Es5f?St|MY0s`{3*{q_}tQlFR97oU* zgY$J4{#<%!w-P)3OS-#rYd<_KO95w8dK5yGp@-XnzF~A(oHRBvqppW_ zuNmTGIoH;Zu`%$h^#0$GkbBc*|N9fP;mcU&&EPf-yLM=RWFLqQ6z+mO(75zSBDu6% z68hp6=a;3TUl>yDAhc@hi3Zk_;s6{Q`v8k#Ts&N?um-4ivuL=HmbIYNE`negF&oy+ z`6R0^O0?ZqJZWq%D{xiHaJsy1N%$rQDsdXT41i)W?~h;n-*ySK=ZYF8`AxaQJCiCc zmf0RU>Ne-rbeJ2lEv|3o1ej;$cHJ&h7*LROE`~*6 z!XeF4ec|wx3cm=YY(RG-U-s9k2#=n^BS=LUF>Zw^_FFJpRj(U&({6L2_L4YPJrtw= zaqrRdhKXAAjFmQx$=sNdU3)46kSC;~03Jp?^9%83z6u7nnvp5P%&`+OoQ43|eG-=8 zTpwD0`*#5uf96p7#GagZY<0ytqBO~MJ_9_Q>&AxN{mn*#n>Lqy*a0v(hMM`+5KA5yXmliCwz#T zcDv(CckZ3xOr10|Ir&UWlg%A#YAwvE7MCl`D)`!vsAi!!L#2@sq1~)pP=`E8wY!v7 zS?VP`lnhrZ7bqv_lu*v$n>}VVwCXrI;UGI5(0WCcG!WAe#2o?YsG&RQ!}!B5Lp9_- zeRc2F`2Tou?}@iub1+RUT({?BA;&i{Gb?U3c45+jTz5sJECOx!n>ECumBN;g3J|e? zqoh%^gBI@P@flqPM@6lnH-Vlx7Hg_#vN$@YPFPRG z2`6{VPHFCLU^s5H-GbR^Opx3PZBu+Hq*z4AuZXY~A{r&MC40&@$KhHA>9pCV!OhA< zZrIpS58gU~tk%yPne0{WqZglNW{{{ZH7mx%6pD=8+^BAqM3zCz;Hx~wsg6}Ikw8pyr+_PJ4pud?%{Cm5goJI#c`H3~3k;Dx9XL`2k6sph3e-2n= zo>`y8)Logo;&1&(21BJAoCZ&+d!zl3ayrsJFoY5$;j*5ys!-DkP2!`XW?e00G7{sXA|0XnHn-X{*D4d*(d<3veSNg~J#Yaa-M?ko0M>cW;U%=e~Oikf}uehU}T?D&V zLq^v5z=A9W(tEllKQ?jrgEX|^KTCCPq>_qs|gN0poTWx<@K6{c1gd3Gn;mv;O8xk zLL?~IWI_A2w(OBpBdjqk$1H3ng=p+KN|fiD7QW;#gO`^AIG@?;ad*&PjIViY6RoI( z)tjjCB+LAfoTr8*X$YJ_A}TqO4I_q)t1ZQ-<}3igFDt7lJ97M9ZGa(x(wWboax-1B zoqVA~l*7%K)a!`3sY|gaU!R zl3^Jh6g8*Z?bi)#h%y9;1_nt+D$y>LB4#Q!*$7d&FSQf89w2MW>`_W$lpa8k19#s2aB698ID zkemss6Of$o3#&}-5DxExh!Z`52jhS7rG&@&KOSU;;3F_IVfAg~NZ%6-4-%!dHC?Q? z=79C!+&KXr1nOekD9lZ)99%?34!3SzM1g#akF6o((b z29`rtKljK*zS(gCKCI#e#VQM9bJ)l(7>5af;yJ5^)^vrSXf-gljfUGVcGgaP1xOsq zW^)}@tu5`^(ld+7)E3=r9spkxxhMKmue|H6udFlgIbVcm_qrz#@DZuw#_>FV@j?lV zhvpvLcR=ovrt-tN1H+BO2?jR>aPAc+b0z-fAMIUKn!$`7tMWu?Fp@}38*MvJ)|Va_ zZ46fM`*UK$Oq)%2mYo%(eurI4zBI?mM1Iy(D`An9Izm{L>p<(NikP_`^#v}+($_w( z3*gfI#o>eTx!*rHjQ_7s1F5CgsoHp{I8{BsdU337-~zFMR668q#s(DgLW68}b&*`Q z`cqAmN>O!8bbJ}?thM24P|N~h!qJ%pu)X_}ZN4*t)Rz#`?}f$EfA}<{029@Pd)}yX z5Py3DPr+wmU^AaE>@K+rMF!hGSnOC96tj}C@7g^n&u(bcH%@LV+JXlH2wiMl(H&=k zz>wF+4Dh1gWaoz6!kB_Gv4V*Uce#o!hU3y$;J2nD2_c3=qD=^XMJN^pFOa+F%!0}} zj2hg_F#W^=fW!X$&p?&rCqKG>X_w8s?YoChK6cy~2+)bAAThH^@?+*r*CRkfF&s%w!g z^$Wu4EbkXyU`4WAMRGp!aj@-4k(%H8>fSAB2$HyX9UV{i83Bhn# zTG>?>++eVYYII0CtD{*GZ_F}v>LKpSQ$Lg0jHo6t7m=RM#2^-qyq=> z?sR6AeO29Inck1bpTjb5jh#m_Kc6E1Zh}sL**gA?b8tT4g4~|E5g+@V?F74$=U``b zz1s#zLwCFXX7Jy3x?Nlq>fMDXMgvXO$x7LL!5avW$05C9C#YV#k;6wy&B(7cWF$Za=qRlOJqXs84j{1L8BF8dWH3$$5buPy9h(IiQr4nUD-_ps z9VGSZ^>K^dfR$w;{&9U~r@hPUoIq|8ERPI#8Y-qo-HuVmrM8pI_wGr!uJsW4?N(g> z{x2ciPc9$7!R5nQJ4xdkbzypN*9F7+1|wiHXH2(?0@od^WQpZ;%)21a)b0-eJOkRO zxE(R25V6`$zN#brTw7X~y*WpYx*bMzgU)!VQmd87MM6%l2Yl_uU6B3n=z@6t!OUO8 zpRoX!@E@K83%%vn_iuaU=YJ{_-VvW4AKY{Gv%h~wT>qKOefPMD<}*mYUs*u%&jC>l zBmVH~fL8w6+cIyu`r=(rX5V;1f*rrXUeLeVc}u&XJ~qO$4O}Nn)|x^B9$2RR4$^OS zht#0V_nU1<0kU%(TPS^R?la@cb}E%jFyU)0dJXW~4&pzDBPyE>agYas+{^`SuytG7GVsG061KqOWuV|VmEIPn@LU~6f zMs|Ne*G#jr-NL}0v!;+4np(sBwlpn_<|Eti=QW%}vz6YGROs3uTJ=2C+b+|wDKlNH z!e#v0yZ7&nH{Jbn_g|CkvUc2HH@5%t{sVVz!B_k!BbJZ?)*x1V?gS}uOrw1*4@3T! zu*?IQ6yXu?Jp(1w&mSJfAN)+_eLHSY3aUu%#=~*{gZmeF)X51HG+D0n+vP4ydD#Wj z=WJvf33^bI>s)s}8n)D4FoLU{`&tzNa|8&I%u2V9Vwmr(Y}rsYxn-v?t9M5PQ*mK1 zy|!?7be)&JwtsK)Z-Aa0v%4o>!c4Lf1D`0zPAeyhA*Fo#okMA zKDaG@;r@&bFbMkfy$9l-dleuK|N30!@&SB3{=}#D&+njuzOH~}vqG2VVMp9ln@b~C zuLw}&UGidGi4{P}aNN~IZP$j4R`17yALwftC4<5YdbS{O6 zFU9W07Z;g_4`39HfBBir`9oN<0pt%Tc{giI5D3=1_!0qmwImw`S^tEc8(+S#FI<0{ z?%P?8{^~QCd*UCSXFd|wU*EfHcN0&3JbvpU+`*?gLBPwL>XLhT0m=fiB)X|6o4I|yj9AJs#q%8 zTXECx+KB9BBTI`YWNC+!NTOPGidr@iW&*~Wydf~PbUZa+;Uc0-VBI~_r2xd&fAWD6rlfRqFi?sdnRGlFbhM#=(d1V zvO*SVpt&&U=$$HSMne4hzc@UP?3$Wf!#m&cc*?VT{D&SdT(|B6EiebHl)Z2jzxKO( zkEfyH`O}@r^LBCu1k|ZJjm%a71~o1#*-BU-Pz(}RCNaWLDCEi-kj1Kj2_WbxZIp6U zW7|V4p@PvwKkC-oy2xquvgNO4pf6b?_-r7uSR2F5&FHiO3B4cheS1Gn=ioT=vCIz~ zKt?%!J<2e*CHgE$qmmtIaFth4kO-!GA!tGS<8iJt+6r@09U;B$a*8x;zu9HTe9>w9 z(=9EvM|Ia6*TtS*XfRsU#OrR}Fyuwprf9iXcU;TYvjb~K5&6~!0T%Ln_3-ZGO}}_P zU&C#^4foj^lhZ7npRE`JKw*e5E`SpZ)J&iFSmwKDDwALPhx?hi1UVzlKt|O?X*?d9 zi$-=m*;GLCPSGon4bkk58Es|~we%LgDQ(&!-<|U7+Gb_gXfPF)fu}UhC0^_HDt%|8 z=Y^>}x@K*hNKP)V>~P~}86whG_R+WO4yFWzq|?$<)2*}YkQ4(}bs37^&|^sGjOd|L zt?CP|Hf&XS4P&+DddPPgBFI*E3zQ1UVO=cc2?Mo@-YO4{n%20#s#{o373a=8ub?^A zUeg|~CSZdL@gIK!)}w#;DR`P+xCLl7fA+JPKez?705AJ;B{h!EudG96{<~wjf#@-Ccil4Z= z4-9;9Vr@ClMygun!VoDqBXgM3yQ9vytRZZn($EHap0Cd_P^>n}E!ikosxz4qGtqF{ za|j2AqS;ykNdv}aSsqGTe%$Y;gIFS4eAD?PcDJv9t3f(eT_Z&jfBdz*3lCjRYMc2J zEbGbnr>?kh>Dm2z((8ZI>CuEmne#JsR&}4N4u)W2gI*wJ8>VcA9zewlf`jTvY@O z+j#w%BpLX#z`XkzD)YAM1a7hTUs15?lUjqqxTkZ8yC3D zeaT|>rqtZx_{QD2b3{*Vjqmv9U`vDj%Y)1RT{rXU?>z8eB4G>@-NkvaDn}e=1Ff#s zul0RcA&fhoHRs2SLIGPjC+6_(x*S5mroUiSTx&7@cA(%~F2qb}ovj&t;QnN}vOhAK z1IE}6tMC?|WdQ9k(6OWe^b*S3k3v(M#6(#!ZqBW)fVe8=2ay5#{uQ#vq4C`tU|*l2 z$}7zNJ&z-3|n5m&DDn^g)1smGMrak zho9&2jT8CB`yaZ&UrT)}PlV_8$oN}7vxhvI{LaobIC-*9w@x$yQPn}LMje}(EF|xT z=Cl)Kd@)W=1#I0u!?g|(JM1w;K14D@`t1=`5%IY`q&5xT{cuL6gP-k0OlSM19jzC7S zUg2wt7NBS*SxQ+E@c4>>ieps?>7c!0c9<^~nl=W$5D{;pOlxD4pwLOlN z4<^~kPJ%iv{R6l|4?UJx*nV&S+4zGl47Joh%)AG*-%`XtyuAD15%`=y1D>Na3DL*( zMpa$`!cx_pHlwy=ao~?vls4>y6E<6x@^;@H*s|M^r$wZ}lZnckIO_LHk~-p;<*KRF z+C@TSX__oFD7AW;p}TtD!KL`$es%Be_&@!Z{oAkp-+%Z-^6R(eQz3-yeRNvsGyFFUY$obU6k(j{mqPL zQGn!TJ6VI{HiKbDlZ;soQlpflkt*ZddCRjH#PvB~O*a4T z{^hIxnY#55mdHo>ED(FSGrsE+kk3lQIBtg1a!Fm|^{*db@lXHS-hDS6?fCFd99|x& z#D-n_Q@Nr!OtH;wm6;uEb&wl{ny=^eSAM>;ayR*)O@$6cH+sxs%FRd1wM1$QTNIX? zsDn8hrCSb$k#BG<(OY9^@0A~aXJ)gPkdps2e)uO3|0w=iE%VpuYW!;D;NjSl0YweK zpyEE3c60pE@bLB&KlY*U@PWe=dGRB+g4Gq$=`Jh`uydP` z1^p-V(C*d97atCjTuf27*V2KjZ(*XQ&UrNPfFUj~Z# zwwQV1IFTG`GcWNyPhtkBex#c)+(A_hs#tOR%NZ&Dp--NTl@_1Pd>9^!#5LibNOI;$ z5Rm?V1uH_mE%8s_Jwl+HuuwC)lVZ0fXd|x`jQND$$4RYWTWb?}t0|28Ic8a3=jM8K z+!$=#woQfeyd>m_nSklpx!S0<^ESu|PRwRg1FbVemV0$0oeA^=Q0IQk=aS? z#N#Yv{qFh-h=%{xc}NaFo_xAW!QJTp^5LcUUsIXOBdXNG^qSq?Hv4S3fe*K#*hYo` zvRvyee52JzNM9YdS!v zZKibcol2|IS}uqzNdKT@K96bkn&^>iZ6XTVnghKSPp)qYF5aO0{$d&_pk^%_+SVvl zcB{`Mv3&6)hm|-^$l4r|?Z>!4m_lOx4-YSjN6@%%p@H)~Tn&t->GdQ{KYDTC-0SA$ zW8B+RTCM=n3yBXvRzji&R-!5RFvY&bmtcZ8t+NULO<&rL+-aYsP+=Iu|CXQFoxRh+ zgn|%fS4?%(;Bmmymj>kx-Rzed15BLeW)&vS>+7uBNBL}1=apcbYc8NFUdy_xJ}XoP z60HF1kZt)?u*0vsKEGTt~D#syw;f#sOPpuX^P>(af@%*7uQ{0<8M9r4VQMqKY8}D za8dOmYK>HCPQg>zqR1(uiHu3yO6d(|3aGc+f?rc)Wl^CQvabYf7mqdr(Q4GXn8)EY z3W`$=yXgokeNN)Yb{>iK^ns6+&x33cBuySowTEaCXrx6U!oc|#jK@)SJJ!SEa@iKG zrYH<6P-(2z>f#JkC&?PbOr5g2g8FDj+Dul!NF9S64AdaF^%@l`93@63T3Ges?#r26 z0s+70hg^qZiCPV;CTn0ARx7k-4Y?f*#1eb9j_lhBEB%V>tU^$=2L&kzglBS^RYGoj zEEz>^{G}xGG@N-#4R~cy;8$i2H9%AqYYdE*hfspJY3U8HB}i);@D^9#<7a>r8Gre0F!24m01_6>>HeJ=-_fqT~e90TuODye!CegXFybddg7gS!ZU)(>h7&giTMY`TDm-wZgBq$6PKY-13uo+v1TaMN*<5Zx zX#GwTA-C92Cnn(CTd24oScG>L9d0?XwR&aMidG^b&&ozvD({pxue^aRwDTW4sW=>= zRujCa2ls4sg!R*%YVHtrD>jqiv8ASBrAQ63lY zB#%4}%2yEa_!ba+PiN4RDlG`&eCwO{zWrpnJc&W!YsqqCb}Gp5Y!Zhi^w>l+^oiZ9 zd!tjXnQ>z*0Vw?OXJP%5$}6P>_I?lRMyeg=mz|{$1OqVBYR-93Ti6Q%U}%FW*m&>qAWK7j|N4q zjvYhf!j-bBWkU>vo=d#tZ+wk!KvLFQ$z*Rzm4+~Sfp}O0SNo*5c41NO)46eNwd&(5 za~&j9wIsdugYh>?nJ3~4zYWS;cf1Qi4tGc8{@!i3}h3Da!--VhdufxgPog4xs z7)4rM+3B4fodVZ;99+ODJ71z}&p2aX1ZV7)EGK{eM71?Jl!+{PWya`V9zJ~g+1D%n z)_+NiWu67-*QXvic=E}#L(jZ2F)^D2+y6R)5u_0_h+FJ^oPY-Efag|2N22^ri+`h(Us z1pIhG!!ZFCEsGs~`j3AjbNAy(gL8@4@HOKj6r8|)aCRkh;+NmLpPJpoxqA;ERlr0E zuzI29b^8mX&eL8884Z!d{w11Mh{~vF2`!QK>Z~KXBwsWGZa{3*Vzt@o)KGtnwVI#{ z0^Cb%o);P4&02mHav5jSo}nYfz2AeJ=Z{^6nG=W*4LxT_R(mkqgdlG%>Z{U59fa-@ zjivx*wWg3o?d7m3zU6!ov(0Q*-Hc`%;QH1Bt2<(QAkrr=1)BFF52}^M~kSkIvNca0%I0sD?-CN{zzhE`9Ls9aJgI;Oj$slwEV++{WP5_D5UlK%Z zgl3iUeCnjbUrDok2mZk`di><3McX8Q3u>X-JgKcK8|_q+qj=ql^vFx=xr+y1Oz=Rr zzw*w1k|A%8Klg#mL$^jNaJo-I570jRHvsziUtiqAE}ZU6;-E8Iklq3ccfyW@+@Kq{ z%WiqrL{@vDf3SnO!sR6@>YF-vRP!+KBa&xfsYTiLV= e9YEQPq`Bu7>sD9HB?0zBH{JTC_ucxwTmOG++mHGH diff --git a/bundle/package.json b/bundle/package.json index 002ed7f9d..a2c2f5300 100644 --- a/bundle/package.json +++ b/bundle/package.json @@ -26,82 +26,27 @@ }, "homepage": "https://fosscord.com", "devDependencies": { - "@babel/core": "^7.18.9", - "@babel/preset-env": "^7.18.9", - "@babel/preset-typescript": "^7.15.0", - "@ovos-media/ts-transform-paths": "^1.7.18-1", - "@types/amqplib": "^0.8.1", - "@types/bcrypt": "^5.0.0", - "@types/body-parser": "^1.19.0", - "@types/btoa": "^1.2.3", "@types/dotenv": "^8.2.0", "@types/express": "^4.17.12", - "@types/fs-extra": "^9.0.12", - "@types/i18next-node-fs-backend": "^2.1.0", - "@types/jest": "^28.1.6", - "@types/jest-expect-message": "^1.0.3", - "@types/jsonwebtoken": "^8.5.0", - "@types/morgan": "^1.9.3", - "@types/multer": "^1.4.7", "@types/node": "^18.0.6", - "@types/node-os-utils": "^1.2.0", - "@types/supertest": "^2.0.11", - "@types/ws": "^8.5.3", - "jest": "^28.1.3", - "jest-expect-message": "^1.0.2", - "jest-runtime": "^28.1.3", + "@types/node-os-utils": "^1.3.0", "ts-node": "^10.2.1", - "ts-node-dev": "^2.0.0", "ts-patch": "^2.0.1", - "tsconfig-paths": "^3.12.0", - "typescript": "^4.2.3", - "typescript-json-schema": "^0.54.0" + "typescript": "^4.7.4" }, "dependencies": { - "@aws-sdk/client-s3": "^3.36.1", - "@aws-sdk/node-http-handler": "^3.36.0", - "@babel/preset-env": "^7.15.8", - "@babel/preset-typescript": "^7.15.0", "@fosscord/api": "file:../api", "@fosscord/cdn": "file:../cdn", "@fosscord/gateway": "file:../gateway", + "@ovos-media/ts-transform-paths": "^1.7.18-1", "@sentry/node": "^7.7.0", "@sentry/tracing": "^7.7.0", - "ajv": "8.6.2", - "ajv-formats": "^2.1.1", - "amqplib": "^0.10.0", - "assert": "^2.0.0", - "async-exit-hook": "^2.0.1", - "bcrypt": "^5.0.1", - "body-parser": "^1.19.0", - "btoa": "^1.2.1", - "cheerio": "^1.0.0-rc.10", "dotenv": "^16.0.1", - "exif-be-gone": "^1.2.0", - "express": "^4.17.1", - "express-async-errors": "^3.1.1", - "file-type": "^17.1.2", - "form-data": "^4.0.0", - "fs-extra": "^10.0.0", - "i18next": "^21.8.14", - "i18next-http-middleware": "^3.1.3", - "i18next-node-fs-backend": "^2.1.3", - "image-size": "^1.0.0", - "jest": "^28.1.3", - "jsonwebtoken": "^8.5.1", - "lambert-db": "^1.2.3", - "lambert-server": "^1.2.11", - "missing-native-js-functions": "^1.2.18", - "morgan": "^1.10.0", - "multer": "^1.4.5-lts.1", - "nan": "^2.15.0", - "nanocolors": "^0.2.12", - "node-2fa": "^2.0.3", - "node-os-utils": "^1.3.5", + "express": "^4.18.1", + "node-fetch": "^2.6.7", + "node-os-utils": "^1.3.7", "patch-package": "^6.4.7", - "pg": "^8.7.3", "picocolors": "^1.0.0", - "proxy-agent": "^5.0.0", "reflect-metadata": "^0.1.13", "sqlite3": "^4.2.0", "supertest": "^6.1.6", diff --git a/cdn/package.json b/cdn/package.json index 2b2866cbd..f7438109c 100644 --- a/cdn/package.json +++ b/cdn/package.json @@ -21,38 +21,27 @@ }, "homepage": "https://github.com/fosscord/fosscord-server#readme", "devDependencies": { - "@ovos-media/ts-transform-paths": "^1.7.18-1", - "@types/amqplib": "^0.8.1", "@types/body-parser": "^1.19.0", - "@types/btoa": "^1.2.3", "@types/dotenv": "^8.2.0", "@types/express": "^4.17.12", - "@types/fs-extra": "^9.0.12", - "@types/jsonwebtoken": "^8.5.0", "@types/multer": "^1.4.7", - "@types/node": "^18.0.6", - "ts-patch": "^2.0.1" + "@types/node": "^18.0.6" }, "dependencies": { "@aws-sdk/client-s3": "^3.36.1", - "@aws-sdk/node-http-handler": "^3.36.0", "@fosscord/util": "file:../util", + "@types/node-fetch": "^2.6.2", "body-parser": "^1.19.0", - "btoa": "^1.2.1", "dotenv": "^16.0.1", "exif-be-gone": "^1.2.0", "express": "^4.17.1", - "express-async-errors": "^3.1.1", "file-type": "^17.1.2", - "form-data": "^4.0.0", - "fs-extra": "^10.0.0", "image-size": "^1.0.0", "jest": "^28.1.3", - "lambert-db": "^1.2.3", "lambert-server": "^1.2.12", - "missing-native-js-functions": "^1.2.17", "multer": "^1.4.5-lts.1", - "nanocolors": "^0.2.12", + "node-fetch": "^2.6.7", + "picocolors": "^1.0.0", "supertest": "^6.1.6", "typescript": "^4.1.2" }, diff --git a/cdn/src/routes/attachments.ts b/cdn/src/routes/attachments.ts index 2aed752eb..3e04fe76a 100644 --- a/cdn/src/routes/attachments.ts +++ b/cdn/src/routes/attachments.ts @@ -2,7 +2,7 @@ import { Router, Response, Request } from "express"; import { Config, Snowflake } from "@fosscord/util"; import { storage } from "../util/Storage"; import FileType from "file-type"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import { multer } from "../util/multer"; import imageSize from "image-size"; diff --git a/cdn/src/routes/avatars.ts b/cdn/src/routes/avatars.ts index 3b521cc3b..bbdf42cc7 100644 --- a/cdn/src/routes/avatars.ts +++ b/cdn/src/routes/avatars.ts @@ -2,7 +2,7 @@ import { Router, Response, Request } from "express"; import { Config, Snowflake } from "@fosscord/util"; import { storage } from "../util/Storage"; import FileType from "file-type"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import crypto from "crypto"; import { multer } from "../util/multer"; diff --git a/cdn/src/routes/external.ts b/cdn/src/routes/external.ts index ed44c9054..cf02f645b 100644 --- a/cdn/src/routes/external.ts +++ b/cdn/src/routes/external.ts @@ -1,10 +1,9 @@ import { Router, Response, Request } from "express"; import fetch from "node-fetch"; -import { HTTPError } from "lambert-server"; -import { Snowflake } from "@fosscord/util"; +import { HTTPError } from "@fosscord/util"; +import { Snowflake, Config } from "@fosscord/util"; import { storage } from "../util/Storage"; import FileType from "file-type"; -import { Config } from "@fosscord/util"; // TODO: somehow handle the deletion of images posted to the /external route diff --git a/cdn/src/routes/role-icons.ts b/cdn/src/routes/role-icons.ts index a850db886..dd96c90e6 100644 --- a/cdn/src/routes/role-icons.ts +++ b/cdn/src/routes/role-icons.ts @@ -2,7 +2,7 @@ import { Router, Response, Request } from "express"; import { Config, Snowflake } from "@fosscord/util"; import { storage } from "../util/Storage"; import FileType from "file-type"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from "@fosscord/util"; import crypto from "crypto"; import { multer } from "../util/multer"; diff --git a/cdn/src/util/FileStorage.ts b/cdn/src/util/FileStorage.ts index 376ce007c..ed007abbf 100644 --- a/cdn/src/util/FileStorage.ts +++ b/cdn/src/util/FileStorage.ts @@ -1,8 +1,7 @@ import { Storage } from "./Storage"; import fs from "fs"; -import fse from "fs-extra"; +//import fse from "fs-extra"; import { join, relative, dirname } from "path"; -import "missing-native-js-functions"; import { Readable } from "stream"; import ExifTransformer = require("exif-be-gone"); @@ -36,7 +35,8 @@ export class FileStorage implements Storage { async set(path: string, value: any) { path = getPath(path); - fse.ensureDirSync(dirname(path)); + //fse.ensureDirSync(dirname(path)); + fs.mkdirSync(dirname(path), {recursive: true}); value = Readable.from(value); const cleaned_file = fs.createWriteStream(path); diff --git a/cdn/src/util/Storage.ts b/cdn/src/util/Storage.ts index 89dd5634b..728804a0c 100644 --- a/cdn/src/util/Storage.ts +++ b/cdn/src/util/Storage.ts @@ -1,6 +1,7 @@ import { FileStorage } from "./FileStorage"; import path from "path"; -import fse from "fs-extra"; +//import fse from "fs-extra"; +import fs from "fs"; import { bgCyan, black } from "picocolors"; import { S3 } from "@aws-sdk/client-s3"; import { S3Storage } from "./S3Storage"; @@ -22,7 +23,8 @@ if (process.env.STORAGE_PROVIDER === "file" || !process.env.STORAGE_PROVIDER) { location = path.join(process.cwd(), "files"); } console.log(`[CDN] storage location: ${bgCyan(`${black(location)}`)}`); - fse.ensureDirSync(location); + //fse.ensureDirSync(location); + fs.mkdirSync(location, {recursive: true}); process.env.STORAGE_LOCATION = location; storage = new FileStorage(); diff --git a/cdn/tsconfig.json b/cdn/tsconfig.json index 1ad037c60..94cc7b586 100644 --- a/cdn/tsconfig.json +++ b/cdn/tsconfig.json @@ -4,7 +4,7 @@ /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Basic Options */ - "incremental": true /* Enable incremental compilation */, + "incremental": false /* Enable incremental compilation */, "target": "ES6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, "lib": [ diff --git a/gateway/package.json b/gateway/package.json index 05ef5c558..19d44eba7 100644 --- a/gateway/package.json +++ b/gateway/package.json @@ -15,9 +15,7 @@ "author": "Fosscord", "license": "AGPL-3.0-only", "devDependencies": { - "@ovos-media/ts-transform-paths": "^1.7.18-1", "@types/amqplib": "^0.8.1", - "@types/jsonwebtoken": "^8.5.0", "@types/node": "^18.0.6", "@types/ws": "^8.5.3", "ts-node-dev": "^2.0.0", @@ -28,10 +26,6 @@ "@fosscord/util": "file:../util", "amqplib": "^0.10.0", "dotenv": "^16.0.1", - "jsonwebtoken": "^8.5.1", - "lambert-server": "^1.2.11", - "missing-native-js-functions": "^1.2.18", - "proxy-agent": "^5.0.0", "typeorm": "^0.3.7", "ws": "^8.8.1" }, diff --git a/gateway/src/Server.ts b/gateway/src/Server.ts index 7e1489bee..254820c9b 100644 --- a/gateway/src/Server.ts +++ b/gateway/src/Server.ts @@ -1,4 +1,3 @@ -import "missing-native-js-functions"; import dotenv from "dotenv"; dotenv.config(); import { closeDatabase, Config, initDatabase, initEvent } from "@fosscord/util"; diff --git a/gateway/src/events/Message.ts b/gateway/src/events/Message.ts index 83e6fc1b6..313287841 100644 --- a/gateway/src/events/Message.ts +++ b/gateway/src/events/Message.ts @@ -1,17 +1,16 @@ -import { CLOSECODES, OPCODES } from "../util/Constants"; +import { CLOSECODES } from "../util/Constants"; import { WebSocket, Payload } from "@fosscord/gateway"; let erlpack: any; try { erlpack = require("@yukikaze-bot/erlpack"); } catch (error) {} import OPCodeHandlers from "../opcodes"; -import { Tuple } from "lambert-server"; import { check } from "../opcodes/instanceOf"; import WS from "ws"; const PayloadSchema = { op: Number, - $d: new Tuple(Object, Number), // or number for heartbeat sequence + $d: Object || Number, // or number for heartbeat sequence $s: Number, $t: String, }; diff --git a/gateway/src/listener/listener.ts b/gateway/src/listener/listener.ts index 060de65bb..0cf2b82b9 100644 --- a/gateway/src/listener/listener.ts +++ b/gateway/src/listener/listener.ts @@ -13,7 +13,6 @@ import { import { OPCODES } from "../util/Constants"; import { Send } from "../util/Send"; import { WebSocket } from "@fosscord/gateway"; -import "missing-native-js-functions"; import { Channel as AMQChannel } from "amqplib"; import { Recipient } from "@fosscord/util"; diff --git a/gateway/src/opcodes/LazyRequest.ts b/gateway/src/opcodes/LazyRequest.ts index 7503ee614..dd96d6d7b 100644 --- a/gateway/src/opcodes/LazyRequest.ts +++ b/gateway/src/opcodes/LazyRequest.ts @@ -4,9 +4,7 @@ import { Send } from "../util/Send"; import { OPCODES } from "../util/Constants"; import { WebSocket, Payload, handlePresenceUpdate } from "@fosscord/gateway"; import { check } from "./instanceOf"; -import "missing-native-js-functions"; import { getRepository } from "typeorm"; -import "missing-native-js-functions"; // TODO: only show roles/members that have access to this channel // TODO: config: to list all members (even those who are offline) sorted by role, or just those who are online diff --git a/gateway/src/opcodes/instanceOf.ts b/gateway/src/opcodes/instanceOf.ts index 6fd508527..eb6f6ea18 100644 --- a/gateway/src/opcodes/instanceOf.ts +++ b/gateway/src/opcodes/instanceOf.ts @@ -1,4 +1,4 @@ -import { instanceOf } from "lambert-server"; +import { instanceOf } from "@fosscord/util"; import { WebSocket } from "@fosscord/gateway"; import { CLOSECODES } from "../util/Constants"; diff --git a/gateway/tsconfig.json b/gateway/tsconfig.json index 56b9ca7d0..70407c6b0 100644 --- a/gateway/tsconfig.json +++ b/gateway/tsconfig.json @@ -5,7 +5,7 @@ /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Basic Options */ - "incremental": true /* Enable incremental compilation */, + "incremental": false /* Enable incremental compilation */, "target": "ES2020" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, "lib": [ diff --git a/package-lock.json b/package-lock.json index 18a82aab57003acae56a179d01cfb82518caf920..abc8be0ddacd667a875b5c9afbe70a9fb9fb8846 100644 GIT binary patch delta 6191 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 F{{p$Ynz{f0 diff --git a/util/package-lock.json b/util/package-lock.json index e56a5f1bcd7197c46b65533f6d7619eff93be005..472f1b95f0c62965ea4c9d6bc17e3a24b8ca5e16 100644 GIT binary patch delta 953 zcmci9+b^4O7{KwoZ-0GXY^p^ohUjX{oQl?AGufzP)v5HbUZB&`*0~2oBC$z`EDQ28 zk4&=7W^NeUBztWkM8skj2ytZ>?zWj-SQbkbvK5*CV7qy4eoykt^Zo4225v0{_8sA( zH5#}*2zf_W8SRxO(KVr{EIuYNCSDZP|8p6VwI~q2|DgEO8^rztxW7dDL&XA#V5*%Z zhSW%k3kMa*3(s%yAyALXK>m_Uh3!zv2Uhin1KqF5i0SfS2R;33%zOo;d_sU1mT0^P zBKRs}i7|JEhTd}5C(_?YsLIG`GSxOESd5t^iq^QRrMFB9eT_UesiweDr`1?0GYl3MdAMx}Ndl1iGC zxy>?Ner9u8enYmZF;=UJv>A)dI-|uBD=Tc1D03wyO_9_lYnD{&G#Z6PUTR3PW;-iw zSqa8GUAEaAYZaSrSHm42A{bH%*=h)%ByJoB=^R>ThSmx0NBkZ>!SEwefOm)Xfcuto zW5y@QyPNpn>E=m3CaQxqmx{wjk4|fLKHr0Tde{E=SON2Sj#V-O-y*1hGbNgttw2Mr z$Zj+T_Ue%v6IY8S!#q9Q-P@yFLv+*L+KA^N^#6JAc3j?5y@&^W(IkBW(zQ$QK-f$P z+^ZU_bupCcWKR9qq6JAtCw4Y!W!Mpv!~XBp-9f%3*jD OdAo4a7$HF`g8l%9t6ReW delta 429 zcmW-dUr1AN9L2f!_r1TL&WHuMdFO(8U6Wdyik30*Aqav7(H|n}VRUJ>{MR3yiZAXV zBdsaZH z;PeV>w-2ei1B9vx|29>DVz`n^mJ$Nwva+%j%bS-{=P1*NA3PvHwA4=NuN!mqH_k64CvqWaY-k7d{m95!hP?^NN#g?WAu zmvnIwKi1d~>buTxY~6`0CY<40_lP6=nhV$5T{AtGip)$+;Ic_Rth6zK@HZ#ZNume6 zJ=}}yBofd~I*LGw{OwH+BNi|g`l5Z&0po process.setMaxListeners(process.getMaxListeners() - 1); }; - const listener = (msg: ProcessEvent) => { - msg.type === "event" && msg.id === event && callback({ ...msg.event, cancel }); + const listener = (message: any) => { + message.type === "event" && message.id === event && callback({ ...message.event, cancel }); }; process.addListener("message", listener); diff --git a/util/src/util/FieldError.ts b/util/src/util/FieldError.ts index 406b33e82..49968e1a2 100644 --- a/util/src/util/FieldError.ts +++ b/util/src/util/FieldError.ts @@ -1,5 +1,3 @@ -import "missing-native-js-functions"; - export function FieldErrors(fields: Record) { return new FieldError( 50035, diff --git a/util/src/util/Permissions.ts b/util/src/util/Permissions.ts index e003bf05e..d3efb70c1 100644 --- a/util/src/util/Permissions.ts +++ b/util/src/util/Permissions.ts @@ -1,17 +1,8 @@ // https://github.com/discordjs/discord.js/blob/master/src/util/Permissions.js // Apache License Version 2.0 Copyright 2015 - 2021 Amish Shah import { Channel, ChannelPermissionOverwrite, Guild, Member, Role } from "../entities"; -import { BitField } from "./BitField"; -import "missing-native-js-functions"; -import { BitFieldResolvable, BitFlag } from "./BitField"; - -let HTTPError: any; - -try { - HTTPError = require("lambert-server").HTTPError; -} catch (e) { - HTTPError = Error; -} +import { BitField, BitFieldResolvable, BitFlag } from "./BitField"; +import { HTTPError } from ".."; export type PermissionResolvable = bigint | number | Permissions | PermissionResolvable[] | PermissionString; diff --git a/util/src/util/Rights.ts b/util/src/util/Rights.ts index b7f458363..1c3906fb4 100644 --- a/util/src/util/Rights.ts +++ b/util/src/util/Rights.ts @@ -1,15 +1,6 @@ -import { BitField } from "./BitField"; -import "missing-native-js-functions"; -import { BitFieldResolvable, BitFlag } from "./BitField"; +import { BitField, BitFieldResolvable, BitFlag } from "./BitField"; import { User } from "../entities"; - -let HTTPError: any; - -try { - HTTPError = require("lambert-server").HTTPError; -} catch (e) { - HTTPError = Error; -} +import { HTTPError } from ".."; export type RightResolvable = bigint | number | Rights | RightResolvable[] | RightString; diff --git a/util/src/util/cdn.ts b/util/src/util/cdn.ts index ef4ac47d6..9cfe4896c 100644 --- a/util/src/util/cdn.ts +++ b/util/src/util/cdn.ts @@ -1,8 +1,8 @@ import FormData from "form-data"; -import { HTTPError } from "lambert-server"; +import { HTTPError } from ".."; import { Config } from "./Config"; import multer from "multer"; -import fetch from "../fetch" +import fetch from "node-fetch" import { nodeModuleNameResolver } from "typescript"; export async function uploadFile(path: string, file?: Express.Multer.File) { diff --git a/util/src/util/imports/Checks.ts b/util/src/util/imports/Checks.ts new file mode 100644 index 000000000..19a841713 --- /dev/null +++ b/util/src/util/imports/Checks.ts @@ -0,0 +1,125 @@ +//source: https://github.com/Flam3rboy/-server/blob/master/src/check.ts +import { NextFunction, Request, Response } from "express"; +import { HTTPError } from "."; + +const OPTIONAL_PREFIX = "$"; +const EMAIL_REGEX = + /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + +export function check(schema: any) { + return (req: Request, res: Response, next: NextFunction) => { + try { + const result = instanceOf(schema, req.body, { path: "body" }); + if (result === true) return next(); + throw result; + } catch (error) { + next(new HTTPError((error as any).toString(), 400)); + } + }; +} +export class Tuple { + public types: any[]; + constructor(...types: any[]) { + this.types = types; + } +} + +export class Email { + constructor(public email: string) {} + check() { + return !!this.email.match(EMAIL_REGEX); + } +} +export function instanceOf( + type: any, + value: any, + { path = "", optional = false }: { path?: string; optional?: boolean } = {} +): boolean { + if (!type) return true; // no type was specified + + if (value == null) { + if (optional) return true; + throw `${path} is required`; + } + + switch (type) { + case String: + if (typeof value === "string") return true; + throw `${path} must be a string`; + case Number: + value = Number(value); + if (typeof value === "number" && !isNaN(value)) return true; + throw `${path} must be a number`; + case BigInt: + try { + value = BigInt(value); + if (typeof value === "bigint") return true; + } catch (error) {} + throw `${path} must be a bigint`; + case Boolean: + if (value == "true") value = true; + if (value == "false") value = false; + if (typeof value === "boolean") return true; + throw `${path} must be a boolean`; + case Object: + if (typeof value === "object" && value !== null) return true; + throw `${path} must be a object`; + } + + if (typeof type === "object") { + if (Array.isArray(type)) { + if (!Array.isArray(value)) throw `${path} must be an array`; + if (!type.length) return true; // type array didn't specify any type + + return value.every((val, i) => instanceOf(type[0], val, { path: `${path}[${i}]`, optional })); + } + if (type?.constructor?.name != "Object") { + if (type instanceof Tuple) { + if ( + (type).types.some((x) => { + try { + return instanceOf(x, value, { path, optional }); + } catch (error) { + return false; + } + }) + ) { + return true; + } + throw `${path} must be one of ${type.types}`; + } + if (type instanceof Email) { + if ((type).check()) return true; + throw `${path} is not a valid E-Mail`; + } + if (value instanceof type) return true; + throw `${path} must be an instance of ${type}`; + } + if (typeof value !== "object") throw `${path} must be a object`; + + const diff = Object.keys(value).missing( + Object.keys(type).map((x) => (x.startsWith(OPTIONAL_PREFIX) ? x.slice(OPTIONAL_PREFIX.length) : x)) + ); + + if (diff.length) throw `Unkown key ${diff}`; + + return Object.keys(type).every((key) => { + let newKey = key; + const OPTIONAL = key.startsWith(OPTIONAL_PREFIX); + if (OPTIONAL) newKey = newKey.slice(OPTIONAL_PREFIX.length); + + return instanceOf(type[key], value[newKey], { + path: `${path}.${newKey}`, + optional: OPTIONAL, + }); + }); + } else if (typeof type === "number" || typeof type === "string" || typeof type === "boolean") { + if (value === type) return true; + throw `${path} must be ${value}`; + } else if (typeof type === "bigint") { + if (BigInt(value) === type) return true; + throw `${path} must be ${value}`; + } + + return type == value; +} diff --git a/util/src/util/imports/HTTPError.ts b/util/src/util/imports/HTTPError.ts new file mode 100644 index 000000000..56a7dd553 --- /dev/null +++ b/util/src/util/imports/HTTPError.ts @@ -0,0 +1,5 @@ +export class HTTPError extends Error { + constructor(message: string, public code: number = 400) { + super(message); + } +} \ No newline at end of file diff --git a/util/src/util/imports/index.ts b/util/src/util/imports/index.ts new file mode 100644 index 000000000..4a4448ba8 --- /dev/null +++ b/util/src/util/imports/index.ts @@ -0,0 +1,2 @@ +export * from './Checks'; +export * from './HTTPError'; diff --git a/util/src/util/index.ts b/util/src/util/index.ts index f7a273cb3..cfad53f3b 100644 --- a/util/src/util/index.ts +++ b/util/src/util/index.ts @@ -19,4 +19,6 @@ export * from "./Snowflake"; export * from "./String"; export * from "./Array"; export * from "./TraverseDirectory"; -export * from "./InvisibleCharacters"; \ No newline at end of file +export * from "./InvisibleCharacters"; + +export * from "./imports/index" diff --git a/util/tsconfig.json b/util/tsconfig.json index 0398ce9a7..a5d5ae05f 100644 --- a/util/tsconfig.json +++ b/util/tsconfig.json @@ -4,7 +4,7 @@ /* Visit https://aka.ms/tsconfig.json to read more about this file */ /* Basic Options */ - "incremental": true /* Enable incremental compilation */, + "incremental": false /* Enable incremental compilation */, "target": "ES6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, "lib": ["ES2021"] /* Specify library files to be included in the compilation. */,