From 59d75fd7cb80b308f901aee313370df67e6d74a6 Mon Sep 17 00:00:00 2001 From: JSangaleti Date: Wed, 13 May 2026 15:42:10 -0300 Subject: [PATCH 01/16] Alterato nome do arquivo Dockerfile --- dockerfile => Dockerfile | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename dockerfile => Dockerfile (100%) diff --git a/dockerfile b/Dockerfile similarity index 100% rename from dockerfile rename to Dockerfile From 80261448142a495e97c657352c5e63961343d783 Mon Sep 17 00:00:00 2001 From: JSangaleti Date: Wed, 13 May 2026 17:19:05 -0300 Subject: [PATCH 02/16] README da raiz corrigido MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Com a dockerização completa, foi necessário corrigir o README com as instruções de execução corretas --- README.md | 302 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 227 insertions(+), 75 deletions(-) diff --git a/README.md b/README.md index 06f160a..3199516 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,6 @@ A proposta do sistema é permitir que o usuário, com base em sua localização, ## Sobre -### Objetivo - O backend do LocalHub é responsável por fornecer a infraestrutura da aplicação, incluindo: - gerenciamento de dados dos comércios; @@ -16,90 +14,244 @@ O backend do LocalHub é responsável por fornecer a infraestrutura da aplicaç - integração com banco de dados PostgreSQL; - documentação da API com Swagger. -### Tecnologias utilizadas +A documentação técnica complementar fica em: + +```text +docs/ +├── README.md +├── backend-architecture.md +└── database.md +``` -Este projeto utiliza as seguintes tecnologias: +## Tecnologias utilizadas - **Node.js** - **Express** - **PostgreSQL** - **Swagger** +- **Docker** - **Docker Compose** -- **dotenv** - - -## Como executar (Docker) - -1. Clone o repositório - ```sh - git clone https://github.com/JSangaleti/LocalHub_Back-end.git - cd LocalHub_Back-end - ``` - -2. Suba os serviços (API + Postgres) - ```sh - docker compose up -d --build - ``` - -3. Aplique a modelagem e carga inicial no banco - ```sh - docker compose exec backend npm run db:init - ``` - -4. Acesse - - API: http://localhost:3000 - - Swagger: http://localhost:3000/docs - -## Como executar (Local) - -1. Instale as dependências - ```sh - npm install - ``` - -2. Configure o arquivo `.env` - ```text - PORT=3000 - PROJECT_NAME=localhub - - DB_HOST=localhost - DB_PORT=5432 - DB_USER=postgres - DB_PASSWORD=postgres - DB_NAME=localhubdb - ``` - -3. Suba o banco de dados com Docker Compose - ```sh - docker compose up -d - ``` - -4. Aplique a modelagem e carga inicial no banco - ```sh - npm run db:init - ``` - -5. Inicie o servidor - ```sh - npm run dev - ``` - -## Modelagem do banco de dados - -Os arquivos de modelagem ficam em `src/database`: - -- `schema.sql`: estrutura relacional (`users`, `stores`, `categories`, `posts`), índices, triggers e view `v_feed_posts`; + +## Como executar com Docker + +Este é o fluxo recomendado para executar o backend. + +O `docker-compose.yml` sobe dois serviços: + +- `postgres`: banco de dados PostgreSQL; +- `backend`: aplicação Node.js/Express. + +### 1. Clone o repositório + +```bash +git clone https://github.com/JSangaleti/LocalHub_Back-end.git +cd LocalHub_Back-end +``` + +Se estiver trabalhando durante a sprint, utilize a branch de desenvolvimento: + +```bash +git checkout development +``` + +### 2. Suba a API e o banco + +```bash +docker compose up -d --build +``` + +Esse comando constrói a imagem da aplicação e sobe os containers do backend e do PostgreSQL. + +### 3. Inicialize o banco de dados + +Depois que os containers estiverem rodando, execute: + +```bash +docker compose exec backend npm run db:init +``` + +Esse comando aplica as migrations e executa o seed inicial no banco. + +### 4. Acesse a aplicação + +- API: +- Health check: +- Swagger: + +### 5. Ver logs + +Para acompanhar os logs do backend: + +```bash +docker compose logs -f backend +``` + +Para acompanhar os logs do PostgreSQL: + +```bash +docker compose logs -f postgres +``` + +### 6. Parar os containers + +```bash +docker compose down +``` + +### 7. Resetar o banco local + +Caso seja necessário apagar o volume do PostgreSQL e recriar o banco do zero: + +```bash +docker compose down -v +docker compose up -d --build +docker compose exec backend npm run db:init +``` + +> Atenção: o comando `docker compose down -v` remove os volumes do Docker, apagando os dados locais do banco. + +--- + +## Como executar em modo local + +Use este fluxo apenas se quiser rodar a API diretamente na máquina, fora do container, mantendo somente o PostgreSQL no Docker. + +### 1. Instale as dependências + +```bash +npm install +``` + +### 2. Configure o arquivo `.env` + +Crie ou ajuste o arquivo `.env` na raiz do projeto: + +```env +PORT=3000 +PROJECT_NAME=localhub + +DB_HOST=localhost +DB_PORT=5432 +DB_USER=postgres +DB_PASSWORD=postgres +DB_NAME=localhubdb +``` + +Em modo local, o `DB_HOST` deve ser `localhost`, pois a aplicação está rodando fora do Docker. + +### 3. Suba somente o PostgreSQL + +```bash +docker compose up -d postgres +``` + +Não use `docker compose up -d` neste fluxo, pois esse comando também sobe o container do backend e pode causar conflito com o `npm run dev` usando a mesma porta `3000`. + +### 4. Inicialize o banco + +```bash +npm run db:init +``` + +### 5. Inicie a API em desenvolvimento + +```bash +npm run dev +``` + +Acesse: + +- API: +- Health check: +- Swagger: + +--- + +## Variáveis de ambiente + +No Docker Compose, as variáveis do backend são definidas diretamente no serviço `backend`. + +Dentro do Docker, o backend deve se conectar ao banco usando: + +```env +DB_HOST=postgres +``` + +Isso acontece porque `postgres` é o nome do serviço do banco no `docker-compose.yml`. + +Em execução local, o backend deve usar: + +```env +DB_HOST=localhost +``` + +--- + +## Banco de dados + +Os arquivos de banco ficam em `src/database`: + +- `schema.sql`: estrutura relacional inicial; - `seed.sql`: dados iniciais para ambiente local; - `migrations/*.sql`: migrations versionadas da estrutura do banco; -- `run-sql.js`: executor para aplicar schema/seed usando as variáveis de ambiente do projeto. +- `run-sql.js`: executor para aplicar schema, migrations e seed usando as variáveis de ambiente do projeto. Scripts disponíveis: -- `npm run db:schema`: aplica apenas a modelagem; -- `npm run db:migrate`: aplica apenas as migrations pendentes; -- `npm run db:seed`: aplica apenas dados iniciais; -- `npm run db:init`: aplica migrations + seed. +```bash +npm run db:schema +npm run db:migrate +npm run db:seed +npm run db:init +``` + +| Script | Função | +| -------------------- | ---------------------------- | +| `npm run db:schema` | Aplica o schema | +| `npm run db:migrate` | Executa migrations pendentes | +| `npm run db:seed` | Insere dados iniciais | +| `npm run db:init` | Executa migrations e seed | + +No Docker, execute os scripts dentro do container do backend: + +```bash +docker compose exec backend npm run db:init +``` + +Em modo local, execute diretamente na máquina: + +```bash +npm run db:init +``` + +--- + +## Documentação da API + +Todos os endpoints estão documentados no Swagger: + +```text +http://localhost:3000/docs +``` + +As rotas principais são registradas a partir de `/api`: + +```text +/api/health +/api/auth +/api/users +/api/categories +/api/stores +/api/posts +``` + +--- + +## Documentação técnica + +A documentação técnica do backend fica na pasta `docs/`. -## End-points iniciais implementados +Arquivos principais: -Todos os *end-points* estão documentados no Swagger em `localhost:3000/docs`. \ No newline at end of file +- [`docs/backend-architecture.md`](./docs/backend-architecture.md) +- [`docs/database.md`](./docs/database.md) From 9cb6b5bbe5869e50b6b5963cab5f844e0bb0fe59 Mon Sep 17 00:00:00 2001 From: JSangaleti Date: Wed, 13 May 2026 17:21:22 -0300 Subject: [PATCH 03/16] =?UTF-8?q?Adicionados=20arquivos=20de=20documenta?= =?UTF-8?q?=C3=A7=C3=A3o=20do=20reposit=C3=B3rio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 31 +++ docs/backend-architecture.md | 405 +++++++++++++++++++++++++++++++++++ docs/database.md | 231 ++++++++++++++++++++ src/database/diagram.png | Bin 0 -> 184835 bytes 4 files changed, 667 insertions(+) create mode 100644 docs/README.md create mode 100644 docs/backend-architecture.md create mode 100644 docs/database.md create mode 100644 src/database/diagram.png diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..c0e4f93 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,31 @@ +# Documentação do Backend + +Esta pasta reúne documentos técnicos relacionados ao backend do projeto **LocalHub**. + +## Arquivos + +- [`backend-architecture.md`](./backend-architecture.md): explica a arquitetura geral do backend, incluindo rotas, controllers, configurações, Docker e fluxo das requisições. +- [`database.md`](./database.md): explica a organização dos arquivos relacionados ao banco de dados, migrations, seed e inicialização do banco em ambiente local ou Docker. + +## Objetivo + +O objetivo desta documentação é facilitar o entendimento da estrutura interna do backend, ajudando novos integrantes do projeto a compreenderem como a API está organizada e como suas principais partes se comunicam. + +## Localização no projeto + +A pasta `docs/` deve ficar na raiz do repositório, no mesmo nível de `src/`, `package.json`, `README.md`, `Dockerfile` e `docker-compose.yml`. + +Exemplo: + +```text +LocalHub_Back-end/ +├── docs/ +│ ├── README.md +│ ├── backend-architecture.md +│ └── database.md +├── src/ +├── Dockerfile +├── docker-compose.yml +├── package.json +└── README.md +``` diff --git a/docs/backend-architecture.md b/docs/backend-architecture.md new file mode 100644 index 0000000..785052d --- /dev/null +++ b/docs/backend-architecture.md @@ -0,0 +1,405 @@ +# Arquitetura do Backend + +O backend do **LocalHub** foi desenvolvido com **Node.js**, **Express**, **PostgreSQL**, **Swagger**, **Docker** e **Docker Compose**. + +A aplicação segue uma organização simples em camadas, separando responsabilidades entre configurações, rotas, controllers, middlewares e banco de dados. + +## Estrutura geral + +A estrutura principal do backend está organizada dentro da pasta `src/`: + +```text +src/ +├── config/ +├── controllers/ +├── database/ +├── middlewares/ +├── routes/ +├── app.js +└── server.js +``` + +Além da pasta `src/`, o projeto possui arquivos importantes na raiz: + +```text +Dockerfile +docker-compose.yml +package.json +README.md +docs/ +``` + +--- + +## Execução com Docker + +O backend está dockerizado. + +A raiz do projeto possui um `Dockerfile`, responsável por construir a imagem da aplicação Node.js. + +O `docker-compose.yml` define dois serviços principais: + +- `postgres`: container do banco PostgreSQL; +- `backend`: container da API Node.js/Express. + +Fluxo simplificado: + +```text +docker compose up --build + ↓ +cria/sobe container do PostgreSQL + ↓ +constrói/sobe container do backend + ↓ +API disponível em http://localhost:3000 +``` + +Dentro do Docker, o backend deve acessar o banco pelo nome do serviço: + +```env +DB_HOST=postgres +``` + +Isso é necessário porque, dentro do container do backend, `localhost` aponta para o próprio container da API, e não para o container do banco. + +--- + +## `server.js` + +O arquivo `src/server.js` é o ponto de entrada da aplicação. + +Ele carrega as variáveis de ambiente, importa a aplicação configurada em `app.js` e inicia o servidor na porta definida em `process.env.PORT`. Caso essa variável não exista, a aplicação utiliza a porta `3000`. + +Responsabilidades principais: + +- carregar variáveis de ambiente; +- importar a aplicação Express; +- iniciar o servidor HTTP; +- exibir no terminal as URLs principais da API e do Swagger. + +Fluxo simplificado: + +```text +server.js → carrega app.js → inicia servidor na porta configurada +``` + +--- + +## `app.js` + +O arquivo `src/app.js` é responsável por configurar a aplicação Express. + +Nele são registrados: + +- o Express; +- o CORS; +- o parser de JSON; +- a rota raiz `/`; +- a documentação Swagger em `/docs`; +- as rotas da API em `/api`; +- o middleware global de erro. + +A documentação Swagger é disponibilizada em: + +```text +GET /docs +``` + +As rotas principais da API são registradas a partir de: + +```text +/api +``` + +Assim, uma rota definida como `/users` dentro da pasta `routes` fica acessível como: + +```text +/api/users +``` + +Fluxo simplificado: + +```text +requisição HTTP → app.js → middlewares → /api → routes +``` + +--- + +## Pasta `routes` + +A pasta `src/routes/` contém os arquivos responsáveis por definir os endpoints da API. + +Esses arquivos não devem concentrar regra de negócio. A função principal deles é associar uma URL e um método HTTP a uma função de controller. + +Exemplo geral: + +```js +router.get('/', controller.getAll); +router.post('/', controller.create); +router.get('/:id', controller.getById); +router.put('/:id', controller.update); +router.delete('/:id', controller.remove); +``` + +O arquivo `src/routes/index.js` centraliza os grupos de rotas da aplicação. + +Atualmente, ele registra rotas para: + +- `health`; +- `auth`; +- `posts`; +- `stores`; +- `categories`; +- `users`. + +A partir disso, os endpoints principais ficam organizados assim: + +```text +/api/health +/api/auth +/api/posts +/api/stores +/api/categories +/api/users +``` + +--- + +## Pasta `controllers` + +A pasta `src/controllers/` contém a lógica responsável por processar as requisições recebidas pelas rotas. + +Os controllers recebem os objetos `req` e `res` do Express e são responsáveis por: + +- ler parâmetros da URL; +- ler dados do corpo da requisição; +- validar dados básicos; +- executar consultas no banco; +- retornar respostas HTTP; +- tratar erros esperados. + +Exemplo de responsabilidades de um controller: + +```text +receber requisição → validar dados → consultar banco → retornar resposta +``` + +Exemplos de controllers do projeto: + +```text +auth.controller.js +categories.controller.js +health.controller.js +posts.controller.js +stores.controller.js +users.controller.js +``` + +Cada controller está relacionado a um conjunto de rotas. + +Exemplos: + +```text +users.routes.js → users.controller.js +stores.routes.js → stores.controller.js +posts.routes.js → posts.controller.js +``` + +No estado atual do projeto, os controllers concentram tanto a regra simples da aplicação quanto as consultas SQL. Isso é aceitável para o tamanho atual do backend, mas futuramente o projeto pode evoluir para separar melhor essas responsabilidades em camadas de `services` e `repositories`. + +--- + +## Pasta `config` + +A pasta `src/config/` concentra configurações técnicas utilizadas pela aplicação. + +Atualmente, os principais arquivos são: + +```text +db.js +swagger.js +``` + +--- + +## `config/db.js` + +O arquivo `src/config/db.js` configura a conexão com o banco de dados PostgreSQL. + +Ele utiliza o pacote `pg` e cria um `Pool` de conexões. + +As configurações são lidas a partir das variáveis de ambiente: + +```env +DB_HOST +DB_PORT +DB_USER +DB_PASSWORD +DB_NAME +``` + +Em execução local, normalmente `DB_HOST=localhost`. + +Em execução com Docker Compose, o serviço `backend` deve usar `DB_HOST=postgres`. + +Responsabilidades principais: + +- carregar variáveis de ambiente; +- criar o pool de conexão com PostgreSQL; +- exportar o pool para ser utilizado pelos controllers; +- registrar erro inesperado de conexão. + +Fluxo simplificado: + +```text +controller → pool.query(...) → PostgreSQL +``` + +--- + +## `config/swagger.js` + +O arquivo `src/config/swagger.js` configura a documentação da API com Swagger/OpenAPI. + +Ele define: + +- título da API; +- versão; +- descrição; +- servidor local; +- tags dos grupos de endpoints; +- schemas reutilizáveis; +- responses reutilizáveis; +- arquivos de rotas que serão lidos pelo Swagger. + +A documentação é montada a partir dos comentários `@swagger` presentes nos arquivos da pasta `routes`. + +O Swagger fica disponível em: + +```text +http://localhost:3000/docs +``` + +--- + +## Pasta `middlewares` + +A pasta `src/middlewares/` contém funções intermediárias utilizadas no fluxo de requisição. + +Atualmente, o principal middleware é: + +```text +error-handler.js +``` + +Esse middleware é registrado no final do `app.js`, depois das rotas. + +A função dele é centralizar o tratamento de erros não tratados diretamente pelos controllers. + +Fluxo simplificado: + +```text +requisição → rota → controller → erro → error-handler +``` + +--- + +## Pasta `database` + +A pasta `src/database/` contém arquivos relacionados à estrutura e inicialização do banco de dados. + +Ela possui arquivos como: + +```text +schema.sql +seed.sql +run-sql.js +migrations/ +``` + +Esses arquivos são usados para criar tabelas, aplicar migrations e inserir dados iniciais no banco. + +--- + +## Fluxo completo de uma requisição + +O fluxo geral de uma requisição no backend do LocalHub funciona assim: + +```text +Cliente + ↓ +Requisição HTTP + ↓ +app.js + ↓ +routes/index.js + ↓ +arquivo de rota específico + ↓ +controller correspondente + ↓ +config/db.js + ↓ +PostgreSQL + ↓ +controller monta a resposta + ↓ +cliente recebe JSON +``` + +--- + +## Exemplo prático: listagem de posts + +Quando o cliente faz a seguinte requisição: + +```text +GET /api/posts +``` + +O fluxo interno é: + +```text +app.js + ↓ +routes/index.js + ↓ +posts.routes.js + ↓ +posts.controller.js + ↓ +db.js + ↓ +PostgreSQL +``` + +O controller consulta os dados dos posts, lojas e categorias no banco e retorna uma resposta JSON. + +--- + +## Responsabilidade de cada camada + +| Camada | Responsabilidade | +| -------------------- | ------------------------------------------------------ | +| `Dockerfile` | Define como construir a imagem do backend | +| `docker-compose.yml` | Sobe backend e PostgreSQL juntos | +| `server.js` | Iniciar o servidor | +| `app.js` | Configurar Express, middlewares, Swagger e rotas | +| `routes/` | Definir endpoints da API | +| `controllers/` | Processar requisições e respostas | +| `config/` | Centralizar configurações técnicas | +| `database/` | Organizar scripts de banco de dados | +| `middlewares/` | Executar funções intermediárias no fluxo da requisição | + +--- + +## Possíveis evoluções futuras + +Caso o backend cresça, pode ser interessante adicionar novas camadas: + +- `services/`: para concentrar regras de negócio; +- `repositories/`: para concentrar acesso ao banco de dados; +- `validators/`: para centralizar validações de entrada; +- `tests/`: para testes automatizados da API. + +No estado atual, a arquitetura simples é suficiente para o contexto acadêmico do projeto e para o tamanho atual da aplicação. diff --git a/docs/database.md b/docs/database.md new file mode 100644 index 0000000..3a026a3 --- /dev/null +++ b/docs/database.md @@ -0,0 +1,231 @@ +# Banco de Dados + +O backend do LocalHub utiliza **PostgreSQL** como banco de dados relacional. + +A configuração de conexão fica no arquivo: + +```text +src/config/db.js +``` + +Os arquivos relacionados à estrutura e inicialização do banco ficam em: + +```text +src/database/ +``` + +--- + +## Estrutura da pasta `database` + +A pasta `src/database/` contém os arquivos responsáveis por criar, migrar e popular o banco de dados. + +Estrutura geral: + +```text +src/database/ +├── migrations/ +├── run-sql.js +├── schema.sql +└── seed.sql +``` + +--- + +## `migrations/` + +A pasta `migrations/` armazena scripts SQL versionados. + +As migrations servem para aplicar alterações incrementais no banco de dados, mantendo um histórico das mudanças estruturais. + +Exemplo de nomenclatura: + +```text +001_initial_schema.sql +002_add_location_to_stores.sql +003_create_favorites_table.sql +``` + +Esse padrão ajuda a organizar a evolução do banco durante o desenvolvimento. + +--- + +## `seed.sql` + +O arquivo `seed.sql` é utilizado para inserir dados iniciais no banco. + +Esses dados ajudam nos testes manuais, na demonstração do sistema e na integração com o front-end. + +Exemplos de dados que podem aparecer no seed: + +- usuários de teste; +- categorias comerciais; +- lojas/comércios; +- publicações/posts. + +--- + +## `run-sql.js` + +O arquivo `run-sql.js` é um script Node.js usado para executar arquivos SQL no banco de dados. + +Ele permite rodar comandos para: + +- aplicar schema; +- executar migrations; +- aplicar seed; +- executar tudo de uma vez. + +O script também cria uma tabela chamada `schema_migrations`, usada para registrar quais migrations já foram aplicadas. + +Isso evita que a mesma migration seja executada repetidamente. + +--- + +## Scripts disponíveis + +Os scripts relacionados ao banco ficam no `package.json`. + +```bash +npm run db:schema +npm run db:migrate +npm run db:seed +npm run db:init +``` + +| Script | Função | +| -------------------- | ---------------------------- | +| `npm run db:schema` | Aplica o schema | +| `npm run db:migrate` | Executa migrations pendentes | +| `npm run db:seed` | Insere dados iniciais | +| `npm run db:init` | Executa migrations e seed | + +--- + +## Inicialização do banco com Docker + +Como o backend está dockerizado, o fluxo recomendado é executar o script de banco dentro do container do backend. + +Depois de subir os serviços: + +```bash +docker compose up -d --build +``` + +execute: + +```bash +docker compose exec backend npm run db:init +``` + +Esse comando prepara o banco para uso pela API. + +Fluxo geral: + +```text +docker compose up --build + ↓ +PostgreSQL sobe no container postgres + ↓ +backend sobe no container backend + ↓ +docker compose exec backend npm run db:init + ↓ +migrations são aplicadas + ↓ +seed é executado + ↓ +API pode consultar os dados +``` + +--- + +## Inicialização do banco em modo local + +Se a API estiver rodando fora do Docker com `npm run dev`, suba apenas o serviço do PostgreSQL: + +```bash +docker compose up -d postgres +``` + +Depois execute: + +```bash +npm run db:init +``` + +Nesse modo, o `.env` deve usar: + +```env +DB_HOST=localhost +``` + +--- + +## Diferença entre `localhost` e `postgres` + +Em modo local: + +```env +DB_HOST=localhost +``` + +Em modo Docker: + +```env +DB_HOST=postgres +``` + +Dentro de um container, `localhost` aponta para o próprio container. Por isso, quando o backend roda em container, ele deve acessar o banco pelo nome do serviço definido no `docker-compose.yml`. + +--- + +## Relação com os controllers + +Os controllers acessam o banco por meio do pool exportado em: + +```text +src/config/db.js +``` + +O fluxo é: + +```text +controller → pool.query(...) → PostgreSQL +``` + +Exemplo conceitual: + +```js +const { rows } = await pool.query('SELECT * FROM users'); +``` + +--- + +## Cuidados importantes + +Antes de testar endpoints que dependem do banco, é necessário garantir que as migrations foram aplicadas. + +Endpoints como usuários, categorias, lojas e posts dependem das tabelas criadas corretamente. + +Caso o banco não esteja inicializado, podem ocorrer erros como: + +```text +relation "users" does not exist +``` + +Esse erro significa que a API tentou consultar uma tabela que ainda não existe no banco conectado. + +--- + +## Reset do banco local + +Para apagar o volume do PostgreSQL e recriar o banco do zero: + +```bash +docker compose down -v +docker compose up -d --build +docker compose exec backend npm run db:init +``` + +> Atenção: `docker compose down -v` remove os dados locais armazenados no volume do PostgreSQL. diff --git a/src/database/diagram.png b/src/database/diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..af62750965f30a7299b8f8ae3960795f0d87e74a GIT binary patch literal 184835 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 dSF0KCwC-aZ(QZ zT&o-6q|c%hzp2M@5TOKh^9=<3vS{Mb!9fyFBDqy*wW)1XN#-8Wl^VyD&u*K)1(cS| z*}CsSGbyb;&uAfFmw2qce^V&8|KSNX8=p&KD?1k=#x02|j*Pp>Mt6K4^niUi+lEM5TMIJWu z8QvKCOU_T%d+iWvh@}fBx~2#CAB{w^ za+Hj&3mlOgNUQ6L1hbb64w^*BxFn-Ngt7^Oq?;lLG}NaYl#^sBk&H~#B_YMOB|HL| z?8KG1H6TWIivNFt{=xlfkZ?kOus1U9rtdW&ej(rly+><2J`|tgG@oBsHyETDL+?RU zn#`ojKh{;R-EIViZWWH@1mZ8cw~ivGZYOUd)H0m>6ive1s8X`m>1IG63iv83%vLf6Aa3Pl;|+7dYP15@88{M zPqr8SFVx@q{rKhX`u~vrPIx7r(%%&760k9~{U=7K)ise@(jGdW$489I<{a`H3Zk)~ zTv^TPv?xN6T^d5`nK~XfLicd8lxXvG9b0H_c2MHT3lr+2+4dOg-%emcy#guuHnOQA z{y_7Pf{H|>hR5PshoVMxZ7b#C=sjC2{p#T(iFi)aZbx1bSf5t$zPzk7gNIcsdb#TL ze*V*jbVdb7-)CG^rz|Bha)uz;JdTf1g?3RaY@W?qB)ZDzAry{_<1xOUA;?Hl*6v=t z#Imw$oIIjtn55VT$Ol;MV2L)XP$JIpz*Tw~@_m6L7v^1+l#}csqB%xYb25GUw_H8{ zFgxW5c<)Bqi~M86SuvU5H+fZ)=a@3y)?F$5C_c?8Qjfkd7JEHP$({3i^nB6LBuSXh z_c#B;0<0mqzUb$zDEm!)@-Kyq8?suv?|&eClhrT-8_J;VSR@)2qp8K=$0Z7uHeFb) z84e38{8fgdc^3Txff`fNJHFF-s4FG!Wf99;RaVX!U+*(Y%}OPt=PBvu73`$F<-aPU z&^}jk%ayP-P0DwB(G>f>eHyfS+hFz(yp_jV0?G2sFgXr%LEQgC){Fi}g&RL%GtXlw z{HGQAt)a;?6TjoF&#O1I(RCg|V>*>9uvfKsT7?WF{&>MVzr4sZ{)Y3ML_CONAgw0? z)M-{F=|S;CK~v}=^XubXbBQq*NY5C3k_v0)TH$!)?ij%fjj?;^4gJ^77bh(o+6WnF z;dJA}Kf78p8Wv`YO+XjWaoWHN+*wGcDsUaNf%K;ED~I*H&Zy94H8qz+#F*Vix<6g(w0z zUhm0OFj3Z z;%e>qY6C4|V%9D6c-;;w$Zu6?v-zwnsYh^DU0{huU7oRcGqtka_$%xFLtx#;-RaL@<%ZQ7&2;RVBLSf85Bt4or!eQ> z{cQZs9#jy4StsmQmW+*=iR-H`mGOPC0&1&=5?Z2t}+U{;SGFw0P$G1QI9%gv>V^2?Cds$d`8oRC3Ix8); z5^XeW9Y@>zc_6JvnYz&|L4%bQ^OSRglaFL1h~u$^paXteLF-5McTXfnS&yIUtZlg+ z_V`J(sMN>6HLPBZ`l-8Jb~~B69!~KcB#o&G3KO$A2Wi-}yIvNCI zLb!gu(y111eY{;(oe`@4T7RBMn!UVUEz^5F5Pj~MmU}I(?>$ch9g6F18Cbvz$Y25iQx1>kl!)P|b zj{Jc-(_0MLZfb`b6R|0~9$F*D^$rYYK%DT2OP>F!{8tl$$4i`o4LPfDV2!Y^9Cd9&oB=;&d&>miHz>{@70hMSGPbdjJRR}(Ef z%ojeAgIT_QvqgAqKWS>)?4x_m3)b@%bo|yOFJr#-?y2*s-R~5A!|iQrSae;?RXELi z>;GhDcz#eb^=itD&W?Us<~S|g^!i*H&PYJ=vtO@FwX)M@I{iDiy_(r+n(1?-wEeQ$ znNT04rlV;naQD=W^ql7FBXj75#3$#Z824^GI^}h#kx-UGtAS|4U`5@0R1dY?T&2yc zsrX&*7e-&naZc(!{=ybGda51 zWl^jgP>PzfQz^PRvU$9w#VQtdHzU|U{2J3vAl#8O4&Q*R zZl34Bflp?3Uy;MIJj`AS7CJ~r*d+) zQcd`Y)00wo7v|rkzeY1|DeUWmlYKJAkt1J>f)+s>I$%cLhACD=no|{blJ_-iW@+}* zr!1mr<O0&A3Mac4^Qy0k}xf=X#HW9?HtFk4k(&9KF2=PavnkI0BUs1oG!3C(7D zVsgw4kF?PbQro4J>~X_sA?|b(pxP2@f&*WlDJ-XQs{wE2P7 zxF08IEj}Pc3TemSH)ETav`66~7uPF#12kUBS-Eez)C6_ZL14vfQR z7pr4je)k@hd&oAA_yUzNpI-a%+a!ue{-AJ3$_-}L7OxQq^pid0^Za&v$+9|lX z*E1M)0=`GFN>*^lf=ntkY4aqh05^HO&Fd*wmQWifyKmcSUc7=?MK*mt-&u({yErO8 z1>U<1lJ`Rh&3CUeT|+1HN||Nnbz)+4lZ4=ouqE^hTIJZ{x;CuUfPyo8+Phzod$|-i zF7RJE(8!zhjYhOiG@TjRd0VQMKMwum#Uy{kyH+aR*&0tjnPlq`uxV&j$z6se?zg^f_Te{ z*v#8SA}ip?b{*rgYMIcpDSW53JR8N6fP}8K?Wg)?l)TH?Y+xnq{eA<7jDkj7{GqAk zQh5`l_@A#@jDSjzNbjCV2@pA1hiQEdTFb7d`B&B5@uAJhbjjSSc`eW*0i;>NROwh` zQs*?{+{=w^Lr*de%a$Lr(vOjjMqUmGiui$>LH6i^Gro3UF@A?EZ_J@dz&1n!Oiww{ z8M1HM>bY|%<}sROq6Iz!=a0p8P)f@?70`Ybp?H^ZIesUZkWu(h?A@pKR`~PnMg60! zhrrR>4RR9GBNBa>@5=5yd3yB3pTUHsq3^RaGzIc>(;K~7x2B*KxD?*1+PNV8eFG<5 zf9?ssKl0DPTRbC}r+;hViK}Y?*E}F|!=NxgBj+S8^|?vp9qa|Y3h-;%qpfNr_r`t> z>*dK{hwXP!$_-Bj-$@_;G-bl|J%s-x{^$A1%iPB-g9El-MUVSP3^4voe?KwPUwR4% z!i^2|mKgTYm-J8zJpmyYLbXnxe(D1+2O0YXw|HG9CY6zwfW+6&`kOxIwRVDjm#)e+ z3u<>qhmVSB7f!;S!{V&O>3dIozwu&^?@tMVj=SP){IA``KIE*;ReUsj-JJ`AA8(Dz zn?Jq#7x|y>Q#t&1$>o4KCu^zY%O?;7E@tK$a}%BN_EU$#y`4J3AJAgbFQ*giE3uoz6F&91v&( zhBUTtQ;o^xq0_0~h8PJa8o~;v%noH#-)_@!=C4BRRqR z5Q_;EE@E8Ut=nixR{x`=QDr59y**Xj8%^uwX3wW;r0pWwZhiYt87KV?K1GAh0H$4@c;4#Xw>GVOk^ZA{iP5e5 zI84KB*K8w)-k>j`$hJh;HR(HAbyFcbt`%?~0H_5J&4gf0=(8#je4vCq6ONVGQ25km ziD{$QLxwBjl5)!-;-6ml*3tJV;Ry!wz7SIe^Grc8EVohsJU#@r060jF*bG()pWJ-s z#;cNIsG_=f71GSIJVY;`V9F4MuB94z_>$$el1QFoXD^d5k~G{M;=-K_P0B3aZejv$ zFPg0%*Vw46st9RinP2PI;vJX8JN59P_iyC zPa)QAOyH)Ut;Y%4mQ0$(sr6&Zo1Qt-FJ5RCS@{VIh~&PmZ*7ukIa95qMUelu0y~ps zJv(K(uw6*D{EbzloWvo|hEBIqWjfKfx~qF>YsLExmPdObofo~~ zu?vFBiec6cJ>M(fq{<2CengdRW>sd zlgNl0pY^Rb7PKE_6PPH>G7ev}wQ3ms%{)w{^}l*UEuar)lGQ(NA!4fo+KVrva$=TP z1yj+)CJQ4_D2>7phiKhpPffTc{ zH-C`HM$H^gqXGWNiz_P_hD@!!lmbhZQB63A-}`MJ))yedY|mGeIc7cLipb%+@nx6* z#sne*(llEyh9p8M6Oz@`7}5!5rDA2|)*A_xy~u%~NI{$lYOL6V>0StS(xe#NkQF2g zn^@pWZ30Mgpg^jD~=YQAPXY9=I}f8Lbx)GF|ehG+9G`;s>W za%Cf3s7DXRZA=ct1iS0{yVP;CNb|?_yHqT35#h=N2vdm8q;%uJ4j!v&lduu(lauwZCR`F5TTCR#1&)ooHlKmD-+tJe9Cgr zMYrD3>rV*V$xNUrRTiTqTS-lz2Og|Z8iy;5a3VeZi?ypw;yPw!uz>lr2)9hluzh7G1p)vgXIHt?pOd?y;;~V@P5Zt1^+r}@| zmQQ2jUjVc!=N@M=wQP0Mr-2ohNoA6yOuQ8FZIU^}yOvik!zK z9U1Fm4AXQ|Al>XpPi1NWU+LQ>5g1LPHaeuUwoDC(iA@&s&CC*a<#_>0TT9 zbxV)R=Mw$sgrU2%fpLHL4~8+`VomO+uJwG3MYU?n&Tn(9^Lcj0p=Gj}-q^O>P#zEV zJ=tl!WQN4~R7eWXTmjW?jj8@QHe!N1bFGZ3IohMPe~TC=D|N?ZF$wG{V2e>%R@R+u zh1>-UeFDSe6g_THRzZjx=xQ$`5+$7Brk3zj_IiJbQBu#A?Ngih)UDW3d`U<|lA%4U zSj>?aNa6j@uHlXLc3?EzButM;uOA>sE^EB)2-{5Z-AAB{Hv&~tIO6vFZt})pD2`?Y zeR2MAP28D$FI+Er$r=nZU(9RC>2Y1H62H&h?4KrHi|f(JCa=#<-|g-aWWO!M2{*>r z;bkzP>u}@;8m$Ig6|S7mFR(S>&z(2nYV0^p4;7P%WEuS?Hn+XJLo`KW=?k+SZiq7^ z<0_!MpgwQFh}okxHDN}wDZ@*ZboJrcl$^8(#r5lf$Sfar7{t+%Vxs*eVzz8=Xd=3) z1p}S{ei)@Gg5@cO^{9L7~rz&dpPpEjfC@7dHuwB+21vyl?2 z0&Uw$LFm2hnd8xJqXg_j^MQUiw?c&#p8yeIeqH@@D*P?JmC|g#!_hhan>wESCaR3v zV*x#+^=;0JB7PL*nv4> zCO^&ux!LXJsK?z=W2ig_1mFK~;x(|AztYyDy33`x``UjYq~oLTtKF^B#b2r0kidN{ zG8h5gxk}pd_BuhlR#KLO!h7{qV`a$fH=z(0CgdBk+4aOc%-?; zbY1y7S(GxDO$uCaR7SgD)$-6M(Nbg404<(E(0tO6#LQ!4OTZ>>lv^3`HAW2EkGku7 zR#JMtI@VBavI4kI(ga#@Md0rP+2Cn~8!rsL ze8ZuBy}BKrGu=BZP@^O%0P&|j$~;lmi^EP?gmgv)9-Fv{CIyO+JY!&timSHr=F5m_ z;FWc8WT-Xr=_bU8DJxD)m?*JR@KdciPGDW#@55DIoTt<{IR(DA8mBir18qM4lJC;` zFUwD`mtCLhRf2!FshM*OyWJYt&0Y0OC>sw``D^0Y_1)K5TJ-@>YYGa!N9u>&yZsNf zLk_z?%>P5O4}NpMZ~EuC0pF_EC_`V~wL?m)w@Vw5TEod|wtDB`&tS9cEb}P8t3?Q~ zIgI%J*i7|RNmt4)Y`&|?wcvQBFJsX+mHP;K6D8{e$m*-!^>8rAR?SO^p@AzG7FLBN%OLfT)# z@Ir%_5YDaCbcI5W?6$rn*FT9o_BpHOPhz5z1!P3HbRSY0)`b?EWIZJiqDuAR&I*R# z#X%Lq30OYO9=@O@T{Cu|!ahj=56Nnt5*!%$<9W46S6Hhv9_tA^cs z{2@~V&1HtO^vR#bomO^BgBMGl(@&S_D)+1~->+icio&u9$v?y6?OEAZT2y#8) zT%ORI`%;C}(c2xc-=BPHk5eA;6zerK6(=5!w8qIaR?|)t9P*ad;r7pV z>%)(QUpIgfm&dUrX80&t^U8}GQgF14L2%Z@lE#!n|JQXk;v(U6*swk-ofP!a+Hl2-BncFjeT3XZN))W9QONtk@_mS?0 zKk#-Ye%;W5ZV^@Dvb1z&{fbr2EnK&pbf{lRW?6e?HirO#NuGT`NLqwv`4n54@UGQM ze5+jF@Ibrxr_f{?S^G^v41=aF7cNX9w*g-5?cmb5jFO%)L+>zQXtI)6dgm|C{{HLZ zza{XEwVTm{J*dY-E`!3gSt%9btY#xP;SYExcp0|iZPKW*64&y$dcVdMhthtFN>RY$ z54~m^eUS8OgNe|Wcw4I&{mrc@$ocYL1{^Z_<6rECYeK7#QGbf$*jiGJ{dst=kNYPS zc5a~kk$?G*=uFNUe;`Cbk8pfwP_eyNFt~*7b%^1+afaa6P7M;|K&Zg`+_Ix?=@M{q zozGD$12{bi(0;` zh%5Ous-I&D(>0zpErMdwavr58rUlF0ZoCa7S85DvOb)-aP+QP`-9xg&+^5aOM~( z590~;MoD_s{ z&C=2sIJQr&o*&~nu>k5?4967>SNBG}dRDzn22w(^f|dF@sCRDFfO7N*N<2n0jc{7$ zb#fxMq3gVLlYf@=6nn7Omfl9QWdB@3oo|cP*`jbktDO1)Z%+FA+}dh+AM;1nWN+J`C(+|nCR(Nivz73)k}WO?ObUsPKAY{Hvt@ z>9?4O8rQSIZ=mq>yd4;@J<$lN5j0bb#sU30Hn$S`puk=n%OU7vaG2hAAh$9@mu68G z4AX%?kzGG({H+Lbr18@jms6%OO9Pn>=Mb92{pjzLD48$r?WkcpOae-w`WSFw81?7G z-SfG?GOl+?Z(rV1WIQKw+`?;3dvkJ-h6OD0jo^uIVv1>j{CVWWI*z5S@er*L7^rqq zjHgMRV5DThdCQK|3vwHGGQJf)C^zB^O+M)mn5G-IF&3sX=B@XsZbjJ^0u z{yU~2;K+M(wDB$UanN12ACV`YPd~ys0HueQn*O=?7jY!$?1?)y0SLEoaAM>S zwe~I;AP4R@BfDr}J4;xn97`@}hJxqIDo;AB z6ijwN(e6lunZ?L}N3=fw`~wth5|0IN9H85tzR`@UL@ z@nQ&kYb#bw3%~7OU7nizwqC>(6#v{{b6DqPkOJn`SPcZGkm~-4`FuFS$DuPjt9i$O<@4+;H#`5ij`V7+Tyv+|w`2G^$Q0S`3+Ovba@gVDAheuG<9~A7H2LPh47`S93GdSD)kV@4SR*}=<0c?5 z;l>4DKnarM9M?6Hq+j~l+Sbh*#EFtVKI3&wd^}SKkCo*ueNXMDE`NJ&zGtDpx#SGD zZ}9)!{G}k6?)#7t@T5dOkj-j)S^Y9Hzzx|lj8OOOxof)ge?L4A7x-HHwtI728rArE z3^0G^>hxCess#ZQnK67hjnK7!9+fKv2p4lbw%_o!c55W>ewEvMjtH@oe!@BUw5{~f z4wp^zX%tBa{Gt+n=an*aZlE8*1*dx6#F1&JO@&!D11U{+#0tIFZ(G5 z3!dTR``%YM@B$)yKN6c>9YJdnnKdw4z|(tjpnNuuhODifoxOlh|Ao~M!R@58boElM z;U`M|9Vg7waaAt_%*k%{D3J7YogdSEO@IWO@!z#CMh1i4mj$58W@(8xqV3@N7-T@_ zzGE)mG#*|8>oh{1KFlK(!+GiVD^u^i$!SBBNLG>=c(ATp0kwy3BzWNB!a*} z=f$3;LzmO{ai%XXPk!4$h@71sMmR}NAQj8xaqJRRiYXso9KK9TwmW<4;aqr<-vr#$ z`!>mrH9pR8i60D9>|7p&fb|n3@p>?>vn^(tuQ|&1INrOLYVlYKI7QIT!@{oz^=Q?+ zgR+%w{?C{p@PKgmA#^$OG2+7*2tVxKQp8qrjK)n*L(Xu*B>d_dqn*}e#?0EpGlok? z+uIo;9-Qv4*i}@)1k#b>pE{JfZLFdQy&?RAs<6idCg)_H-$vG-@HBc7*$_}id|<9i z_3w9&OPeMRuUBTfA3IGftDjb+*wJ?DN=jSH)@+%`lcwcsYddTcB_>T)!vy{PQg)2i zDGfh$l>-BAss#e}1h|XA_YFJ7fgyWeEFYDY`%D z5`R~*S|dP*q{8wnFAd+Kzddejw3FlF!9tii6_WRj0)YTW+~0q1z*NQInaHp#1bsj8 z_!h1QHL!R5O3SsIdR&&)dZ^K4#Id^82!yJ>*1|7++}Jen2ytt_-0W)eFfx)LS-=fd zE+x7>l}3?;LV+4{@pRlhBE^jt?12yiTKBg#Akx#+-2GiGZszh10&35PJv@cdlBIC9 zKqyq*9SBn8*e5N?-xOcG!vL3LZ(ngjb?FH;XMY~u>Z4AtI4rbOoOX@C36+x*PAebX zTR23l;M2YpEc1gfGIAgr|Av#@sz1CVc%s#lcGstHZXK&r452ZIEjAlkpq6b$2X*8MBX^{!Fve6t=w}wrmCfIie#Uh1MR+{klB%8?^ za_`+?*>cw(NcuFvC0>9JJ+9u4hSe^gv@=O;57rl(_js>j%eNfF+ z#D|Bq-VcB_Mr$!b$~G_fwjVieZuqDrxtu_0x-WPVCLN*EWX0%SB^IBU5<1SVs3?pS zFkQ-h)R$2ZFdd4TzWX96F_`4lIg5PCCnm5}L`8S7{5VC4H?m~8g2bXnw?7#IKo(0h z$4S$JH6ZrhaiYyAsn-rB2arT##hN|(lfCssPyq~Gn3h#8k+wdTKhaHt7Zh&%Wn=m8 z#RmYlx6B#2w!-+eKDfh{Bd!OqGmnaQMc_3=SY`#Xts9V~v`A#Beumt?fLF08Kb-!! z#1>mNbsD-`UIw6v)I}*T2)64K)u#v3QnQU4+ev|y5L7FP*w?2TEo0l3T*ZZc9L3^3 zC?`lTM?|cQp$u!$G(u+eHaHqmmvAFqkkMEr+718J{;}jPZc_T@Es$sf`^YD}##X;5 zY{&6_8a0{nWpxNt9{GcG#Z5s_?E*TcDdOTYd`Cf$qB*~2aS=;4{DqR8YE~&pxL&Bta0)(O?nZitqe78V;xg0f_+k`fK9oG^DSg?tAebJmF2C<@Zyq*j~<yoB*c`|t3@67FkE;_^cV8piap4pIjGjHijR|nLkv5j* zh-4<@jl*|}(6opz>@;PxhwC<~5dOaJwv3Fn+A?L7T{~qMuD$H{$O*ZTP1x?IFNE0h z|ImBA00{}nkr&<#h^r1`Y%mS`1blT~=mXUO1&WYi7!@^_BQr55dKgOT#Bg@sz6VTQ z`>SC2s&j^-9YC;-vc}DP6|abhh4Mt?#a%hRhlLcshUTNr&P1W-E0AIbkHxnN^LlUP zqjwJsF_G9N;_Dze*+wuApxxe6hO{K@_Th6y9hV!71iO0)Q* zNZGoA&Jkzorm?~mb92s=F$u@9B1qm3yqN%0Cvl_uYeobo=Dl_9+ znyStxFB2U~?noLifN@AAaH6wR=9V69BSj;q$jA z<0FO334(ILXc>|8u7LW}y09<6@DO=9J_y$Y{5#7+n9!b*t~xs>cb|psx#!{LgoQZ# zp|lJlf~{IeTYga+Tv}HM7@-};`)skrC0f&ydGub_`qTYkiAIaP`d*M4K_;8xZcE8+ znXr-vse-}xeLtfQ$}xHN(9gqv9tR82KL~=z?+Pp}8dRJE#Dh{fISP<(-z{Z76hjG> zqeB8(K9kMErR$F^aH&p_f4CltaCiCTnZMZtHhqWtr*+Xn#mAhqU&kgGp~F&Aw0XK2A zj~~p7m56Y~AH8*+p*$sE(L{xh0?RlHP&O1_choO^=n+IaeBjpw{r?)vhvF3Da?)l7d<$bFx$NC?*pFJK7us_zHpbEVB7o@9Y>8X+;TPkzBsf*|F$Hk%~ zRAT2(nCy7O52I6dWVe6IvjA*uA zAh85bpu}0y?_I3#&`!br(Nnc8b-G$kEZIoGpx#e6swBlMfnfC7I_|&g3|R=5K%8ry zvHIV@O?Fzb(dApds(YJ+_oKjN!Vz1r(zRgRK+8nkJ@Edd7|Y%f$WmccJ=mkN#f$Zf z@#{mYW7OW+8}IH7cF{2~fF#TUW|VL_0_^M#%Aw*JD;HZG5kn;C8CQ3yaFsVfWk zMCv=dNzWsf%ToE(`on87Ixf}%CtgSpuUH5du#TU`Tp@^4=e}uzXDs%4T{En)O#lQh z4%lQ6I8fyX23?Z+94ZWUOSG_wd!Hq}tan`kUdP+)abjE;davumu>2lOI`z++OBT-| z6xgpBt^-N8=4fCWQ<#6@k(mB$vC*-pyb==XM0eGlafAA7>c&Vu5h6*}V=}f++(gZzvz$s7knUlYT)!z_fQJ zrK3!NdElfye=;yHSPPxB&(ijRv;DDB|ASFtN4LAWj-rTwSKQ_VoyPRaAXl0{X7zwD z2pLB_PGyqdd($N$jl}J62dhJ%i?}wR+#!eE>r{+4`HUTS%pqM~w_{4HLuuphL!ttH zVQJ9hUH^eOeWxxG?Pccs$)KjVkbK7!a48BBk(D2b+Xm>*Jv1d@5*LK8-9_Nn zZ}~&!RFH6aCe?;Pq1>3Fcr2pm6fO~C|7$_2PAXZ9mQhn8W3>KR8oKd&n6) zeG0gJF8lPc_Qtqq;odg%p+5wDRLEkrk_XMB2vI)(w+)K&Y_oI1t%%GTe_!E z!1=aPm>4p1=+DjYe?wjBZ2D`+ioE@}@SE=P<&i!`bkdX^Va4>-Mf#oB1Y2ipDH+G< zBn%maK?AqD<9jtv6h#H9+nxLYzl4LIaJQ3lLdxafsMgSh`+V}L+?)k5QL27l^SfP; zt};6-TfrE=21g6(8G0SBMI86j7g|=l!2l&}V!qlqhrT})R{{|bMABhS$%5v6Fu-LW zXvD}7SVSs6!az$C3B+C8KU}=Ka673(L`CLQ#~to@WLmgy#)wtOf}}QqIT^LMJpZR1 zk)ri}rBjSI?{y@$W3fak`J_dp>n>W|cU8EAi)^!f9>wAnwOgP6+)(iw|9v>mWwb%T z#d^6%l+EHDm%=V2R}FdPG5vx+{$m7q8JCx1~whcco%vob(G!sOY`LCa$jX~Y*bqp8I z-r6qyP$2#&WmX1GS*-aCi|m>|_y7AJ=9v4}kk@~-7s?|VkF4|)yfKAD<=n=%|K0Nb zI*n;^UWCallXCG-XdC?R>HiuU1{>4VQ~RFL)k@>x;Q_DBKfw+CA3k#5(#B@(@`t6g zK*1Mh6W$+8W8X7m7J?@k6DcOdB+xwc4VP3TVH+{t&SwMdg%d{Yn9Y(XcSWdt#I*^H~9=d*P1hB4=%&G1$;%Ehuy-ekjY zCNQ5CwSFy=$yvZ`wNBPfxkhg?EyJ|0Y~}^TAFxnq`eyw6$G}J26k%BAl<9-tea_By z7FsiUL&G8DZaMTH>Vu(fn~NBy`tD!9o0K_zTg6MEA8+PbP{DZ|M1-8i*^S>ypz?bu zst2!VOF4jG!VKBdTX@EN;Jj0X!l%xH0Pr;mt1z_T%`I-w9Bgr*zQPx`|2{qNf9Sd$ z$4g;AsMyB9zn7iS^BlM(jOMq3HEMZpE$rV@>T*NVH;YzSucO=z)usKg@*EEwP9Woo zC&=o{!U3MC2fRA`Sa2ZNc|Mjc#RLx?jJkJ4=@zSuRUgVAeHuv_j_c$2&wmX&AqI%m;5Lt#H zkBKX^C+44!TF8c7yPa3KU|GCywjfN595%M^hz%QN%6tdq_Pg^Pm*eR1!>cd=)cyQg zw!glgUy3D%a60QMvmK{`_KYvwS;<+w>GIxc=?euj%L!MCI_Q0s6>FBfS?a4qj_AX% zb@TnaT0vv?3ir@qD;MTWaDQi7jM{O3iL6a??GMb%`M~VTXA0q}cq(1b>hb!S%~irHx~w zR~4Ib9D|A|tt7!B zP8X&s-koJgJtT^uy%pB?AzFg2###_e2sx;DR$`3w-+ zmNi7WswETvu?VFRiv{T$@y1xLwG^nQgQK5gzShXpN<*<9I2wpE{QN0tS=e_lV&P9^ zv5Ju(4K)1& z%#egJ{j#0L%*sFT52c0z2*lBE4RthFfs8;$Z0wFbi zG7};N4rxNKRF@Sj3Rz6AT((isXwXG6XdE&fe1iU~7%{h@r7)E7joB;?%5LzBf*GR$ zMm!jRSVnKu`H$+9>}en~t-Ea7>LCWb_08J?e_WL6n}6;X1Ge2pl1riAqMkV(1f=zv zv&yqsT%^X?^&uRW2A8vQ1Z~*C2i{w0k|iP@3@mwM^Gy43dR0fs5Ep4k+W#O$DqnDQ zQZ};iILhiGlN>q4<~A{-Cs4c2==wE@rvHOBAGsz9=a|Kjy%=A<^3cT@=h`@pooxW8 zSK>4dS+Wz3dLBaN{gz}!CvqUyrM8qXZu!(K+=!&**tDj?6%H0@!*Oe6lr!e2H!2J> z@i5?lR(TKtpULqzHVXTs5es9biH8g9%H;Gy4TQs)-`80yFKUj!+Bz%105nBm8HltR zX-YIC;VPoKrMj-eh&!S;F=a-uEyYQb0=6W}Y)HuR(VQRe@J-R16V*w5EB+|hf#isj z{!HMsS_vPr)b>E6`{>O2s6U5V;>bMiN;5;`aX*#Sww{YWESNplUy&r)6}1v#5iJd1 zXyHYBC4sdmV(ct&ZjGj0o8!po!7R6H)&#0y%NOr}X6%Itro>aH$0IH*yZh65o0oij?5Y5GhKVx**W9eTuxf zF^}C&JTS-e)kn*4!4IzD`l+zTdX~RaRYo6~v@u0XQJ7NstR#o|8(2LdNE7C|QW$pt zX=Oii;E}GS6TBxe6?IscQ&rrJ$Wa?Lov|GI3w_fAv9Pbd`^>PIv+8jDmG>9?Ql2@Z zU^0{mjy9SjIJ*(4^^0QqqRcj)=x-8)Y=Lm%47@tMO-mEt`w{Pkh{AG3;HqbfYE$ z;dCr%%kr{~ur1V>8hoVe!jlIY0KOZMr1*&6!wvhZ2Yz7CefK_iXCafh+=<`0()|Kd^9KucH6qhk*fFrVmyHO-V7!XjP@BFc z<`91B@G1Cm>`z<9B*(iIX?c=sXu~gT^iLAC%8k&6Oy$5Z?F{n9>1#=ACB1ki8B{fj z7a<@lh_MsrTh93oyewV!Ct}+G{K&r3 z*iV$w2c&g{73O7<_2W{{GGGf_p_#rdHO?#GFPP@m?e(PRcFlUh&M0oy|Dk2>$0wXE!Lh+OktHTL8x!BVgu56pU`Po zs4ge1N|MEV5IekTFwMib5oec5i5ne~v5vMP|(S5-zffr|y%PK+p`I`%r9 z;)T7b3^j*aIx@!B2qrsDpEI|v>AGA@4!kp1r#I`%Q?W5sryCreUruF{GGxBF3R@k1 zj-V_+5bZ;pZ6T755$>De1BUV?%@gd{rDcJV&fIWpgQ+ujou<@Mlimg6!Wud$x4a3x z*gPtu^t60B2l%LY!aP26#>nh=8B+U+BX}Pzd^@X@4!DCKJA5u2!b2lcoDEnfP>R&^ z-lQO*E=H53GXh{w$EKO%_Kfqx4#4y$amFHmV)aHecW>X1#?vuAlrFxCW|QE++VI~? zr;&%8&2JB>+&*7}npKsbr4;xqux4RTja*z1xcc7S45)!9L}iE?33?;IKAo$}iCv(; z&-MjSG$}Z=j~5WjnZdKO$g{d0=u-VZk;5a!Wnf=K1$d9q9QCf-wZ4~?Weg6zd9{18A`nP@3C9=MQ5jnd}cGQnq|WV1n5 z(BCVJB*?cX`u}7@th|p$8?}oEx>g~Ar2vM|7F6mF(nV$_x<(^$fB1+b7M*Etodz&M zw&?}se`#aE{KBq!BpKf-|5kK4OMHI!9y5~y4-&IJkOB{ceIsr(J#60jEf21rt3+Hd zZP2e`j*Em)%8#EinZuBj1iMUSni?ZM;R6yYC!0Z55hy5=gyb-TMu`N)nu~>Zsz0P| zu~Gw89ua!B~XYa{3g$@_qKa zl*&;o2;K5u830n`K(Cfk?u`GGBR^4BGQj{ivU3hwMhQDu=)(NaB6c|E!y<_H>&P6v zx4d>+@pYW2rQ=&jbp@xZ3u)Br-n=L+`+S>+mjTkJtfd{Xd0!0ITrnB2p+O$RDqP?U3 zv)X$X_lf?DQ zgwi6J|ATiSGBG8t0*4BZQ71I+@_5tUurGGMwV=Cnsb#bWvmR_b!e+ZM^eB&D5tckJ z@Tn?S5-W@gpT6*$?`X~##`f{%)N%>l`xB%o&P@G62@hhokb`5f&s|o3;NY?|okPhC zW)d26j+vITCD}c7q04QVnQ(RYFnB6l<4a_VeJPL7WeX5I9$5y^>B?$+`g57O_fgr6 z$_>JZ14L*6-h5Sz2cr7NYtEu}yvs*DxVN{q_Yuge3eUG+LKI0)o7*Dn2sWnAn+oZc!%n zLERkV%*gz;4Lttwco`>{B0)OWTuzk7c`g7-k`n0!$ub`zLQ#we&L70$$ar4LFe$KI zAcKDLyGRe%`t8>5zBhbsUOVb8cV60mXYRm&56l!Kf#N_u(?_9ZLyIL_m)WsRryU{- zjNeWBy!2)tJ=}ZAcXM?5zxX4MN1E^?(N3oo?_`TfUx^t5@kk=}g0N)h&*|U914U#4 z2?io(PrQAB&1juo`E7Fhd_Qmc^rEZejAebqUD5KX+6p^H&V7U`Z);w_LX=f6h}nMlBY-wbSA1%8z>=qvntT5o*gc${K}1 zX=%R0j)+h4tJ5b-$|V?Ggk{uRJrVk#MJ>D5=Fo*yT?3evYSYCxT4j|@?AWA)O zZ75DwlTXEta4**^ZtaTPLK(zi2ThdqJX2Wz&R_0J;IKLmy~eb9o2Z}_(HZN%P}GWA zWtaRh#BM{k7UwGt4A^B{WN3AyAqJ)-&NWJ9nzS$NWzruR17f`f7Orgs?bI zInO)G2`~R05J<~g4ttXM@0DY;nC134993p%XS-#u`atG^(HbA9z&t+p`KC~owMjj8 zBtc*>Wrepne8(;jb9x)@)v!^x?P2r$@$QQTZTuVT!26>yMy_o$>vTM9dG%;TSqCVv z;Yf$~lC~Fbf1G{qde@M#I{Kzk{F|Qp0t8SCU&#r&R~bfmD6wiZ?!tw~2s3_Xf`_ex5?;ZhVy_0V~qX0s3&L++25DA(IScp@m0Nj*jmkB`v z9>p~Q2x+hpd{Mg~X|JVd7Xon6BiA`j(7Wh2#>f#|{W{E0xJ!8EV zkZn$H%p9YX1l?ORJ~rm>dVr?K9O31aT`Fos3l`RLZZ2TF#!abLJG9?ksD9~LbWuJ3(rE^>i+Bk*FH z$Uo^>x@S4&<;Cc2D(5S)8yZAT(%4epepo)|kI*bzPmSqFSWSlm4gWh==3k2&A#d{! zQgpTa6zBQ~N0o7zIRP01Kig~2GI|b)t`bPV&`jo^UBXfz_@ylcm09b%0e0RG0@L=w z;yixq0wDqB=?Tv581@USFYrM;Kl2GL4}NOV{LFf*vK5@puK51w4n0|9b(@ z%WC5jDO{Y|-vPq1jRsq;d|!=wgOFQGO{SK5q3vM|*sN%2y`Zfy#u z9u6|WvJG#%ls$vg+P3X#+q(Uo^PPKcTtwV|l@(c4k+pYj7In0VV{RuQ&R?f;*xIZDyOXj3K=XxpcIm z->n^SKB=Y`@7tA7{|!3<>M~K<1#VZuWG*@_zsN8!gv~JDiD^-Q`nM8T!B9wCNse9}!>(kSBRgbN zz+;z!Q^1tHZM$M}PU2R?P5)|^Go4ZO_$CTAkbIc-#uTFK1@>ZH!C;;IH*(lS(=mp% zT(1_a%hd>v-R^u-iw56|9U^T!FEGQMdOb&0qcuYT9<=v`tjW6Z*`C2`T17RUM*=Cn zeC4cAE^JZ>)`aO5JdtXqH83rC=5ZFHWP~YdjnV5NQb9e2;F^<(x<+TGT(39c_0vB5 zlM||aJW8ge^=BmN%BuTqOz=#4mHl3+7&XFZB}WCCSO#rnSZ6Yig$s#Adk^dA&60;nD7p|%w&%A}}3W6P#g zmG7_QLO`T^*ZZeqp79a>dLBpCN7qA5YVxIO8q@a#(q%gl=`mIn<_Zq#4~bFIIs=Jl zvJAr40OIWzR1m&My!DI)8)o!7&tY|TPy)f9hAbRBKy^j!zbM50?pzEl)bT5NLBt<0X5JV(+=R z8yW$(Y`wPeARkYcAG|x(O+cwpTgES+XNaGBm#~gGAK36%c9a^r>QpsDX@r28PpI1u z8gId3Jv7P_9dyKHdl}PHR`lHDGo}l#0Es`C!5R^-?=b7fD zNoptz->o?Jvp}GuVdX{l#2@99{a?g;5FF9Ro`tBNMHx6p_inuJmAG&k3 z?GC9yMp=a>8{e(zZyq~>B)%C&S|sPU$5y4dh-)jWW_A-%2Jt}dIqx4)aTbLZFaWB@ z<#gz!%y`tj`zkNnKO+G23#Hzc*@WRJdyu{_3g(&Ah&pw;;Z!?j&hhA9eV-1*Pqqd8 z;#dJG@%QHsdhz_me2ch+D*vb1z_5X*GU5v1uiqzw``7I=_1?gK7M+X{VZ*QCdm!db z7eEb{=N=@HhtNefxpymv%Zo-S-L#nMHZNsm^i8DEAg#+4&i?6Y(=tAsy#5Zl%;y?J z-zb@oMB%*lmrdIwtK3OI(^c<>!d@73Tf)|-W)dX_324jTfP-<=Fmi51wK3>B6C^qv zDV0d`FMRIq@OR<9Y8CleZ zkb^lkM>bV}qGBoS&qgf0yF?#Oku~k#Z*^Yfr#VvFS%btMrPac6G2`uW;^+py?ReM5l8Q2Etsf7c1X4l0hs8wDX9zxwf>%kb z9d+XxRnVo*e1c50O-uv>iC}y)U5Rv*a;8m2xG*y<*vg{~J5&u`!GO9)>Q)~`CXI_m zvwOp~ZXQn&qb>4NdPtHn$TrbToZQ630DG01?8mIposu-}w=wGY#+ih0;B2@DwL5Y~ zJ|`*8;A@ZJq|5zL$jvW8iAr@m4py!&ST1~pls|R$!zIt1|LGJY81S@WVcQ?J53X{i z4DhU^vjw8o@G~I0z;X~en6qx0;+A5hH|JQvA8nTkoFQM92>Kr8flQb3QwW#Ctcx99 z)@KxT)%!%rv)h7j%`h_Hqu*w8Bdi$+I#$V8tT^&X23g%g0n`1#pYJNIskf9Fxts2d zP;gROcXj3R^H2_RZPMhN4NEsgbSr+bTc7EW4!5!{WJ2j*;12YIm)kSle8a`g1lHc91Zx|A4k0{)Q4a}Eb!1m6}TO1Qq4UCgyZd>6%l4XjQuV#8Na ziqwYD3tp{1r2`8RTNdUXEo$tb;7vvWBIHy_$Qmf4%C)xLI|(fu&M#h~I^;dQbWLz# z5>d|4TG*x{Z3KC)`e8B{*hZjVY-@{-xC!*zY1vW>YN#UuLaaROaPB8y#-rEIc#^>8 zY288h z6Av~0%|bi-+fqb|YkZE`pNAesi#axs`#@FK`%{9iA&tW%EZ{cN&xf)Yvis9o#xism z8zM9|^w$Fn9=Di($Z$U$ij9|Y${v-4w;}8yu%QeR5zRk{)9U})S%R#Ls=Ac5&dXvw zN)fRejDDjN5%D|hdp<@AngO5?up9RqE53Dj=mAK12{p!BQ=pv0V-T-tdGfXzJ4-@V zWd_X#kNOtdDO36(W9Y3B$SW_35Gfr(-ygLHfjz;8L#I~C|IZQZ_luo1Wnd7-f8VIV zOmTZMxS~aG6&}_7Ps{5@iV#)(uT%4TIV5PA+NRBVOqW(cSEY2cT=#9~dX2&q0;j;c zeC#USAV^eB99A4{11q3^kmUys{-U6CIehA)Y_zTx3!OG_3;=B*Mhu(Zb;LX$F52;f zMQ`=eV)&7@Dd72rHz|mI-lO%1_TnD(eiyo7f_a58&Wv|bXa^DzszAVPbiKU znSP+o#CChy_&CX4s{@-(tO^jWEs|%oC8hQ`Hse(E6R)_QmGQfE;#(Lbo3jcz-cxAT z{LE45mSs_`7HP+t<;eF$P^@Fj6UDdvKMM@M1{;Wm^Wt24S(DodzW4X}NV6WQu>~%) z9V*3H|Dvq@0T8S&S}+vzo_%uYHkQ3e5dP6)Jo@Z#`gnUm#kG6#cq@s465?G!)YEJ1 z5b4bBOmxaEd1b8h?w%4lF>EocZU-Xj9_ln!>L|FA z@4@(!zY+Y36P0eAQ2mjSgGsUS2Uq`@a5=>?v#^=Tfsx-9_+ih%J^LCp$Hhu-Pa=5}q3Z7u z3u*T!=A*MKd(2lolhRHU;Lxp?b;5wl?z3|pp`B(mwOqIV>}nT7f&Aiq5o%Q&V04Lj zlM*5|yraiJs1FNM{*#WdT-*}yFBTPyUIE=|b~Q>1e(PMms4!kC3?VKu1_K&VWQiH< zvF*LOnpvzMZ#r&!n2mv1OKDHc0m~Rg29)g*#ULY23c%qWv1sql?A`dhCNdC|-mdRs zhZYIKdd(jfwOA5fQg=RX+=T^L!0>sx=yW4sX9<>DX|*g5IM!plq?RCm>Y^m8?FQ3; zDBh2Wi)^+JR?+H6=>l=3yi@Eu2~{mnAS#4O_VCD0nls<(j2SOvFF(*&2|6A8`K{n) zz0rH>MIN_LkXf3%EZKJPvap6 zJoXz@V_*Jx)4Uf6OWM))=*Lu}U%Z&kF^D&zQEh5)R;6E@sv<(Wl!-vkH#Ejuy=dUh zv|`Tii}Zqd`6G{FUgLzJ`LE}f=IH%{S2gG@F5OjAYO8d-sexVX&#Uw|es8DhS>H69 zBia-->ul$|L34>rvvG9K4a}G0K&56-dk%P2mPX41NnMyRKA>HJ6t*@raGz_0hXr!j=e{qpIOf|Z`{?1ah0|85wsgar)wYSvc z^Mj0z-ooVBjAb{xz22}=3R5;v{A6bz*^-RoI>vh~Z4v6&->%2Zu6tctb98&8`bAp}Jm$0HlI4c^>~b9bs2ga=T_8RQMbd zRPl$ESn>E^S|OB9?mDBr;sV7uv56V1tyilh`f)s}TzOjBlKRdM+f?JN%U+Qcm6fA* zQnb@%Io~5k#J#35%gWOK-CfL2d}q>1-&tqzV_z!ZjbSN$$$}^sNs!|Z82Y<5(qqVS zEMV9R);dp%PG=P;!8%9O`{eY+E4W@NWM~2tz2EuyiHrVvG>@L7u40`%6Qf7_%S11> zjCSk6^wUO_a60}{yfwdEkS6@~R=*yd(h{WW2sE7%CBrbuz{WznTCPi>k&292|H{rGsie}+!8p)y;z5QAfL?6oTanuGv^^~a zn~Z1psR_rs>%-q1N`j-LJ50d?-hOh=9W1%&o)l(NNgU>MijF{Ap50&JvVaq|HV7vJ zJb)1c468kg0o8)Bl4mpYb2+hwpb>p#f?xsV&a&iSM;=aF!*@2jwPkEU+=DT@-FxL# zhZTtAP_vGqUi+e?H&rSF9Y9C0M1L3SSfVKfb_K}Rg#~m7Ky%8Oc^`JkEAvk<;FMcV zvG{|Joa*kq8e>$#Z2w1&3NEup>yq4qMZ$!$FI9iKZbWEOI4H5&B8x$Os%^7+wR2TN zvRY-ambIaKeuumiVwXkp>}kH5Z0p0m79T=+bMB;s0DiP$b2}YP!}hk9j*-;R3+5GH zj1Ki|sN-+}xq8N*9&3)Xx!4%Q7t{P^;lu9MG=|^1Db(gVw5is`TTqvP|e)sCX4+OKk4jEvp_b9Jwg6uyo2C<|_Bk+qN&a53dNutqkB?DYX7V z{$Zci5t$_`cPy&LAXcLfX$GTOgR97f^O?Oy_r1{Fp1krmtK+TGX{N&MVZIkUSveEC zC+_+UYWpwxDqk!_3B$p0?&`O^o>e*IP5;pX^};KKMajk+E(X^`KcyS#FS)@ z4DkDH&l>;QdMq<<);^k2x>L59^(wimm~z3Y3B4j);Olj_0k$FXHN?1o++B~r7QL~n z=-_`L=OGHwhH%CVvHmtj+xoKL$#8=}E6I_d{9i19wEhc*^(Phj_9z@4FyF5bm5T26 zki(y~N{gfH*CPRs{L6^qkZqs8QcEc3Mn7F7GGc)2%j|Hgj>y2olb^h86=4y9Zhi1E z!V{m3#x*>g;ci&>&?P#g@pUT+$oB*|>0N**A{a)b1rEx0=Xt@i^)pP&f3MW%t@BQ= zHFlhJFDNt3P6%aaQOA6fuKO?cD068wnrzO(EZm&&2bpm-9ti{A7*(ZFnM$-b|MwT5$Gc6>$OBCiuueL^+ zOBIv$EtPl*+(NN`_7V4&;K@>@A7~4G(u3gZ$@@S~FY!OrvFsV_wv`Ymq(G;E+OY& z=UrNBHgdQK2eY^5y;%0%;Cr>Vk(>xeNKab|1FChZ zQw$FAgzoT}W`io|iN^)Mt-Oe4Oou%dl5H?;aN%HQ8zy-9t<1!{3|iY^%wadJWJPC@ z*_y3jHkEe;-Sef6d1!kwk#~04Sh&v1Cjx!@T@XA6CL@EHo#2B6islZ3ge2B|%KLSf z)Dua@@vCd6B}3X6AV2G$E*41w!N20UWWVi>9lE7L)@IM#QF|lW`iVD}r-=th+2(@t z@e;Vdr{wTfg^LDEIldhQmJw!aoCJs*YIoUiJ!jW)2^({ zV4<9ncH(-og+yHAN5FG;bf#_~Ol{9v<}mrdvMY_Zu_c`G8d#^DKzq9+Zb~jjIg7Av zNXdN73Vb>!L=7x|_i~=!uQw0fj7BK4NagdgI7Nif?M!x5&_gyZk4UdMA)~_gJ}f}z;_w^9QW4HGs`)i*@j1fs3Z!-?vz&UVSbko;179<>=sIlQRLxReyG6` z6~n5*Pu=~6utb#b_?T}CS*D<>3JPfAQE)3lO6NeZP*5@kCJTWh^Oacg3FXiLkblEx z8YVECQQ*bS-Y6??idIGI=&)r#0C1!Fl}X|a-UcGfcXbtiL~P=@TB*3O!)l}; zC@?OKzO}-fw5M(2V>!o&Vi;WswI$xn>3WGDiwvMtSg>wYsI-8F9j;En?#P& zNgMCHJV|bv#l{|qmPFtHc?c|&%TG!kgV7Uz5T!L>`G8HC$yb?HqZ2AxDb*s>U28XM zJ4kZD!o{3b18&Jjj%Z-tEL*tc>Y3O9c~@%=qJHnY8~vj+(?zM`lTsX}Z%)yxA?ldy zOa{zi(yFc)0e^gzBjpLuh{r2^i#IqqfV1jIQNJ`UPT3nd5)`@9zTC&-1Yu1xu8v|@ z;Ob0TuQyWExSx2Dxm^ z!Xz}^C7p*~7zASJy`wtwqpEeGrO>0I{Gw#LOK~_0S(6x>Le`@uFV{N?k*HJ@EZ*yu z1AgwNox|tc>~%+V?SaKm(n4{{3_flp>eC%mIMni*=<_N^a!b0mgac2?Os?fKE;a7c znb>eS6G5t((s(A>j^hNiKGe@r@H$FKMpnj#lyu~GS=UJMJ>O>im&4newg@xIt!(V1 zg1d72$2L#wrvSQw$d55pa+eedQjDpGix1_ygiTm`P+Pc{Gj}pl$0s5uD_TjkJB^^i z`z^L63#bb#{}$3p0#WL$z#6%Cq=G8^oJnmYM$wvGgk~wA=ll>|y^>YH?9b3I7L59Z zm>|iMB;TexzQQi_)EPBJ$yn9=Xilz^5G<=NBd;?P=LvHtVMgJK%&CuntyRggw>n2K zs$bHz7iFRLD&Sh?X#~e{GqYZ6-8t=d#^Mv5P85$_LhFJBIaey~6s0Hea-tNXzwUg5 zkI^k*{_?2(oi!qo>7r-zeP_LR4_0^(sRprBix{yiS$UxK^$F*3F4K=b=?;Z3Tu?f`xjurQp2t3%;PU%3q3xxwwALmG1q zN7dr@_q8*5i@#*BpSL=CrRjYEgUkG0&g>!Yh7gQ}|K$`qOpH~tveY+$SO7!nup%se zPz^SbJ`%wrYO{OecodtGGCztOroCa#I^644Nj|NuQv7f`iCeR-9ZV=Xuo2g-NSl?p zD1DHQtXcjA=f?FJWksS7;n&0I5-cPVM6UDe2Luk}(&hY~B$WY7G6)gTVb`?67CaGi z2NaIK@ErVHh=TnZ|0*jj->6=uFtHQ^R*ZzN0D$;hi{yev?*)ItKGnz?Mra{M3F%10 zbK);_x#c)Lqn@~E%-p}(C5k7m?8ibn9g+D1zWoL;i5%v{Igzh`<|Perd}#^DQMKv> zE)GZ9$;2TQVQ5N`-^3Y~pLrKy22nH$CX>Dr2*R2ri$dU8s_;T8y0qlrCSZ2(0PB<~ z&`ZTZ@B`c~`Tm5X;KX_uia@Y(JiMsdN<&>|k0femmCJTN$2Yv% zO9DUdTzeLJY^gzN!eYI$K0tH3g3`1tmd7oZ9hX)Q0`&Jp9 zdAN*?s**_l^^2-yVe=N(6-a=Qe=cK&xubD@s(d_P4t`Sg>=&EzaNV@s>_|nLY>S!& zop{4++YTU<$RsJDG9ekVt@~);FghHV)5ott=wu$Uv$rtK6d*7qjQ5WqMY0o%GI!YX zzK7pSANA?)r4Q0~H@sB1*822>-#3bpqm_u*S^w+oDoF4UbNHIbj%=ERQ>xv`EX?bo z@sxP(@<5w#{!X20?%$WV#H}jfSA5sx?~e@FEwo?z{{gmnTGMq%@R5)c@54BCEiUm< z(sXVwGba$#Ww07jHR zWN>N0*!}+|U+DyYGRlDdq5=gIWoU5(heUXVLdKdo0}xjWl|g|F!g;1(<>(pyzkp!+ z_)ci-%p>!f&acEdab!dpU5ricU_v~q@xk199;NI{?0OvDVS+B^oRwLQ2lND%#~63S zG3vYFNC*F%nJ%~zsYab>^O;SLaVx#s%*M=<0+O|Q44bE1%Gz#cN#l}=-b8*EG^mY* zlLzv{7Y*%^&Za_(s(Pgja;PKt@j!$JBg=WE!TPsv0COuSgO*f83OP{5Tsbik6ax7m zuVmKG!zOu93y#?1R^lsU$Xs|8uu{5FMG6EW2}C!22BqjAMINq7MR)G)P*rxcLjE%_om# zn{8Q2;7!del~Gf7E^Zb6OYi5p%)tuLND8x_eXOhWw@NF6t*u8`1`Lt2vYkfJrlP*z z-A8LZed+^2MQ4wcj+K-h$DCMB(ln`X5^J~hIFK6NgDr39wy!?R3EOSMck-a!2*O6 z5e`WwmYoW{S;GeKG{Eyq%%oc_pCv&m&{n50X`sGbFu@>ziS~r>lqywK$!h0n5+!HE z-f~{Yl`zh7JQIPoHLjfvr3gA{xX%JYCT4#S}v;J0T_=lR0^rSRQ{8A(u zC$voRx~$=I0#Z*w(d9^ce8{2Ag@YgYLph}vW8gc5)M`Y$b3n?WNkuPHo`a80Y}yq} z=W)%c+fyq37I-4XM7~^(s?M!rMQGAqt47EFL8sHE&DRYg=$jU*HVuh;PsRx7%{UCZ zYs0oT402l$tQ=Bx&YIRMu_eFR=Qn4^>htzWX0aEqu+INLklSQ`2s; ze;LwjNNle%_!jn_s5oh{)08FFCz&^~C-kDMeAJ&o!8KSZzc)sq6z}mgs!mI?cwC9O z&!>Ksw(sm;#GS{1bio{%YqUNW7$okK%0xu{CUw}B+h^!l z!1JNfH?dWklN@Zp>@J#GOwc#M(y$)#PcCR_@hd@51d9qM7QbU@#Cs(ZxCuSvULh)O zjR-0_;G`z-T|nnL{`nJ~oa4LN+2sL$j5u$XHRyhvUz_lXy08TWeg6N1*c`r{tfB*m zf3%)dys~t5nTBMY3=k6oM^HY;GzZuPIdTgG(Ap)MS&K=NgX`%K0rs4)Yf>On_=U~7 zZLinZ7)Qbbblfko3w&cegNV;rSm>Gzjth)CV!nQyVqaNcn}^~hx<47kVb0HaUnE2< zR(XP-iIcB04!ksa@i9!e}@rkPo|6NL^Tu~w`9 zKk2n8tYPfAcm{P^88J{j_?RUXnT=%VvcA6H9$Bq%`bHwVoWM(P-t8waT`G)t3Lu?cgk$T}OlPK@&7h@EsgLwHkAz#c^B zSX2^kA5OJ67(eoqB?Iqw%9a&glt(ibl>j7|6-W>vw9yg4PqNv15Mo&;5LK=ro`7xu zu_zN+DZCAK0SUr>h%)Yw_@=n2YZ_R8yX-Wue4Ad6Bn4>iU!o$xjyXYpK~cf@IgXoP z%({@lFYK{o^B*+rI{tcxBek0R!mBZMK*%Li^^XU3-N>Kx#KZ-PmhrCjqEXmt?ITB* zTS{yIULe@>4)Ud5pg~W-Rdvt{JEOv{gt661;UtLgd}FfZruhy%GTy`(d81(T5e3^V z*fuLE>=C73NXr~^S3EBXZ`ZGavuz@0$FwXoU!u5{^Wk)@j)9QJ|HQ7>jo^Ek0PvM% z-+9KTCzZ*Gt7o`4*SpY#JW7CWYH|X0r+CZ=@I8Ll!XyX0lv`GOayJfJR7i4q{lUH> zl{9}g2zP=vL>Ykqu}F(4(Ro6e-fvbnX1*H$D3{sA6_fOdMpZ>j9&)nGRvfo{Dwz`= zDEQBmt+6PSQsPw#(uG*>@%>y`)H$C$K-8$tX+W@cyZ2~oqdAUkXps7`hz{nvyYrl$ zoa5xSr>A)VKWda~nEp?O@TGz)*)+aj&hwH*HmE^)0QafH1VkyM!Z?MzwkeZ(vyC@% z4v&F?T!Bgiw*03}BKJo20jbF#ez0yzu_ALmId<_JFNpYet7KOv1mr*N=>xbZRpee* z%@x&X*O|{@5dJr5Cy@3mz2;5D#4-Q&R_8_$+r@c%L4;!9M$Pn(ifC7hOoM*{qocyi zgIbO=szq(irDyQ;%JFXgUU@#IMM;uGP%B`zc%mI+?iv2!tPGD%5z8utnQlLW5d>?yd z#q*>%L|$2B5BEq9+7M{?8rf^&1SW^Pr~F)tE4|yJJ6{=6;*%oba!TBJ-%B@4HgsD1c6Xtj;9O z-jaUkJx)bCVgp3FrPJJT*tGUWA6?{YyY5O4Trmyao$>{&5UD(hwKytL%U#^=|+b@ukujTawM~u)JoP2$YG{q138eZLayT8|T>2lwH zKw*p!+)wZxJUSYLu`d{6o8?I!dp1;KZPx^S!E-=W6gm8?K72>fY1Z~>!R)fApphc@ z@D~XaJgl`xn}@7;VRzG=EdlTqw!WKFJ^IPT*`sX336&J|*UskVMsP&;MYyI_X;X8z zizqhwD8~Q*F^_va8>qJYW|{gn8GigO3uEsL@);>@^cmjiCbH8vPnaJ#90>&+jzsN9d_MaNj z1EvCV`BfT0XTt*A-VgRyo^T29N^)fozkzG;&|g?!O&`InS6Q8W@C?8hgQP>k`mGRX zLxov9q9ech!ZNF2*PECtCs63T(lmhpfQpre+x-+bGg*Q}Tke)MBp@owjbAiKnGuOj z@8Fn4=6rl!#s%l1yUN7{!jRbDfiL!Z=MvV9enfZ=6HfR#Kt<@4=o_Tw7x0?Q^4{2- zToLvTFLjMsWJ1Ly4i$TiHtsP!&OY|g_h0@|Ea`q>8 z2IzIJmi-lgqh$1KSKbXOHI@bDUTJKeUp{t>I>--NE{YL0% zLhSa62)KJWGE%GaXKn=jhc+7s*q_`gGEB)%m;~x6-`b{4*g2Wc(oZK!|!|g}Yf5<=xNG)NmHv+8iSXe~4;l|V6aQ$ekRApsEKP*(9?vEdrf+PsH z;o3f~@g#siF-ImWI&gj$OupZPL-bv?7!DbOqP~Dq#ckpTTYCX=J?j~>)_;lMqZ959 z2SZQAmp2r@D5?(dW4H;j2htH;c+#gjRPi-YP4t6ztJ5}Yd?{A&?yP@pLx!oSNF@%5;GBg--5Q&nvQx z?n(30C}+et`@X$XSsEjL{*$7daj6OjfOx_$kTccz$-&ZKec;H1AYjCLPB!}s6WG)~ zRZ}x=k5W2!fws|s-)D%eN~62KfG07FuWwzvyk2)NTyM&Sm`--TcDF#%3rp$=N>BFV z6f8O1a3e#e|IzfI+JInmGP7Ms(N~J*yW4wHq{~_|kfxY;Ml{Nrt~%isY{15yi)g*} zVq5UnUnctgPFuiW9ZdG=s@jMT4;|$iHk6~neWJvksbEjvff_fJ}KUSVf%dUCR|CwG@?{y|WpRDD()DI9s6IYSPo@pP22s z?c+>go?iU+PYcvBRxV3C*WU|h#*>c6!qVX5v-KizQti&XEPE`00C|MYd;Ure6DqT% zBD*e0(KXsYNMQk+03U0T9YdNJ^fDRav-`ur=HS+0wpmm6uC;y7CIFO^#~11(<4i9s zLVCZ~#&yRzwGYMj{=CN^!^|Z(?zcC07|&ac>tiIk4_qJDD>^}!*Km)ey`v+s$n*Vd^cC|(bmXo5LE@Vv6DTn*0t^m2KmO!J5y`25taZfr}qgwFGx zUS695%w61ElO~l&h;Yq*>VAc6a%z?v1%PVC**qM@qH}RSxoJ0DmF8XKZm_s~`{QTz zd?LGFrNk7qOiOg7`nKi&zuVaCn{?Kq z$ImguF^IV5y96EjMo3S~)fyyHnXO^C{|okwOOa##7wn@^+PNc>E>^FkUWTJUbt-^v zmS7tV+W0Sy*V82E&f9%6(DDOjkOwF`fO=t~HB$0^4e9z_Zs3yVjq2$^&C4y!dgm2N z_vK_#DrfOtwT7`FL^~u{xW{4DkSmqz@ci8ND$^`p6O>n|+u*Ml`>oXN7{${>hT1lI zHEBZa(KzNArp zu2m?22|RD~3mxDn4YFt$G6^`z^lm(ZOpy5!=T`n7I4U`TZRwd_#&^LG+J2Zb_qiyh zfxh~udWYq%#9Mli5&mFB68Z=RyDT3*5MS_W@K|yvvzn|zm@%s2%rnEpxKX6 z&Q6A+DnN)U;T-2Iz9rB;p+u4EJ4?l4cZa+EM+Uh1|E4c<%Z0kErnWuJ)yjAu{c_P8 zAQ;nRql2VF5N{~jKtIa>085YlAK01YoV;0U9-y>Fm%hg9q{(Tdw)#JVLQ#{J)JIX4*V%L?)=iBCM1QFLmmdWKlpNXzU4A z58#fF%uTO=QH9PV4mwk$urVUOyDYGC=y&jJC6OMU1jYpD>P6;+)3pIK!oEdA%_IJ& zq^GAss7kt?pP+IsGx?B}k#%p_^2w*SY=v1?&THa8HTuLkufIC-^~qidzGDOuqNFJ2 z7JwNWnX7tD#(5bLM*UJr-<^LE>_V^Fsbd{gTjD%jQej@f_PNzwDf;~B;bQ7F9kyF- zxUS^JEyfNPGO-L%TCTo?haetXVnLr9q&uNqh4*J%>?T=#KWqjx{c`LOL7T?Qjug_XyD-m zEF8G})5qseAjB~2LI8BAc$E(gKfvqxpT~PL z1!nxy^`ODx?iqOoAwH-vcoT~Pr#Su@;un*h3lIz=aT}2$#rLC1XU~rhK3|lU+7lgv zosBR6`o;G{s);t*1`WP?{(vq^q zsF^ZsNy3zHmLnOU@6hKCvbzJK4cko3_Px+kl)KP#qch`JK3wTPzhiD5dU{Nid*I1B zXaCy}Ez38#RV;`nk?)NE0k2AjP|dEkXOaI{_H&SPWvteXL*Ve?kALB!AH#}IT9Ivy z$*!u|uZVA%8YH&^Qq^ZDla{1Rb>q#+pHSQ}vy?IU+#$F2v(&MpH@#euAHPbxJIq7w zR#vd+{q|;=Y+c){$a?HMA8<*xwj({Px4F0#DOmfd0mR^#j!8&h!y|ej-FE(2nvmrW z(9ZrH0mlK4zoNZuM@GlbfI#75kkNiRI?HL6^dIakjw!L@hw-j7~olPj#sBcg6jwm`5oHFPQ*K<7Z1SO(I3-m{x_Dxqs zs?q>r1bK#^)q5iXD#wm{%;MGMN)`MFQsot5(~mgM6il$>ZCPr?wpW@0`uHAXJX|AyVj1sE$gJx4i#Qw1y}npbuz0g4H%7mtKj^T#PsSf4xAu;2KSMs3 zQJtciFEO(yk}f{=tRcszLHnwhRp0h=#u?o5;d$beEkGE~CeA9M>9qOf2x!zeoKzti zd|mSqxB5|bXdZssGtxIBUaz9fj!PfPs~`<(-lQ$iFx7F8amTJbO9$PZVaZzBg- z{mX)`Vdh_hvUl}#(o}K)rOk~7=tuSo#X@6f-+fUOcFxqQy#~_7X2*Acx@MsT9d@}+ zuR075GH%&*eiD{d(=j?WFbn_LZ*_vsF6@~w z6exJN$4#UBtzow8jyG@4`P}n!Ro26Jk?`P0yEoLk0jdY39jKa*$TP8TBaGqK$QARG&t^^%q#yddc>AFil@adSh3s8X1SQ%OWb$ z!Jf3`IDO0Q^#Y5czo3q|vx2(ytF=WEf#!Lc#mC-oCsfXy~FrtneJF=}nyytF& z8CIzS*+bcD`oprzK-@4l7{OLl*EKe$ai3zCmd){&&B<|mYK>bHyj9S62)rK4EqtMW zy`^CjZyKUF`+3B?P}K`)0(k;G$mslz?%H~d|NOW1>|0B0ciGe*#;erN_$HCo)j?mf z8T_;tTc=L-FYVeS)1rN<=7Wnh1XUYPVbX@B|6=4)_??s=k@zOdE7#gp<+~3_;mNOR||5o^%}*E$62TKX~22Rg!?19^=^`bzJT0 zh|nXn4g8g37NGD*yCvcWXd<$JwX;T4D-C-~$eux|2?~CKPbb7X--6|FI%I&kuqrYP z@hUZYzPEW21A=WFj=kF0C8Zs?4fdg!yTBHAcTZ*DA4pS519O6K-6WA)V~Ml_`W!3% zwIj7unPLExx`sL{P%9LFfT%XD)vDKeEa>SM@uYF{F_zLUH}oLVZ&g_QlfH7z2|O+9I~wFjhwucA(~O?zCG*Cq-Z}b z9aI0R==>cbGh{ib4#Fz=-i_BK`?aFFYKyd?QSX>T`f}lN<(|T=Y`V&!*-d|g7aZCQ zU0yfY|L?ZZAXUA9GCV*vS*8$pYzV36#4a$Bl~&Ypbq-G7iYbq%gFdIQ<~zlNdA)+jwX)~VRR*5|UPYKeGS4NH zxPg7K7s(*R1)e12O#cUK?-*TK6Ge-j*hVKE+qP}nwr$(Ct&WpU(y?uKY}-y=`Wp}T z-aq%fG2V}(arW3%wO6fOwdS0AEnM&Q_arZea~DfGOn;<6-}{grcwJ?Yb}a*7{3Vt9 zdzt0oJk(oFZCX^WMvA0tC+1zjEv^%83ROIZ;`pf~vkVoMy8<^R5dboKN*qGZoV8O0 zez(=i)`Cu>!sL0lbFO}RNN*?DUt<@1*X^>=D)r91Y|QE)uyH)kdzdUqaDJkNMTj^Y ztBC`-FFEb}EkgN8Ap(p2lpm1#+mNssRNU-0oEJDZ!pN$2yX)vDB_QNl5iSq<`HUmz zg*0@EazOI#lj<)w@iA=GM>^ff%_4Qh0UtxhMnoaU2U|o}yQwTyokX2;;MJIC=t2IG zDu)diK36J|z)*Z!O2WZN7&mf&NW6of<4*0yAHV9@ZOG3jO{6P21doy3V(&M3kg3bUiC zeHYB1iyi5H!m~nSqVG)^_4tb?#v$eN+lVekbSLJ<{8Z*$1n=XvY(Xm+d5~?X(Tz-` za$D`>gU!MV6u;{8-F;2b(0fS8wd;a(^MmT-V_uDlPtB4l6nSRI{o9Gis{ZyIh84k2 z-I8cS_7+QUH<7?EIC3qu69A>Ybo{(;O#BcCw&e3{>B$ZNVVRTAh>$xk>Fkt0>Su#= z0^?(c==R9YD`e86K%0^d8Gws`V645-yWLJ>v+irK{ltIW(tnwZ(Y(;nf zUYpxLOda*c%UujGNa_PR zRYHc;#oJa|HNuIB!iAA(y+#BT)^Kwyhz7Z&~pEn6d zLI?Q}1wcImn`y+9nfjYlj!!@$e_w!T-lTg>Gadt4 z-6i0%VO~bdCWe1(KeUj4-%(~CkwQdMgNDb`^fQ7;(e7*y`CfmulFHRyfmLGP>o3dh z16r{+>23I+z$t&RW0rCo%mQPt2@$oE(4gOkjBsD%(FfcD%-+a7T7dn*R4!SkP>m?=aGS5-`h!iTz6XrmJVRZgW2kb{X62r53w--D6qEx zEpG2HlD^^^V+q6TQNC~dV|GSvPQPmQL$qu;A6G??lO_ZuVpRO4smM^Ki}$$?blP9M zlpx*H6Nt&407+K(zvW!8fCHe=B)pCYx35&syCm{#T+s!fwBXj|MjJew=it!M$X9RAzJqKaQcfYjSua4sb&)E0dRQoJ zumQsEDD2~YoXufa?ayACv$1rGWD4ZrEDo6eHg-D8`yibA(a|2MK7bHU!5WTE#>gy{ zjk^6dwNDtoP@j6m`zhk_hn~CbIJ08_KDeMUun0&S8mMyh{=*{VLtwz_!=YzT?g!i~ zV~v{BxFj#AGy4TVzAI46@pn6nDKHe*J1d}EW87uK86SKD7_hUqkZY0#_Y2|?BUHv; zk}k%mPsOpv%8(pRzX40c;HlrylNh$t7`!c_7Xub^3ChBenC_k9p14;8_>2H!FLtU(o#@7#k1{+2ZG8A&)ED5eZ>QEE3xguFlPI3#tSL??sdoluS!`atM{oI{Z+1}KlC!uvKGBXZ0-3wWS zv;oR{lmkG5&a_-LTqKYVW6SIco+nGtM$L;2bvZLbv`!hOu`eYssZ?G9x1ceS?vqw( z?J0{*;jiqHqTU5v4HVTI-Ws!FngL!Z?R-#xR>zqave*ZdpsJWQN>XsE6?; za;}T*1xp5q1y0xsPfiF*eOMv`u|-4Mh}k$!DK3E;f4%@34e`Z!F8KpW<=|N@P=9?u z1na8BfmPae5duF7m+%mMQB`Cb%gh?zOR*QScylt+grV#6J=?D;joytA*r0dM44A`D z@6d(Yh*))$b-b;wmex}`RoXwLRTesqM_1Bjosxsn9Z^8~13p-Ca4rmh+w!)7m4HAf zN9yKNdT=?+BHB%1T3%3#4BIpgUwS3|TW0l9K)!WXRTXF_tj4dgV4+K}IK|K>66 zb5CXTsFM5cK%SlB@JmzB1}JQR+}C}*#9^ev!dpOfCTGv9Ye0-I-q*{zFUB8C0QWpWbh0$!;%av9 zDbo)-sBrc&&HU_{xm%Sl`vZg7;Bmet{N-AW9l7L#%wi`0j=kWb1Ak>PU!E2Xrk;6t zSDAeyfr^piCp9!y#1tVDLKl`CYb({&lcuZ5d??Fif*F1bk7Hr0Dm{G z&RbXtOUmGk8#vc$^;A|B8e3~Np71W=k|nZfW)e{b2WydmJbrip%HBJA3YCWsi{=*A zSxZk5g5$?<$r|=3kQh(|H!;_iHxn0l`If(}0Bx8xUsLF_ldL`894C3G_|HUmnyA1Z zpVY3UqEr+KbOcGnF7S#$;`G$2s7!Tl1rJ8yVkuXApddw+e~Eba3Zb&l#PxS%)`@4k z3KYHuruNzE#{-K0oSGCf-T0P@pqEWlJazy%vX~?P*vlb>ZA^zyS+lAk^GQ-7b1E+y zkzO$v!d@|CaI|o&cKM~XdqXKVz6XC`{F~-9yS-0GCx?5*$Hn>*-J3Kc;e!A!m9PO^ zwpr1c0y}tz30DRmJ**b`lpx)<%L4PULpb4thU>JsMq2E4r_&h-)Bez!cxz1A>dUM_0hu!yWAhMzYc7?x!nE|F-;fmim(xOZ(*D^7JY^`a_>U@AHMESdVGhIAb=?-wQCT89226TK zSj8&do_K2-cs(;qa$621Xn@%SaFR{P#4vVYc)yhC@4w8>y*@o44sT>y!7uyoQ=WuFd z$Cm_%5Zw=6jf;2~@mOQot0Fw_ENkdFjdO}t=G5KbK#$jp?wL2$eZ_4F+u)*Faj{`# zL>}QSUQu|Q6;x=H+?562SG+f|H-k625*}3yOw<4zrNnd8P4AybfGFKFyF;><$g>YaCXlx+9aujz(CC#Z{x}4OjRbXe@#j`rQeqY z-;G4EGr~4>lDv7Vn01|B#q3(|_lLaDOpxQqWg&16j-p`LaXMyT6vO_;q-X^10s9+gP!7->Sr7#d{sEeC79GP6rRL zpg}%>5LN!wSWN+yUj1O;YhJOARvb1sbt+nBKg)|BL!vkTGLiaIp|K9M`>0(g{^%Li zC;G0O@V!}}NR}G(!VIx~T3fkouY$`u_!RPJ>e*2X^$g;u`n$n3E!JCasMbrc|?Y%PXV?O@>#7I2IO@8TkP(;)=*3) z9%J_=sM6r*Q}L4*fd`VlWlRh@TbQIxl$E4WBB%5kdWN1y=AMZ0qZHqpIkHx7g+uOa z;w#sy#ZmmrjG8;UC>aDjY7uM?3eR_lq6`50nL2r>>*>%CV@bqX4S5ZVT^;~<)iMAi zLii><4(l^sV9?j#MTY2tvl9*Em*vP}QN@lS`M`ZU(EXO5=-!=bZD~ zUH&l5x{S;&oabIi!sRlbd(!3xF@ODrm3{N^!ps~zAhVq&iQ0Cz{j==6{0H4nf#B>8oMz9WUPHdZ;MA)J0>xhoJ-ne__81v>}a z*B(nD0v6iIG}9n>;(4Pc0e_SOsk*-f=wwdT*&rfe*CPJ*%5y(4$s1~wvXExNSt6ax=T1pjhk#~1R1vurUNop1?AM*bm@bCRN!ge!;-2x- z1e|xgNU^^-tzu@K-?~$m;glyerCxbv7JbL|@N%9WfqlU&di0fiskwQh6unA9#cjmK zlY*DdGKs|;BjU0Sf=}UsiHFJYEVnC-lq2vOtP|d*jwQzJ(G~EYye*z55ux{vhJz?y zF$iCJzt2$E6HPL*S)-VHp*hasvo?Gc7EmBdO*OrIN9A8?$YwraIGrP88POq4p^;i~ zR3oJFfHw-mJiVs9gwrQmOw2Hd{d|3+55XUNq-}6 za%bxwxZcmF=J=5hq}-cwbaB6{^l8H@e`mF-X${(VE8(fHK;`PkgrHn`=^CEGRns}o z_u~s0qW-WPYf4fGfkGyz8`AzJBgN=M>#&>%Sba}6nD3Y(DCj4=e>)o*5XVrY-oz}t z)ZWM`UojF<+1KvA+Ik)&()H_j4!r0Gj!OmTzRg;n;Uh{F@6g5b7dJN79GxzGHyi&Ph@G8|%gMu|boKA@+1~wAv$~o5X))Ayi2rf+ zB=Wg14sLW6XJMEd05f<&>C~3}@-BVHqigXfFrue(>)O77EJxnJE#wifJr4ood^v+u z&n1G72>IP^i6AJUFRMYQMfy=IniBrAvp{j~+r*HBqoc4P!_5RFXdZ?}qH>0?Z0vVl z!iybrNM4ojZ0tY{vA<3M+uTl$i0M%ALp~IWCs3eFVdjZMBVfP*{QsRAkTgKZ2t8PM zt@ZCDFv=>(NY`o5gfSkaSel^!4*KI+4}qmrfO4c0O`J%~T8cA~q^rPm0!E8|JL`*X zMW2Rj;feI`IK%5V+ZHXX>Be~2G#&N!@vuoSn>JM32ARwiz2F5#5xT5`y6-l&s??0SE}$xVFi`GLw9v609u|EwA1vXtTlGpnw4XiE3ju^h0nagC>GmQrgy zy;tw}l;FcpSd+F#L%HU8y)Js9vF;eQwaL^Le7yT{b##04b(9MBeveb70}jS#B)z(} zzdI@CxRFfv!$joZ=(EdraB}P(eAH6!zQtvk??67}qD`~H&O^Uh1rf4_mpb>?FR!mE zs^oKcESIdW@d=pKUs=UtrLoPpUqfVNsmym7+DE(+rGkvCk45E{x5rB`N_zA>hVZN~ z3%s}8i@cA1*>)6OI!^QRU-@cFGE^2;Z8gU>l`bIz-Z8jC<|@T?X*CHn-ppd|tKM30Ghb z`vvBGf&5IvOb-fjJ$0}+PG1JCm|3_oM>_iqodVr8Bu8Zrnd-I`xp` zg`|cyQt!Xq+>=rIxi5}Z;&wl|7fHzRFSIITiz#=yrg^&B`dOuy_SWW#}ao_c(w{AV? zl@k{um`jP-rHrc2*Xf!$KEIB$yn zSwjQIS(PPonj{rkONt8J;!M)`{?rHEqlQ4@NFgOkSWjkY#p;1B5^bd>Di*tAh8<

jl}ie#oWBf%69V*3#1YO>oU^D@k%{7@Qewf#kcDe> zm=AFuE`HjE5=$44Mq+J8e0O|i>UFoFVxfc@iTlO^H`N_3mOF-y>XKnJwojO~p;hFu zjB0IS9bj}Yu=S3P4ip*wG4{)yR!7tALQ397T|~dDjyP2P>yByf?keNu3LS!4SH*Zh z=o`yBGt%1f!Cn%y6vCrhT>eKo3t5{tSqt$eKPgE6kQ=u}%@dJQk4s!SRwWRB_1>D@ z_8TkzIDSHZAlHOg8WEb%yv^Y&pz7{ryaiZ+m}DVZ#c|&jg)+Ia&VoY9Uvu2ec6YG} zKi@EoU! z=|sK+!=h5%X?mdqx}qHOqUq0iL!o-- zruH;Jqk4KNTWg13Kv({5$_G#Jo@kF zz{k?F1`eebuEYw%6&5#g*QW&$MxC$=__D%sBE0rmMz>Qyu-aY&{x~6E&k&is+in-s zI(VqmGpp3+`Xw+~*YN4z#>Fe87gEB3C{(yfl$H>G>RKdP^D z2#p|nUeNh=a?w&z8(u?T4st)sySf!|+O+;xgwHR?^|E*iXJ9uZK41)A3sOtB_{nvS zA8iY__{dMFJr+MP$f8eSN)gZXyhI0Y?u|_Hi^P&tdBmd*He$w`<_Vir1)`$Elfv~X zzauD!mKb5i>1yWDCt0}wX(4ouD{*R(w-|n|cB>S}rlc{Sp9LWYegqbjeg>wfcr@CI z)xkFEe$JJ1Nh}l!cWWqj;t%xnJ*$Stp6BKpaA#{)vyXoV2#=4_he$==?(c$`jPdlD zQ)*ShRxkIXuZ=a|z){KyMi1M&WUlDXynE{}yB+%k_EafYq4uSZXKOE=Bl_;b z$cH!XcHs|aRB2mQ6u#J-Uz)Pd>tKOYAR?(~9^hKMU`Yv3O%ET#ZayZFi>57HIk;Ar z194xK33-Te47sOkU-WT}Ol%vrY~puSe?(l=q;=>QJ!T5Em^VnVTF>(#)7#9+8<<6K zL!r*}6NzIJI)!1aKV0y)f4*6Rg4A59b@ABrZeRGNPf(hf+E!FycU)9dMAcdBx52A- z>S`!3XX(%mIQ1*VMuPr8$RKto-V`BD;qblYe`~Fc%diwrDUT*h7Mld7#V&os2B{6sL$T1*Cr$`w8^@ z?IT#$9$k2NOX}(Noejw_|gMWFh%xaxw+0ji>RTmZrRqdrxS)B!$1U@2U zhMO4%k$*3jo`a~S2eKm37Q$dAYb{ca7$djg;Ld>I7mUFx;H3v-SXIuWw8;$-S|r33B*dqs{kQtD+g`nRN8&1tgg>Na|3?V;A_paFndy znXFKS6Lq{`P2*u3snY0)ryVPy)m2rrpQD1>PAob&wJ#OGd{9AZDnA8$h;x*22) z4i`o@n#X<(+{DqvJ_7rPQ)dG69z|6+x0O&f{0eW{lL}0T#QU1noBZnUjv_GuxJvQf zk9|#uL6p)S=(sX*yi3NSPC6b+l^Et$T9|l`iIH%jHYl@}vu2f^%`V~mD1i#hz?VQI zW7ZSitq^+CVgaz(X)?r^YxvKK^+$Um5JKn!<4@#G?-(f}0SaEgn+Nn)$@qlZ-N<}e zP@cHWH?`t(xq|fp9}xNgeAkrY5e~Q zg7zHN+>xN7E+jYjw8UMf2vJF8(QVE~=%ykG(2t*#g~kMIBRF=bNirVF{VAgBIWGJh zo#4@6KQ3GX0?1p<63>s%&XMx{PuP31gAKQuofnTbb|E_mzX(b@IO+0EG;J(L=0M0_ z3Y5gtUrC5k-?(urvl(VIPiu13F|EB8fsvqXLmP{%%RX!(jjbR9-?J?DPbyM5(KC8gzFj?W;FxKgRZ&VhY-rN1qmXeck#v zcsU_UN3N`qPqvvZK3cUm#xd!9C-bv1vPsr*X6dIHw znPNQp8)ryU+4+`XVVB0;I(=9C*1wg3InQLzEVA zfInP1-<-cC(EnFTN7v5+U3&TUO>MiG#%==5p$8P{Y+E3p6<GF+--ouAq6lYLK=-*3vP3kBOsUQS5`n;~?^h7>F|z))F_p-LeewXIv}%C{|LoZK zxVabC1os3bGuH1S7(gJ<{nN|{Gvl$C9^_##SFFva@W}s&>(1CEvt}rXpXFl^TExS{ z;K$hQad@>uiiANQvv@C4!iJdtLQ4A&qIJ6Q4V~QmMflH)_?ytfCPrgBEYb(L%U5-s zI=yy^WOF8j#S&IV;F*m7FO1gH+P{DG{`d6wN%JyO>AXU_W-t#FsM=57xbchMQ_bjV z3@_qWux@5(O7+*n-Ff#(r`+BZ52(rcYZyM2JQP9Q{c{9^uNO82yUBpOW29NkG#CzS-gH_FAvnlrPXxuTJWxX*&rC) zJbN5B1l8_;-&eKwS%O=n=wNS?5bBZxF9p9;D~k5@`m&1!D*%ni6>1hU!O3AIp{y^$~hJqfuBrc!NK+LlEkeDQg=MO>T92iBsIL&ABVe5>&lVXTFH!L^5 zP-`XnfISb&nAy8x_AutxW{aF1(fICA5uOya*s^_;NcU%`F98l-v;k;sb44(5=HIOZ6>fEOX58m@5e9LiI>yDKblY z3W3n!=3d8Pp@kcN&e7X6fw*E_3A|LDk!P(95;P4etEPfcCTl;w>t?b${n=)g96q?{ zCRv>u333V~Y@-lq3N8Hj;dQ`tykgYY$!ABLR*yT)f1^!UZTOO=)ZDV&K>E=#P5GGr z)!SPl6OJ=pI*%m_9g98cedG#sBhdSCT{K0%F{p6_70BP1-I}~OfoHi&e-*mS*?A#OdUs=G!~yT&!SurC=|%6U$u<#>%ARNduo zzWIs}S4Yrj^@aN)96wKVG}FP>8ZG*KfujQBgrSxEFFzp=U{(9`R+P6feWO#w^99kJ z6is&gnJd>|ZYdxk15t&&epD1bLXjdq=gKR(QZ7sdRdz0J>nEPQIiXL04JLwF%xLMf zcJvQ3#w}Fo&^47qXO6p<3{g?-|FDnF+sMLXFK$l z)ag{j-^nHwZ31`$Z^n)Hk92$3E!oK%8Qqy|Nz^8%>}(VtYF0I99&9}%DMqj5A`LnX zHoOo)Iiq{FLcN9!U@jvgl-gJIfNAsnHr;a}e=d;mY-%^Kyv@$=qfMhEb1K+z7kcJv zo}4f7APQ5-bQ>e8)Ph}&dRJYsLYgs)78Q1$ISO1Z;Yb(%`MgIz!&oDg7z!C*2J1me zSwX?W!@1ovgB4u?A8{g>it_stLyGz5q+D|f&z{U_zpEj`Sa#^I^+{wapVuo%U_0j` z%J|OCjZf={jtNhj*WU1EvYN;VY&Fo#($)%P)<{j4*qM* zFwAt*i!<2O^dhkTfShORU3+%I1c^iaFucvx`&UY{maE%JXBQ+@w*^z&I!q_UZ&;v7 z?E0{lMxL+$w{sy9$~1iA663`{6cgB3Llv!wK2cZBx)c?13QuR*ObhHk1j!UrL;>4X zj8Ua6Ero=Ygkc~XS4dK%iRYko5!0$gV&3{{A%;@S!B*Tah7SKNX`9fng-cn*#8ldo z_ir&fcC1uIBLB68sETrwNL3Kjzm5X3Hf$SLOtqpa)5|^o@-Jm|n_4miYUgTY$;Te< zW9Hma|5;G4W_?RHzs{KIRaR+Q;XM%84;X@LtPb2(3KvcsKghJ9;pIUbfVu_lT@>~i z2l@9;WdDwRn>MXP@vqn5^q^FmnqA;129@Jds&4UbY05>HwI$S4h;ZWki6dvuURSn< zM_7Ns*>2rG{0yHkZH*?%sFxNOEjOkOoqJl4QTy?(-Zd~n`b200)Wkl(YWYPOcHo_!_DhaP61u+jV7inXh%d-Va7K1|7D;>#c(Rck@h2OK;Y~m1 zU8xtub7xvN}^+rbMB$j{=`<@u-r52f`>L@6XQ}_~z#1h0)v+aMQrF%|~p2d85 zc;K??ejZi`n__?gf_s2%Zw`oXA3p-n#o@&1tT9 zLb%_sR4S)Dc+POSk9(i6>|n>BwqB@p`XjFJ&u;)}u9e(*{#%@?a-2N6yw%qPrrDGj zcUcN4c?Lo7C;aGb#xLCy=Nx{%f|$SDa<>%P`0bb<%Mk$Sl*zFwx;Xw9v#2V#2qFQT z-`w1QSE6i)l$=QU6_Eovw+ewy){rJ~U4~Nev5uin8L3(Xey+OM{2TTs;H7wIB0?F7p_I>&0)L2WSqr=*885dUC~&81&*C+Q`0M zlcR5%aw5;ElKFXn@NUKyqp|S*Mu@XQKKc9X(a0d(&S|iiE|6RDe&AyM0r_(9UL4nd zHJ=|ri3k3OpH#>#dFI!M5Ou|RWk0_JlHM}gF)G&X8>tjr@|4M@VKL00T+62AJ=e(9 zH_wxb-dyczo!iPM5VZ~Uoxpc@CfHa%x~D;OsXG4tCv@R7KG+NlvEf^~sZ z*3Rr)l%it7_bFNG(i8o7FdR6vJ{t=AG^OFzC^r&~_YHGMiJM+Cw);rLaVCB~B@7EK)S2s!nwtNwboL}cF8`-gmWO9v zJ}e(@M(mAztbAi6M(4hhjT|Bv`+Y{RV?O8`j|p$?5a$6ahkLh=_q{_oRruq`B8?L3 znEGlytUD&XRJZ-p=>*Z|3QaO+>3s^zW6No7%_n}Ui)wBMm(35Zm&17M0DBEbsgAJViSsNz^U%>CGI}>Oj4cr>)`(B>tTc#xZJs z^h&$!SQ^EzXPIk9G|JE!Ep9P9UD)z}P)r?L8biUNMwM{L zu4CBjSAXsji056)uV0C+1N6VGI%8-QcNb@d?b4h4Y@Hy8RYEysalHGhYfsn%7b`7`u0}Wj9t<`d0Jb=mjFJMpO*ij!? z-ar0mo`W1^s^(S0(`Env5espEtl+m-**$if_B&`>S=zNU;a?-{J*A`u-JagelwV7f zT(hPkNyn{+cTIgwg&0^e2-uc1BLCbRZodQ6zG&Yu7n%Tx;=wVU@`PjiL;2JD@rK1o zhya2QvHl_lSwI*hGGldeowVotITE~0aW;@Rkl9|$PoVR7mL0_oL8L3y-rw;AUb3M7HeP5+jv%RQ zAS>-a4QN(t*;{!wF`!I>9l!rg!72IkejU8-m)Yi^`4O-{49Em1RJdbRMERz~Wi_G& z7;wwwtTQ;zM>gT{KfZke(`{g&#%~oYplK-a+fGE>4Xy*IQVrd}pns2UGZ|MMu=hjw zqGnD~s*Iso;dTg&Wz=2b!F7OPv#m?Yabgp(X{1M~)l!4LQ^Wy^AP2$W>YiVkQy`xd zaj%~du?U?SUKvVbQkJjV=53+}cPay+NB)yfotFmw6G@+NdEJfBk7aroq&Le*U(z|b zfVI61E%G%Z&;cjz{z^-j8hpcKjjD{CsL}2NENWsil5yRZ8ld0hTY61CT!zGPx-g>P zh?o*_O~ji-4UUwIHZ7gh1HoI(&-2oit?5pu%ZgoCiWK)DLDtB6s^Re6UN3#mLQ2va z+)1VMZ}hJjRoptNlapKr;?C0tK$wtGs)%$es5=7l5=HVa6qECkj2LLSSQioLud*xW zy*sccW)T(se=i1<82tYj{&%*y>oRVgh_j@(=B{`e2?eh>Q*pQL-sdq`7&R5`+g|9Oo_O2{mx0aU)WZ33e z{n$1LpnMxF7CvL&PN>qzq$`Q5C&637o`s*^hS(war7>vtr7l^3IvN8|vO-P&x3pyr z;^2R4S|Z~QHL{`0xEw`D#ezf(h-NkR17|;6o8M`z`b}HEmh*)k0;q%7{`hH`Pn$p{e-#MRF2fKLpyII3ZuZD3X;27dd z`afw3Sr(cw!mL|dqK+7A3?Yce>jPhsj1Vcz(6OVeG22H!!5nO{O#W}*; zC;e9abGZTO{omPz;!FD{4DPS@AV0Rb_G~Y19If##GS3I~W07);5$K>-_CM{ir$YSx zlbf~b>>gaU=;FR47}bVu`YEZx7SSK7GdI#XT-zmz=`>hlyr44C-y@W@iPDii`8iqp z`t+iOxVJ!;mY9!Qa5xkmdJqZR9kC@tJm@#^ZR(N&EiHuJ(`QJM?s`|3!^`P~=s)J$ zdEe2QYC(Jli2#3T*5x0u`?qPlSxS?fU2aHmQ!eSQymDNn;%^QH=1wo;STEAoMo+3I z2SPuvm&uB1(EB?_PC71eYk0{&tf%i?B$2Hj-k)*)-csX8>--!9RRe91b`9$^zd1hn ztl#4LCywFO(u4v%Dtx%Rs*pGfR8yU9CR9UdQ&^1mTQFVxu}-eFVb;wSdCV7?Tw*hv zuyr^I3e)I&&^z%RKBJxKe~U&M#hxJUa}a3fFALr!UOz{peCP!AF}ECGtVms&=3u_M+(**Z_MaOZZj(L_o}Fh^ZXY*; zkDJLiTrLu38ba42FqWV1jCxUSmHL)~RB=z*Uc0MT>l|y5+AN6XQxBp2T%Fp3*pj$a z2s-d3plIMIrTjdwW?+U9+%q--+gEfXY*v_V{7qM~f3@zVOf_`IHQ@KjQG0PmY>rknSP zn_Lo*1y6+dDs=_na9CE$iz=?m4egiHIvcyE=sL@7hPC*t!aq<`Hl+kTuWU%?*QlPJ zAjAcUi321yr5(HQKJo3QIyk<6a5-J^uo+2c--rc$S35DVrohQ`720yx79;&awK8zN z2lElLB&0uJGXxWfUvOi_(3B4X0tkW;4E)#*E2JX?^#7DG%F$fe%kNvZs98tdF8fU~ z(U2uJyx>=M?`os4&1}MALX&PK|KutgDwt+U9;F-_i!8nEgoMZ)I}kh2S+qYzm|Z7K z_43+;t^Ok-{T_J%p0BQ;{Hes72thg(007WuBaQx5NLRh5#j0C8)ZWNtmnxLKl+~9? z&$PHS5`Z7xo`oW{d)x);B-PgH)d+{~#aXMc^Dhkt*)G!Rtnp1z@kO{r;rd;MAVUui z{%xFe@{mZyd+cBifqV7{=Te!d9e3De36x|LZZNVQzzTIHsO+hrxT!7p33L=O-V7Yp;w;O!L5jn@Y9U z^LfH$rjhljaP8pg2Y#uAtbj*80E;vDQv%N;^ZNIIn@u!ki=?iCy0H4I-kBCz5?K5kDlO|_bX!)w$;+(N1iK#;87 zDsf zXNt7W7I*soZgCKi8H4PhdC%C9cDP~PGYXz9-81;_Z8V(MJe89hQQGz6c5fZ7kx&YG ze~M({`Q)+a(JlR=C4F-Crl{R-CIC^e&_C9XrtMs?(-ego97aPv$R&VB8W8_OG`%n% z9*cUGi7v^Il#{1W(&v`8qj@N?^{^sx*>~f}X%BsKZf0N6f?2l~F^_9lJS3%#YfcW|AofEX7G02qH~{oWHId6((tP zSI}^4!|duYI)w@B@icwnnwx`UwbcQ>!A6qB{|2ogo6nJ;00RwIJM*%T5GY7i#~H{# zN{D6O0Q6(et)V07rX95-=fPFb2Hn-V!lq-$t|}&xE1`}Usp5~1mSg_`4T-cgX*DZR zBqac{WP4@C2-4D2(n`Fr`F2U-3SgW>=5J* zllQv}y-7@leneKGV@ol5cjdK9jLD+MNzq{LViC))%_|t;z{i$nxQk(k`UQfyh?DT+ z=r?gAN&STmK`L_R4#8n6XI>X(y9r2gxL`x_+1h&-%8ndpzp}pNifgw9Ux+Gx7!w*4 zN}?zfOuFCE>|(T~zoLC-vD42h#7#PHAPFQa+~y8qCeY2jabG<@Ygn>~5Cv5$52Sm| z05^yTH;8yu&*|kDVe@;={YS1rLWyH~AB*K{dG%Zjg5tf1euJ)O1+~+k#3dZEe4fqo z|auC;HUJ(CySF^oabM5BvEZiKr!xR?^dK72+tF^d8u` zh0^CtsPD|qZ_q0flCiImEQEn4KHQ<+wjN<&fN|NpzyI5VfPlN-%D9!&<#QMx zzlUVE)yGZ{Z(gGJN@qBemESFg%X=W!If)l>0N;F)tm7hjIvL#_m)6J9;hh8)EMy47 z_)NK$98APv)vOUu=mN2xmhv83vU{jRKze-n*yO|cuLl!jho5eRUpo}Gxyf$O&fodW zQb?Z3s(Ghu#cQgA;r{&fmx?)+!reH zO$_KY#a#49j3k%&p2P-$*$(Ge!Svo=AXW!cKmdR&GD$_h<(c!J16gDC{whY(p%NNC z?*%jBqNU-u0sq|a!S@t%BnDh*kI4|PrbGKL~1 z&b$XMA}#n#jL+{)5fieyi`c4Q3+>L3_7s((YTiDwe3lk3Re#iY5WkW_yS9Q`LHee;1OVq?D8aHY@;9&^(gy zxTyobjoW^iR~_=oZl$Y>FClPPq5Gud&ZFADbI&^$9z3#uVlWO2qn6oaKz28UQ%Nge zN;LveAi6oO>@N53?X=IYkxnppuhVQ(nNUr8@@$%$=GP=MNVDJD^Xz9VQ%Oc98&ZsA z6hUgo8U9)qmdfovRi;Qqdf*@aZYN+Q%n+jL3j`y@*iEx=T;>k=dFF_H9;;x%%qCh)vrD~WETH$~ zqoAS(i-TUwH#rJMT8W1Yfno=iidHKZZkD89yll^%vB8|!_Te(i#n!l5YTy?w9? z`T+m)SKb{=1W;3fmWeL!EbqJ$G{OoH=n_?%Tlp*geV8jKjZdQOOaWrBn{rC)Q2t_nvf-H~loo(h- zYmH*+$5Y?Usw50=b*H9Ptth0#@4m{2JM+B@q}FN)rxf1GA>E?-EAGKD-=!;%nt?LLqW!y)B{OCOfdIEwvAzs zYVrmN%qI{56jP+SS1uwWZoEJ%)UX!6n(hHbn7E`{=CEM?T@xK}rUsG!7)a@fn(y9t4lMhpn_h=;q!OIIN`#)QCM+<(o7k$Md}t?Agc@+GcP&R)x`g896SsN7^eGsOs0b= z0_DHoS>a`Y0QTUhA}=4;3{LE=+gUcYF;hh<<2jJWhV&TZk+`qRIH}93(U4g7-(4+z z1nz8tB^ovQUeD7{SW8hfd#`C+qlfZ<%>T<10uqM1b14fR%0_)W1*wREXJHO#hOSa zy$uI=HMb%bF-iEta^u7l{Agz!6&+^~^ND$6W-QN=22rUl)*mT8F zizc6QSnw%4B6pb!uq&iT%dm#hB(*YtE(?b@~WTC1vd9XxzbvRFY6K^W>K(*)G*!Edn~QgqOM z=%Bsgs_Kfj3`<>%V^x4@neI?4HtC2TsGA%~N=)X4(=h2%09`lPf5rFS=ij5f<7vrI zDdMwpe~HewI1qWVMkr+gUC8%VN0`yx$sp#53VLg10z^{(_mXj< zV4nlraAl7UniIwr{UcFvvPhcnY`owOE{dbyf9Au%tBbb3j%s&$(@`g>b*7SQZ}7dW z8^)D?d(KPzu1Kcqo#83>+N(bd4)vF$_p= z)GUSv)E~8@;ZrQNh2yR{<%(Wqz0tyY=G-67oXk1v!Q}b2LYCub`$8NQ-WIDeoap|-U$o5Gi*fl`Ox>`&`(lW0#r7xi~I8+A*9 zdpkN2Tc5txIBf$3lcA>8>7zs+Wh8WHB#svY)ETTmWEz#e!-sUz~rQ%$e-hig6t8M-ne2dxlMzgxM^YxN-bWhc$pLe0nsFq@PwiY$K$Obb|$D z@%+Uasz5J3DP*#!9R0l!3Z0C=lXA9YD!yGahzmEq+dAz{{*`d-<~-)Mhf7!*Y`|rI z7UQkYYc%MksV_TX?6+A;BacZ$Ej$w{6-IZmp9a7o&qHDdadBrlItv zWsm4%A_`fb1kQ&abZY>}>1H`ye_lN;60*thnjHPV&--9q5lI#m$MPbBg1MzH0D>S> z_v+WeH*Nkq?K%Oi-p_nWR{`#JGd0OT>0>Hu((TWm(uE4l!axYoSGIIn)C>R-NdA1= zPKHL$-i~)ZzBZS}Hmuz$SO7tPowwPnq_ZgB!)(WZ=;wESZbL?6uCD~8$OlHxK_DSg zrR2Dc%(t(EpXus^JdcgE?VAW+77JC~*0YZwWQ%X%p%CYB>*5HC7zEnQU!RY)BajU5 z@0j}U>mv^=2p_}T&~G`UsRa9ZTF7!SvwVba_s#@qQ>&!os{_#atj z;}1Li80ua#hGx!zb9`Tdrv9S$e-}S6ynk(TY2t1E#q+JF1QNDZr*KV7D<`NUzA^$Y z3ABGMc8SYwNjT{HyU249AHj8+PE2fYy3hO8Q4c(X{pUd11btF`i5-r{uyMYAfft9?@VhW%8iJPFv}a{lZa7IX|)Vu7i}Snh?qZHau;Z_UW3Ui0Vo6vQCgmgCj+kl~*bi$0O*6j+N( z#Nv@eqs(m&l9Q^X*f;1xWga}mF z2t!(hosuZ`K@TA&b?zsyRA>?}1~cd{X8{7U#v0*a@VGofr{x0VjQ)`7osxd7O%;js z(V~MeB3I{Vg_~nC6;qpvi5J_u-CW5p*A0zcSyeDrgdl=IFN1!MRfBk^L4kkf30SGa zVxW)nQ%ahGRzY29zKjL!h5S%;*yoh<0=3?hWJ4Q{$5Am=fe2^ z1(vL#g?OMNGe|ggUMW-gELP&3L8hmc;I(6-#V?EL=q_{e;JJnS* z!|6Mkd)+Vc?bE|%!k~;3>~9QHwV6M2v51pXYT+Pk0Qo+t$M`GoAi!9mGzvez+ZcHc z8l$5}bga=CE|VarWOOE&9L1dDDw8$NEgID;wdFw5@-qBH-5oxL&9eBv#>m!QFoVEb z7PUa2k#KaCh4K2mrGYO(0s-SwHFtvfBTqJ>_0Pa}L;Arw<=rB5o|6)*nFOj!8g z!OIt*z!zmLl)vt)t^#+7997VJ3!*t?nfRN{kcGh*fuT0LUmt&l3j1Fgt_H{Q0=*CF zifXT@rZyIqtkdBEiUj2b9c5|3^3i5hL-t>ng6Q<|dX;UCPPen}TjE3tvAn!voJcej zNLCfhFV+q94AHQF078n*#}FRNAbww88;lqhxk zgq0Wg0L1C*ztza!Mq)(~4h_Bno*0eek94UnQ-zi5IM(+}gCc8xR6?TwGFpJB7px zT)gSIbs!^z9z*!#xG>;%B!aWIpL`%|Muep@wjJUPDnLeG{gl1C7wPgcq64I>)AjY| z1~T+E%cJM$V6?z;Vd_-PfYv85xO7l7_&YEA7!%5>=*xw#f%yNoE^T*k9&W7j)ATS> zQT7MG5on}0){v(8k(ai8tBqG<(u~XTo8e+wEyd3%sw7|Ou!=G2Dbt1{8#TXeLnFb9 zlTTn828N)2Vbjq^hm(djLj^+LqfH`YP5L0~>vvo99ECIxF|6c~tehCUJ{L-u8uyj3BnvV!&7`Xk+(=*BcoH=%_q}A-D zy~)-G%$|WbiXAk7M5NB5l9>IAc>jJ}m2f+RMivxEW^H!9Y~ZuU*2vD#TNP+T)~jKg z-~CCXw?{EJh(4T}r4z_IZa-iDFNIdzaLMlmcs~chX2!@^lyAilP@imM?!T7yGcl_1 zOq<8_iOLqvN5)Pi|4LIF8lymb9Y{$i47RHHU&Q{gmX@v%NBQ}k31kS4XIg==W_fi& za7}&qF=QSZ5xe8QX*PrzPQ};8f2x`s6T!d{!t8j~fc5Of3ld8pfWWOOLn!p&|1uw# zGz_O?n}lsjtib-qx7+E@^MVx%g7k=CIH`M;P#c-X_xX9Ys~egzPCsAGBF1-9srwzV=4$2iz2X;f z5U}W!V#Z)W=>Uov(3d~tc$T`1f2Va(tOVhniGa&V8D+P~ky+NSNNF%V5-bNQRl8!6 z8vjdP*V+NY4~QdJL8=va^n^nHu*}UpVZp^Mv;Qp%=y(1_T+3Db6%7+T@G`G91Jerl z%kLlnkkVT2Y0wF9l6T0!lVUKAS=9RS?EiLu^jooDT#vVmA3t zc^Lmr^S}4pBVl&sK zZ0-uNbCj6e$&B)A8?&_MP}numJ}Px_X>$4h7n&I1^B%)$f4dmeMJQ9P7!Z_`(XuBfHrfc|)MML5cpsQelw6TNbu3usk(`_O z3Yh%Ae*nN^s0(UAzcB!#-m}%$K48Q_%@AyosXZ@PdKY?Uy%xYH3)(79T9a@iP8v{r{l)4R!x0+-TJY2vgPoYismS*AO(? z@2n%N?qRdFtv6@oq-ozMRa@XNroA4+wD57Nm~ge2#ofT|poEWO-^gVl3Bsu~y#%9cQGGnt5))ue`|+w@Z=nvWk`b!1u`k&kux1%G@fAAssF)tB%) zb-3OVncfX*d>$_^W`II!t1_h9ET&!0jkSt=`*iwTZkKKMb^2ByDtnJzK6jT$fzRJ8 zjbKezZzjals-12%zbb)nu)hsP@#>J|$?&IHF+yCP`WFH7hXVroD4BLI#?XwX6Vdd& z@79Y;Bg%E+6)(^1GiFm=rhSof>z?3hB^21W(`K8w<4c_n@TZ5dquF=I_2=_pQmNn{%@q6d}H_|9+c+@$tq&qs7dTRpg(<_0314m0^qZp@a} z7Bo_8A1nD;*j~@V2-q>+*Da-}SFl(RbOH z-(7@figoN8OwB5N`@XwF{uor;C8n)GTD99{S2D$*Xd;!IKN5V#5^N}Uj%9BFUpQ;wb(SzHEsv!4S$p?T^e;Ry=y5jsF7`ZNP;mC zyeslIAZsxROYD;eVsZQV|AmsVF)HKPzfXi$vJ7wht*zV8B^$8=6N%?Zc$nq7S;0GHC#TEmyjWshYgOUW+TDP{hfX zNA%$LIaurk>A4I2VNLbz>~2;Q{TkS`(eY-osine_mDusfp4{WgVn()Jes80`HJv!n zS##eH3u%lnWqRF{nZRR}?dH2Rkw_t)MyB)0q(p^OYc*Or!BwJ6W6ZcL z^#5i~L&cZz(qZ{(#5;4ZK9S_k$DQpg>f!(rZ?IWT{__3Kp>=smT01F)Dzgd{r6K1OW!UF!WB8 zVN+=H{#Q6u_v8E*45XJH;rYyGNi7X_Y;3f!$OPJ%rCoFk0F&L7TJ~n2DxdzURWiY% z2}CEW?Q~-0SqM}RM2iK_d@id$ekwn)zpc&k_5?R}i3(x7-69L7+35!+LqkRM$aJ3c z-d6zhH9&>$kKMB=`PB~t^ zUD>>rRZ_O4$tNFuJd#>iiqUmE9j1wSG@gE@(vH(|7rSCEg`jW!J2^?3JP;kH$!9uH zC$l+^Lg^Sb1n&xPJQkcfq*xk-{&1dLdlR$d4f8gO_vz1su-WwoK?R)GMN*Y3*I1pu zpQ~!VOEUDn4TE8KR$NgmqHrb9pR z0<{S+>F$P9d>m{OOa5Ri2w#5i7ar;O_Jv`Tyi~f+11M*!@oiL?Kwai^;Vu@WuIby% z$$F0eDEassrp5D^P^wG=Ut^@aKfmDkOGU@|xJx4(Fk%!eFIS+$F#3HR`A#g&UgpA05PqBhZI;fg{?W0%cU-?1pmOT<(C??&~dq%GC%Sy||gir$cBQ z)SK?CFC{|h-JN5X=N=!}NZj<}p0tms!2PD404ypQgXV(4^JDq_kc$OA4b%ong#L$vAqo(8_>ec+b9bpSZ9{S4WRD zFr^aE>t6nUv&ZWb`!1*wI~y-f(U}zZ#3{cw*tuAauj%zKoMT#vXYD@tq@M^&M5ne{ zEh;w03E7K+=ZI?kdP8R5q>`tlxyQDI^z>&WtEbGUGp{KBvd0eGuCHqr>~sy@8$4dOrrl!}C^HQb1(SX* z#3Zu9Ec*mjGX6RGyDD82^MyX-8!M7G{kX9(LWLgiFx>wTc>8;&-D-lQL8$5#5z?nw zvSgQy84UxEA)JLD^>iVpm9NdAB>XPbTs*v9MEzY`*oB&ut-c6g1TPf@w6uot|JEdP~zek?f`$V2sg*iTstt) zIltLy(cpJndW2J&m)$Drel(~rNR zPL9Cq{rQ)cWUjZGR9R)SXTDgBl^5DH-wu7&zc1n^h#G0vZ)chk)8p5rqDKTimoXQu z>wyS9u!$R5el_(7Mqt;dt!h8GP75 zXX7_Pj}c(9=WjhWuF2b2#lln^$imiX1feJ|9Q}7? zD0E&jVISP$y3%Ybum{s+>Wx3-1bY7U(7a6JE$nEF3#=F7xPE;>jQABQ)80v@-G{w3c4H?0%9sRqf0wT|_f`qt{FRf>K#@ z@@w=Bjh8hIN>KW{pwEAPMSW_Tb9g=M^EZz&7U)A=xq#svDas--u~0PQ^{%J)^7^9zzng<+jn0BADgkkz@<0 z=-JnsSS+Z6Q&>|~T^19J)N3~0^W}`Lo4G$*FHWfpg@?)zcys!4NcyO{=pb|J zIN7TQZ@7i|AfXaK!X%OveF^%~@rM}?U0B?^LwBnxfsyN4<5j_9~|jBRklxpvE4TCD>-Mgni_3ERN!x!DmN zl@1_L{n17L>%+*R0;>2gLhcrO6w>~i>z{}L+Vp1XkUI5et5rqUMTWF8>t4+qQ6egm zNhC`rm6G72UYWWIwk$c)a~1C_cDFbKoU99Nz&@6y7-|$s35we7BD}{0pcnJbS@heH z<*Rgnfx(d8RitZW^Ao$nv)^q$Ox?M3wBKMoOrr?%r#^W;dj9oO`|&lrSpW*#Cyjgg zO0#0jUjn8zgU>DxbQ2040fsQ&8-DK2clX5qZoJ4-*8jW&_X}SdV&dAS_jPd_G>g_d zBKBK-hL@iE$N6gBtUA0Dvud8DKO0=aKjx#k$;1&OrGa}P%Ak;4NmIWEULVlMWZa};=zivDL-F?+vR+ue%W}14K&8z z+00JRDuPginE@bwM1)YDC5PfY{+Bv-M1vi7UB#25!LRYNa<`;#nqYp))m9-5e12C3 z<;pzrBhD&XHK!qLwX0AszMdFg`$?ul?6y3<77khyE%ltQwU>3(`n7S0HB(@_(T>=yDw`voYi44Ntk{yii zXL65O%~0Lhq7Qn5jjcZgF&Ct!ws%|7@l8r$?_Sf{f1)t)7Bc^wu{^QDzbMWXWZ^P7 z4G>i$xRHNF6+9%K81ET0UTP^oJ!W16(?Tvga~4SS4SrqxY@lEDrz)3P;J7Myg(obz zl$Cj&q^1wOo{AN|8*|)qSZh1~HMUO_D_@XfnM}hOdXcEy#zP4l881)4M;-b##IfS! zuTvBBCCgCJT8;5KehCi94=5ylEpG8KftmouvCFPZlJmT$Jr zil32w?n}>9KJIHxDzllndJ9!`B1F)Gzs4o^V2>v77Ohw(pF4$vT>M47yGGq^ z%*dj=Ns10h*#h?d^;P3&T!-OjJWXyvY|XYM0=C$5Eo{G?8+Q&X79|Es?f8Fr8#kio zd7D;a?gsQrEg*}dyHvlYfK3%9G75nmoz22fLxf6p4@?H|@KC8EohgT1v$NumaY^Il)gq*uYWAzJ5>zbc+t1YMHsT) zweB$$n~q&#=q#SjRjB1Ro=yI0xG5TE@zFwVwIJ&|6(QQ)Y4rTCSrsQ0C&{ZM)U4)n zJ~07d@aAjMBvKVEeQQf+ikQ~>?xd_Mi0@T0bB(s*6H38NykBHMkkjLTnrjw*+aJiv=MUZ1(6*~7 zjG{@i+x5)o=n-yK&$Y4b7pEd`q2ta#Z6!Atdb};wu0^2727a5EQ2q}>1A4x|uUdI-Q>W{I_2Y3W^|h&YQC4>-uA*> z)L|9VvO%qAXjH-nPUhK>??R9`#5 z-zJQ#UsE+=Ii%_(VoENQt|XSe3rnK6=pHYoj6Sc_BzI>te=pT-dHy?HZ1z7M$583+ z!Q_hQ(>Wv8c^BS0yJpg{iBcZ*cB*a_mz7jNl?&!9D;s#r&QZxtVa1#-#BXMtqK-@Z z3QZg@C&eQknB>g2oV<|G)Oc+58?X@3{=+`>{c6+Q7KSP+-pK7~th55Fcjix3CaU6_ z)kS!27O#Hd#!<{2awwrU5p{{@DAfkO4w+G3O5tN_$Hx}9)!;XZoU&3gX8oA3n{?Mm zDcf;;@`#i$t_HM0*J$B@)n$DDPH6&;dPQ%l`Y5-y1vQkgvKs{EeMy?J{bK3ltG;^@ zszKx*HSScsU=%>4F?0}mGqb761OaZat+072%JGqwN@0&pnZ>TuYRY`<$X2GWx!DJ;dh}zxX_rRm?`mz{gYLTS!)JFZA)$%JOM{bXD5Ats}=mn{N=jJg7Z z`za{;l7|{6qoogdmlr2#a9W-g-Byx+&Bu-E-)&165M5Ep{|^0`Qrqmpe0LYohwta} zB2+CkL$F(3o>NJ(aQ1E>u|1h3mI_vhrL!6gGw`bGl#&$n^DDJ|;(hX3?}E}5ma>xwVNGO_{zsJ!R9;>TNWFm3I%{`_|9d-cZp_4~C`XRnw_cg6iYtL{$?i!;HB%R!-RX|@bR4q2Mhgl%1)IZ9N0j@<1v()ZL z04kHU&^-#u^bvZKYXnla&L)8a2R>HU`*(K8prEiQom}&6a9`~rL!0Y=WK?-+xm^yT z@l7*7&b%w&Y`YrZAUR7Ut}~5}KK657qg%Q6Eg~T;GC5~E*2au$3T~>P6%gBvF>u*l z8thYP%4mkac=DgF+rWN0pMI`yb-VGkk8}U+O6z>}Av9Ah)MpnN?dfXax6H9_{^P;0 zy>X>8cEP4*%VmzM0z@<3Z#@9}<0p7RV>0Dh8*Myco3XIg}i;pyYsw6XGZ9OBlu z?9rDFlb2;J%&8=|aO;(`hBinx>^=$nWb`|!-QP09^F}H2L=y0JTtdz~sVdLh)wv$> z-i({7+;n%h{j*)(=;-(-9j?!RPzQPF+m=3qHXSd2SjVc~yHO<%*K|6T1pZuIo-^Vs=K#rQDtr8IaRa*M=camV$u0wGIwow#cgX;@ZLBIy0eqahYrag43ooXPZEE(y;cG-Fbq|Y$&x;HBlQs2cJE$_S@_t zjR{%2u6Y%|_uf>XW>q=-G}bdGzedfo`jl*P6fyt(NA$IG_#(0UwV*$^%6io1^P>e& z7~|<`;i&Cds(5+F-`oqkM%niG(@-zd1%Nw!Y8S);1#YSK2A6)K- z=P~jd#o^N5Ddjkf1Dij*vejBwR?xAhR3(JIYjVhVM!r^Fe%{?@T_R1V(z{iHF03pO zF^p}Jzq`n5&_HE*Zo(;ep_fXb6|GTt=Inx}R798gIN0qkaqM~W&^USgF)z9kX}A-a z6+f^$c(3tyw}*ZIX?t=Q3$}1*T{X9y((B>Um50l>ZV&vhdvj=ds9MjaR0B6s;J0G< z>7NJtK&-qrl~wn~3nSPMlXf{%;moP#hrA@TS@9iSNA##6QafO#36Qj}dN)6>;3`V- zOy9=xEkUYeK@`3I&fU3+st9@KtkGEAZgm;Y;o}R0ImBE29*Uv`R_21PerA-e3RYjN zKYWIt6|7+FsV}TZh;|$cFsKD)IQA+5StQUxJGSDa!<&i4h)fFnDm=#Zb6Ke1!@3a< zPomxY#bZ|Te#SfJyVS3vdb6 zqm-3>+{e<@cLNB8R6Fkt9?Q?o-Tic2y!EXU1Wk%D$c4dMjnN9JEM)f6 z;BlVfrC^GH8qFis*P`^iiZ&TDPx-9oqQFFXr`WP}^&`C1#CwzX;vhBgot@5Sp5vOD zNC8jPK!U`b*9)Qd9e_iVIhpc6FcdwTY^e6Bxto*2I3nTw20KA1V87?)RmjI-Vf4z5M#s!S@h5#f{|5B?_w zbVnPwc7?>~UPqLj#xud^A?4FVOme^9Ev=`2>gl$2e<-^xf8!jwY>IF{4A(r>s~@P4a!5&7->lhev@lX7n!)%M0# zPuf-V88Op!lu;XCL?v-?Q$&W`ZsQZmF}8AVjvJKn7$VhYYY3jf>7PcZAeUZw(N%Rf zjBV!OaaJ-cM4ngf3fgbQ{BCzy06AT=b!dEHjd{b2?Kwlvyuj6~XMsGTJYP`O~ zK9F(xlv5y1{O|{o*gdFjz&k8Unq_-!e(a~e_EDk!tTr#_O}E#d?=S)C3P(h?a;+b* zlU0MK`hJ0qf_S_7WVqi_|2m9ua5C)*>rc_r)mE?lpl?3D#&Q+wQp5FkPR{tauq1|Q zjae%BE)v1(B-b~VL@2KN!^mX&b>#~udN>1(YrXHx#EdmIHK2Bj)5Hyb8t6itu3M%_G(aZ&M$(N*o%sHwhbLIZK7a{e%?l3+}kGq<| zoTBeB^Lmojf8<+#fsbq9`046WnfDX>J!vT&U@5l5+_@Vu_;1et_UPINY zUIi-dQJ1P=H8m90Owrbbuejqv^@5^pAw<>c!`hM?Ngk|d%(9`#M~Aq%VRt0TdZPK6 zco$27ouXLgWB@zQW`8`td_gyUHC3B?|Mu0m6?=p?q2Ox!vdIdh#o$j9520aTPIeCb z+yE<@BBcz^+giHcE3ZzkobW>YGJY=S`=tDWVZh4mP#&7baKqsi4({jPnwIPHf;@Hw z-8JvkEL&s)h}F@Efq|CCWj>tB^|-MCeoRMPlJ#Y6k0IB?+qVv_0?X@?A}kQsm}7OGlbXtIn)4YwI@QogbfoosDtb$`9i% zi8}tfhp9}#dinvXWM$r!rpvm-1O@%1#_gbxl^KERP1vo@Q|;E^{Wftb7EX`-!)?xj zIll+w@v+ZOfq1E+`cJe0g!i(;fYHJ4Q*{^Lm*4bJG}?!u4J z`+eH8)i-sJ!nT`{1xCWutlOjIl{pA}?NF)d@pvmL3~fcQZEeMxuKd<;^Xt1ON&btW zp5QGvvxEMgZ>}{_I-G|#_D2Vgqo&Mw2?Nh;F}d#lE&uZNYc=MOcpq4*E+aVl{C}2Z z^p&nu_j?p9vNNBK?o<9XYwKbRVXR`S11nc8pGB<^-~bs6VYiUsLnq5>U(R~890;(w z!9Mb%pWm^Jbcxs6pp5J^%Y)Bb;ZWsWl%-Y|lGz&=8tqGebYYjPGlLZtr4Yy+`f60s zZS-*s@)Ndau|+nw$TgOcy2T4;vzJVW}bxYn4TsX%vxE$_hwg#=bTPwwS%FRxJEz_nr941iBFYBfc?9p9BnDqYbSsRO-bCq_ND3yTgQ)7Gt*N`&BliFsd zlVUrZ7nI#UCoOtRMQf{ByoPA>qWWahe)oQWW;8$cLAw))Y&EFz(~f;$larK3CPbXN z=@5YuPmr+Wx|PFz+)!D_rhG21eLu_f(7V2(@fbN%%-Tbl{?^sJlD@v|E&IXg+awFG zZrnz*QsNR}NvpClSWjQh!0|g)+|5cbX;ICvm3*k7^Rdrn1}6#RV2h~k9?pdO?XRN* zz&q$m4>!#_<(x%RPNl-Un`ebs5`p35dH9o5CFpVVuQr93<;LT$Q-#e(-mqZD5yW7_ z9XhYdZ0;6oMn`2FTOWBiZ7u18zO^-1u-Xn;h?gGBeSNKFM>CoNfsh6L&mVH6QSVM- zXNnWj#+}T!m87u5-z%Dvpzsvrxi#+Xrgy!;2BXMaxvRq{-u_VbgtL4SaXc#8tvEvR z*B&fk)2t31z)vE;Cwl9ARVn|#Ak<5LmzCF$;{eHnVR4Mr&Br%yjE0ww!0aG!MIA3wb& zpGi>fF*O|r#}YqS(m%_{rir{awJ%>7ifovQbZk1iK>gSs9k5AZAB|5Q7+O}57MWqv zd2>IH;DlKE^p?cXMuH(pzdD@_7puDs z4fBH=;Rg?08c)4etdchvW?T$?#)04dIzQ6Ig-8P_+NjzK8_K!A242^T$qy>+P(4__ z%#_G}r(eHKf}tSLcGvCGOH5?pHQsUi@qyAjVU#^Y>}?CY#y})qRVBgA*S=cKd$r!gXz=D06*UF!*3_ zJyR6T0W|+bw)eujz0aHk4kP~*9MC5c@Q3LUe*KyghtEpVBLyuVhi?#LCJodk6jhcN zAAYun`{)%M|Q4V&c6G{3RjP96AW3lU7Py%2b z8;JCuhXCXtE=p!sw{Xa38}L3#T}Ekpp^q<8vif()L-V|SX_(XsPxNJbBPw$>7}#{Y zIVJg|v;(w*^N*2i$43{vf7S+b*M5_)UNRn9)Nvq1)T43uho@#8#xTVx43m40HnOzF zieh+y^Q8jBu8Er*3I^e^gsw*jJ{8+dLykrcwwF`>@}O|Y)e)OO^qv*oO@q6co0+%D zaoh)u{ua(fTUo@Go|nRfq#eLYV?>Hvq2-Un#F8246O!N-E>f3(s9!AghU<27m0nDA zwkzrBKj41fI%?@n=JYMqo3@|UUu5v}dRI@30GktSFOsy*8D(Bx3NCVq@%Zw6X?z-Q z%6xY^rodG3haaIUnzB$$#{J_E@3-sI-x&6C+(~+?4LIrKCWU2m-UQ@<%tVcG)Ww*n z62XtIA>?Xu4RD;%S2KoS(s=(Vkp;ARvklY=& zaT%FmK3Bo=AsBUt$%Dpv`pKYdpvIAZ!3@(NO!%&+(v*rPOrR+;Pt$#p>wX~hj-?4 z#Hj$jJ%f}To^lFgSlPpQ#D0lMxno3|PmyKUllRT(;fPgK+nu+}fsTRiRvW@Yxm40h zrEzIG^GZ4HiW$xX71QxR(<8h}1S;^fmd~*s&$Q&F*U(@(IH^#|k5?T}-*6DT`6@W; z=8}Tqc{p{6F};a`QGX+%Dsem$qJO*2P<_5L-?w-?lYDL2NDs2Dp)6=ee6p8^!OCWq zNQdEjuBilZ{T)nb#V8XY@fu7l0Ku9$5M5e1Yv~D)k6z#|Ih+?KaI-5cK2*3(GPPpf zuD3w+fnsP|?P#B-g=hN)o-cNxcI!A}_wMXCW|)(rH%*u&rOM?J#)K!r zDR^_q?zsZ&<59e_a-PKR42e6xTM}I2+FmHpu!Wz#fR1Q8^LyXJua9-Es*V#$Zrc!+ z2b=fysZ`mlhMSlk9|Fc<%f7dp^Xn@Qt{ods>00MI*N{24{%iYGoy#2&LH7G22vgDH zLkmd)pVKJ2ZdG4OMgm>YB$J-+0-pxFs*X?L_+g3RDiQTDFpIrxb#CP`Z-39gmuh7p zH-$dhr$pIpdf1?aUgGX#-2PsuakJ0B&GzxZSFldtGPPkX!~N;e;<8!CuGvRT=>&Ss zuj$+I;GWRt)n~Axeeq>;JBCR2tg0zr{N2M=JU`Pw;_ucHj$YaE-L|%|`2&Jx+%?ay z+m5EBF0UgyW-7P`mm3t0MP0hszDqkwe^!=Cco%^oOg&AV07o;W*L!F=FNkFEx#;d~ zrhBW23OTWJUA;gGQ1<-U_<88}ddZu(jP#?!gQ?Di3{Umei~PC#bz-cjj9SB-P&!4`Cd>#&(|v+w`4Q?jmG*abuFX8TqS> zFA!D0T7TM!R{~S*oBWnT$5o^m_?J2|Q=wO(qpGYq*}pyR6{KVtn{=IXWrk9jbGjLw^yC(AxXGQ_ z$gDGGdG|x==m|8q9{urmLugY!mN|}+8g*#2T_#wXOrQ#!msa0bmd;!rA3Dose52&i z9aEhfsO*)cb1&HP99NmIG`)nVD&aptUwLi&D;g+QFxZTY@ggsw|Dg`0HGGq(s(h|H z+142@b1DCfG;mF9e^$>_tI{DC^pkMjRS|rs)mHQ2{7&%UKK%L4tn;iY%U+;PQz1Va z`Rw@e$$$ym3}P)dgGhx?W2PYYc*9EU@9kcTsK>hkr(nM0ZF}6kjjmNd6O~-(bw?}O zUOEpUkxwkX*4R?`vG*Rd8sI%YNQs@!jHOgGuOaBy|D5;P+tMPm%?-_Bx)|(eDD(3# zGjsFnLoSYs$qP?D=8vg@t*6V^3pFPlEsx{tY&0N-#hhaK0IM|cJ`wVL<7H0=PFV)TJEeL9yo2vkd&`Ku~TAX$?s zmfcDOKfac$D58w@5{i5lW5%Y7@=V>gdQIg@mi)@Lbc`6!LM?Lr?7uua_q|`MO*=Pl zm?~~j3)(dC0D&^FCJI(=x^(Otovg}VMzVZ!!u8vhfbnvcE zw1UW(S%0EU*Y8i2Hr?}5qB#XoBnLjs#On%Xp)M*6Z&^%HnEfiwx#xZmlZ;Sjm}7!8 z3C)=U+!fEcBW^_Dz8{2r21dLkz*)KZGY9JqL zT%O``9$>(qY#xzOZZ%-V_bgQHtX7<{!8v6EWn)IL>JGP~i3wHU zEJ-hpW@;z>EUIMb|Hsxl07n*eU7#I%!igrfF~P*PIk7XbZQHhO+qR8~CYspR>&*B6 z-}~#;tK3Suy6)}VKIiPc*Is+weTEB*l`C5xMDd3#%*@RXls^{kBeub^AAe6QFuJH|rWigMKUG zS}wd7_0EJt78gnmP-jL9!`nb$fmTM`dae%ReKmtXD9=-SeqB_h!HftsLfuMFM!$Rd z<-fT0tw%pMhf0m4Y|w8Lx=}51=7(ioK&Mv?TZE`{j)v;Y)UaDEKy0;J)+J`VB89VuQF(l$k;IdD=`i_2@^ZyVNm~7%?+^SpE9MbOIR~g@3rM{d>{ei3EuF4fprkty6?#w600b@j1r4tG z{jR^?*+wm%J#>stO1BVa&0byu+2ZfujTYhU!!Xy~&meWY4jYE2o0ki%vcZ@;LiD1i z)ry?apK~TkkS#`HEovYIp>vfCvuw|%jWX^DD|b3EmK-YW!JXm3P55~7VFUPar zBrP`<_XV(pbyD0%EHVj5eJp?DIjVuUmu-h56CFR#>DE^Vx!SMJmX{LV0@xF7ENB`kC0~aV%(8=Mg(BUaX}`|O6kqB zgOo|UoBAbYE2U6NE;=XPauNj`K84`1**8>b0kZic!P(Rhb-{IO_wnSdQfDIQ!APV# zl%laX$qS(%?BNI(Ue)VfY~W+qFYZ>UJvU!V7qip5dsB@hI)u39?f!=}Zd2%os*phja1haC z^;b|?ihjDg!HNLn0Pc1q-zs{M1fY+^(S<1kl3jL-92FufDJ@?W;Y$4=FeO-nN>tF# z+>99uD3|~~A~lebtSj-mDL_ziwWJpyH@EG&X~KM*Ie3IcvvfOkt`|!Mh#5H9dTf#Kc{|b{A^GaX>gK5PFDS18- z`U#$&3j&NdY<^!V#)E-J`zq9(8<8+Tjw(bV4zssu{IK8wkHOe+DJ9wHBoj`+KP37Y zbN{QC3w-)8#4pIN3gsByVFcwDU7{B_z`-b_Q)FN>U5`SJZ6=B zJ=CA6fg_SI3&2Zr(df-(QK(VAPznm+X5}Dm+pgKS?L_6b?Z+&ys2H#XE=>V9*wjh< z>C8f4-!Rqwj5mPX`>Cs{Pww6@GynZ~p7I4(&=)<(ua`zOBmtl4A|bcDa_9MlteU4+ zCn{EwfN57B!v6fb4G8|%+bM|LT!NAJl-!H6eDMe{e-RrxeU!fctP;#&WN9V{e>d{) zugp^%k5|Vkz5sHAWP=2%#}ZlbLhJ|z|DXqdQsV#2bm(2veu%zC6w^FQS?P6N<^J?^ ze_)Ed1ah9Xnp7@uIq~PK`jZk?^hQxuv?yJm0d4uKa6}yD5cVlNcwO6r=7ZM}XFStA z`f=vC>2~Ya!DRmXVR%XhUQ7raC`lPrf5HHyIW?iU0x>1vY$FU}zTK8z{5qwi`z=@H zOb3m?!hcT<`7K822~zUPtA-?z%KKAth4NFyt&JuOxY8_45`KBAbGc2z>$(;D&BW~f z!Y3vnOSzRX46(tE@+T$l2!BXv<2JwjM8yiT_iFQZGI}c}nM#(>VTIN*vz)QMefHF0 z^xB~S24w~qJH89eAW#r~;+1qBm>ssyVa|+XQ(}4RkG`GK$AmU?yy(6bOq{=!0VjN8 zh>Q;W%A-8gOM%Jkr`Q;e^v`oT7=;MUt#RH>5zU%rv|SuWVzr0OA?|&yB)2~aHDllI zru0MP$V`N0IpNT}|7QReD8yrHfJWGsCfxo@((tyN>GMBiUP-8mr(#C{hWQr%&&f&y zo43WtBlin*YfR^Z>>evQz>zwN2oGFLI2z^0oCXZ{#sTkTcpIAxny?_eM4nkFU#NdQ zLnah4)Id9HpCh3hDAI$UuB13;BP}SJdDCV4l9chhq)V5)zHf*4`t%>$0{%Y4#Q&bk z9JQ-#>2u|uDVsO=V`3G5;_|?PUJ__Ic)NFzhlxljr=juFIYX#JOl2f8Jec^^E;vxY z5KvGbv-&zAtrH5Aek9!J$zLb|FYus&4=~ZBYA7xS^g!QJO9=dDzI24*NGf_|3Xmt& z5;H$`Fo8EfQEMZC2|y!!GH2*>0q7!qx-4&(XnNoZdJ`tmBsv9;m~RtdiBw|(I&LHh zHX%i5MHZf?;b2Oe&yU^{6JY!DKhe-FG$kS^rNS8ipOI4n>m<6903M6 zmCjDE!TF36?*%p_`Hfl^G$_Km6aGSlts0_0JR|@UR>l}9>1$iF`O*u0FDwQ8swGNA#JNdG=c;d7X5h3mZp&14v}SDtc3l2%}Qr6VgZ}*NfrOUrh!*|sX0JF zD#Oz@VE#3>gf^qKoq_+l*Cj%B#igDw>Omdi^7bm=CMhwq{T0=ay&mCOZ(EN;v+^{wRB_tphL1h^dNHq#GBLyc2L;IPxB$fV?{D3!H%&~NlPfYy zJ|}}h&CVgAYNY<#VYChI=}%XQS3567f_6H#!ki;dgLR%x)CffL3L0J~z0HP_c|Al2 z5Cf$9s7q$FVZWPl8t>R#(F<^SkN?0EZ?g+F)v>1H;tG2Q!KtW%fg zJ$W z1^%@~0@X+^3Q@2<3-DDWqI(b8^9HOI3 zc$s%?F=|4^!|cNCh1(Cwi=I=em>$B*aYX`)3zun@6!wDtApcwz%+4PS?NKwcB~Ca` zmm5w?1XCc$mGc{GyrvEtR7@fR0Jf2iOp=jC(inu;2l4IE$6I%0Q4_QUz++eR^Mgr9 znL|F42*Ly;Xami%O+>Q06eeekqf7{aP_bQj;G@IsF3;5!q)v4D4q#7z^lACU7nBut za*E$5VOp+BGtm+FB~0Z0F9RrDvDbs_iFzF?;l12*3oG^ z=gaoW4BlLsz)-490MdS8-8*jcutO;{Qy6KPepNcST!Y z8gH*+T;O{$z9wPi=3DJ>`K|w}1vohPixJ!y*dVwO*6I2(WBApXzeCI$pEurO0RfBDs> zX$81+X@h+9h!}SHcRaQXq=WJ+Qlzjw!OL@ji8>aQjwew(>2eK`Yje$_Rl1#wE3n${ z)6>RfkkfrFVtibFM?!FF!{!m2c!k2GpU=W|tQMw{WV#;oqYOZmaS7`NqgpoIm?QT( zpP2z-Zh!3Pd2wJEAO*VIu5DPGxIczo$JtX*0I@-h9V8C0BEbs>bb2o;r4&Nn^?^H~ zUNe9W8*6VfcYT-IZ8PAToNTzz5GH3IFGl%`f<|J0(jYjPvN9xm59Vo;hmyG&ynUtH zVaOl<|MD3D+j$r|?95IU`z^CTa9i-&s`XN}#(d-5RRFYQ1Vm(eqk*_H$#1CWT2wn0IfN6d=;#Nw7V&|K`4WYx;m79@s$)(K*0uwX78GM z&Qv3pFd!<<&r+dgazRm%$ttnki&$B9zTALKKL_%W7=#VQKZcvNYSO3Nmz3~y6xht2 zf>4N5p0VI}BL5)8jo!|!?Pqo@HkNq?%pFLJ8mUzP(yi3~VdCfld7EmVT!aFpbJM3` zrVL&DPFzf}`@uyKM-x!{nei|9{dbX2wAWHr)(ZkbbB06&UihXsJP}tjQNYZo4IR{DDa$-o z`igOWNfBHcH)mbP^gZ4)-U9n0Iepc*%MWiWM{7j0=m zKR@I7rge?xZlM{z;LIrj`VUx1KtqiW2Tc3~LL9R|{Dk$ix!WmF!ho5WzShqc04RMc z8!usHWk4uivPiSG$Wq3CK?58{1Ykf1{sE>E0w#a|MUH>31)UgytPB@nO6XE6?Tkc%rvd>k#k`y{^_hOI$jenbO8+a@fiB=UFjKI7L6w^fdG_myu0pgTVkcNJ5+xS_83S; zZ-93)dNhPv%Fv__z%B$J7d3}j{#xAEC6bD)o}v&{qc!$|OX`cYzMV_Y3pbeI-Npm_ zkQcDFlbDG9NU!E1MnJox8@<_@vp^aGiSXTQ{aRaFqs*C(!ZtP{ZsqS+gvzd^p`T)% zj&sNyi4hqSzv1g0{#yPmi{7=uGDu8JWcvbSD{OzpU38jk7ONL9!p?Bs2gcAXsKV!z z(hO^)k^f{lILZ7XAvB@2H=3o`SPu(e`?3yB;2@>qZmi;dSi(qc*#|l2M$pAM{24U< zQ1;_?xgBMxw!qXp3xx8=`eRIQG#K^!r6pN(+VjHOv(?LAuuSL zyXy^n57>0x!SC>%L3YP`<%k!Rhc2(IY#lIpx^nvbz_dP2MNu-^^Oj4{7(obX?S8l6 zQZX3#Wewtpn5e(Vrybw8ES?T;p7U@6g zpFLu1G#;%eigxVx1s5O)=xE=i3Y{rgd2op1dl)KTW7!ye$f@m-w)QTvSeUt1g)R5xcQ8<4K%XsX~>rFJagaL@pu<9=^14hOk|gDLV(CQO*K z7ptZ23wJww?;~M{`TE{YWUt=EC2A2x&>p|qW^LFmdpU^Ynn#6kh{6QGz*_!vC(`e= z5f^e^y{M-!wc8o{E{rmk{`IcxMZ5XxhUy8qrA{;#&ul752cf{LutbF{Hbd(}xm_^_ zL;m#_e8u=#L*`Vm>-XHed7>$tKp33tWB>a@KgaHj-7c0xPRazkawnwKCwJ4&-Xlw#I4?M?Zvmw;Op1l;3O*t$-oI0HdR{8j_keUNXy}5}Iwkao?$3AyzXNGO0 zqSxMiQ}BJwZv|g#1fCZKlRH$k2Wh$YmbSNCDyw5DU*HqC%fDLKBt35nO^P9t++58= z#x-Fy@GW)j8h$bh(}ay)So$AfV8g{dNS2lfJD)>I&x7{zk)YIa;@|`?Pb#7{7K~yS zvOzm7vF)-XCsmDs%BnDvtV-s0{lHe;S;-i;OYGlJe;&yQ%&#muENeD0*7~VS5Kw5W z-b(Ql@X!Ve_ih~6|M$xK4+fojoRhZOT{A0$7ODhZnlYo$ev!qCK5^sa>6-6dP z^({H7(CW9NoG9VlxkC?C$B*LKTff`!@zuRrfzWif2X}V)lpmD!dGcQSx=M|$=iT3} zBt~jtsAR*XC#4^ct~?-fPsP4r25UTs_SUlaJ=x2 z8vb^+@sCG5+KaLYX++FGFmB1}Q`bM!x$F458XQ=$kFLvY=V|1a%nX;8D`&B_ywI|3 zq&J1-?4WDj??t8oNpuY#&+3%^27WOU-8_IAHT}+y{1S=g;avv~s23*!pxdI52`TgW z;h)J;O0gR!HRqV~{_PtmApv9*W7hem$6h%$SQd4b>SKE8K^Vn zy329S4r*%)V#IknVe3`s1=JjR?J7wzrG&0Ru5oZ&0LLW(u9P|c>} zTS~i|a{(+}eTpe54H`Gj0oxa|Hnb#Z=wX;I2CRW5&A+8wqXwgH0i$1UEImjebdQ(b z-usbZarPfKRdR6X_c$OVM&iEaC*w#f+NT{=d1|%S%@s{jrExLV?Zhv2<3YhZo}2`sS9S0n!y;DdLhuf4$b^`ZC1S8zxo?H}Rin=?wuY14ZTQcUm&RK= z#TAm&ymUW6b<_7WZ=xLMz1_T?N-k2f9nqzx+MO2&y8Stb0OU^9Kb1+*fQ5(yMJ^Ch zCJ9Q`JvQ?&VAe&0#YVTpSwGD}b(18oAo^<^S3|&1Y07{}NPs=cf3wzO>d`*MLHFSQ(f~O{g15coSc) z-Q>D9V`{~&oNF;$$n>|kCZ!%+idH`@MK{Ybo3ph4y0JTih>s}ra2em?z;9BQO7~bt z+kQS71qlGmZ@Tr}1n8{XMB4;hGZkZfzoxOT%zel{avQK@^jfGVln|j~j?TI6#)E-T zj3CBPJ?KDpqwC2F5ObR1TgiQRqgP{hZXIl?eNjxdHEZ3^gYk`CsxOIK=pK0Ys*|HI z>3hea47Ef1c9hx3XWSsp6h$Me1JR34l_2n!B?p`jf{tmOwOVQq;5OVvR5ldC&^58S zl+Usl%xkKU6wORa3+Mh#SszU#v{nUiG?=6DD?}1?(dZDJmprm8KQWGIN37*W17UBY|{uxqP@bSg>EDWfSvV=2qH_6=imWWJ}uO}@GFOTDL|$xJ z)@2jjcnTL4cFir1WI{eUzOZ2K%<2YaP&bfP42x!uUlaDHEDHD}DPq-BR3)?TmC`1b zE76`U%bi}?REGkwKFs{u@g6+(IfkIcv;U;sA@pHzWVuLn-uPy{SizM5hG=f+lTrKG z4lmB(z4sA&p}O%?o&4YOET+E|V?*se!W_+R{XRT1{GE{gz3WH(^}u_usDAUt*3EV& z|Bx+e)riZVlQ=OV$CI{?!;dyJ$PTTJ1JNl6B4nd=YdS=pwyKk*hgN0pCXZ68%Nyf% zL2M-7^tLfib72Kpva{+b{fN;zV8mblf|3bZh%+V3t&!%tV zv^fJPAA8i{oAjor(|r0c+l4kHcuIA@ila|+%fxa-O*nW;5gz-g`*QGueP23cAd|51knfoR;nem*hO5TNx6<(uw)PAtAaAFHPw|)t-DeENOei zt9m94nj9ylG%N1K7Wnno`n9jJeVO!M-x{P&K+uMOJlJR;ew1J&v!JL99BI2I&?YN8>L$alKO!~ z&+YYB{p>TVCrYU&rB-hbIX(@bC!Bi`=k(Um-EagO_prRxzllTdtN<>7K+ zyoJEFGbC!?&Hh{f8s^7Yo~8y%K^g(AL$_S8Pcl(3RhOPE}%&Atb62U~CUo}R0FKdP8X@y4_0Tgg6<)xwr z0cZj0TDQaRvN5sQBuu;KVU(m#?Ehem93p#v{q%bY9!sbUj&eKC!(r9<4I9Z@Y29y2 zyFY5qK8Vrwd?ks*x86zKp=mPnU!AqKCf9uEtMd&7V1V@|v|gn7I(Vizn8k*spi5pV z1531vMM<^8aMHT#p$JGI-3oVXHne+b&lu-ZNI11?C40nZKh~+u z%3}!iF#_v4CMygf9d3WMwhl0!Et=PHjU6N{KkSi#1Yl;Pp;c)xk_26VLPmJVOpkn2 z`0ks-<0_EOdIT~pnfXLuK;j*VgQY{lhewcdSttERfZPWKw`*-eeefqsI~dG665L;u zVs`t;0N73^;sXHbp=}Y)roFJ@YNs2cSS{HBh~_0I%B+MrLlQZd zfj^3opjCJND+yiI{%US5k|b$585X32|FBm^K$59F%;aqmE43OYCU zllWy*10{5z>x(Th=}EUh<^XCSf^nm^U3diizkE{7*hIOyKAH0Cj6jt`N|2+nC^$L& zs;oLoWbrG;R0uK3{^e~z%ok`q`=Ot3uRUW7QzJ6Z1>bwCu+GS>m+|pb<#@rVRj0SL zs~&s1g@GUEfWV@hzSLPbp#S3RIX9=Y^`NJp*>s$~92Ng;aR58j{n0)S_slAXDN>Pi zosBWkHs#P4&4)0!Ma^|_Xj-MHlssUX`BJnc$XT3>4P(PcQQkXtSdQW^#Uwe z(qyVm&d(?63ApO+$hH+v&dRim5RHD_I^(%m13nb+6R#f(?iew!bxW68;?BkNRZ<8# zw^!MIZ$?Fhm%;ri5P$>&f&cQ<+^+u3^2=~7G`iLAdhWF(2c0O>F2jAb8rCwr?!?kA z-1i`pp6dG#8uU;{uf3B^T%N&QfXMt`{DPYgtCe=J7c*is`UEpcGMx8&upgj+KxkQI z;g>$^P_yKjhCnC$g5l`%c#AucS` zQd@OZSw8Ss<6n(ak=YMsP8_}h+cqx}LOV&4;CorT~ z(6PXaoG6Fps#kJZ<(e6ZmYDGnGI=cTQk!R-+aC=>6_gyUMLSB$Dt{@ zttpd*uw$gHe$g=u;BJor=RL3D&6#61m>N9KfJaIBOVbEx&Kp9}|00boA^Jj8r|1PE zTpCdfi@3A-(ad>PFMd2jRIRZ0Z>|&v1JKQ9bdMM+N#tCL#j_<-1;+h zkV5{uVd(-6bd(umdWY*_xw9d2FL)VbDp_pg%evA%;G&dgu}ZO>@AQ# z5i+lC1d4ee)->Z|B|~@2q-#SHSc85R}97rC6g7&47e49pVu!xdex!z!Avo>J2+KWwXdglVQVtf zbT`57Oc{KGEtQczw)D4NdNt{q$M^9bZ~iy-VeCBecq0E&lbNQB^4UWuAO0|&qR4I7 zlGGg0jXnB~A zbD?urWs-ACs^Lgxl;pqR@f9K(Tgabja`Qz;B{+Gvbk&TD(64~fiFhQ^L(HHmFc+T5 z(rdHp3faDWEG7Ek9-b?n&^8DPT`#S?!S7kedgGp4R@B%U-j>e3NNu5sJe|j@raoT& zQuu9S!7-PUQ`*#{<7ocy4FrpgNz^^sE+DucH~pe&qZMX2GZ-lwVtJzvUK`V$HvJ@E z7mA=zAc?TI%6PQ>+xD4sj666FpA};RYhT5>+UGboB5_-($fLIFvNK>6=|Ex`ukjiX zWQ+c*^!N|zG6)Iy4h@l6i?P3V_rEyL#=Aj)0_2Q;s#kPv=7RugbS2FnE<5RcTZGaP zh&W%h_yJ#_eX#ZTAlyOpHso~>ZDp8Y(|*5tse%ANX((RSqIo1sqrqA9X<3ob&9(63 zV5}Wb4?+VCb6oQhjdRyb;K%6$Ajfk%8!tNQumELe3TT;Fq{jV!|@9dLaJk|5DrY)w%W@ zLu}WuNr8mE%76Fci+xzGJ@L~57=S<^=ShYmH}{SLAaS};Q`$w zypjil^Z}RWNk8DmrDc5kY8Zw;Vi+nkh5rfG?jjK({K>5+M#S8ob{3O2A8xO{ZN1KW zG96A`7-P_oQD^W!o~lmU;$Sr$TB{SJvLBd7Gv-9qq6{lpM}o4JFG@FP#pVpHYk@0~ zEt5`y!|J9s?YWnM-_?NU-@%$_7zRX>RX@6X3zj z8nLRU$4jRwL+_uY8y~%*R3ZR4+}j;*V+Wa{c4_HbmKISKYrLRPP52zfPP&8{CgeFIxF??6+N5&0FprpG=%bLQVl)*X zDn^4s%;A1iA_j6ZUc{OxLHJ|Sqicl!Z2c}pqe(uD zS&N3nR`htRWQ1awDr6q=tW5Bf7ii$Ct_G$rbqK;Y^20b9J?JdmUk)@*Id_fePyU@d zh!5id%-Ytf#qWmhf`?g0s3MideJ^xLW%n#dy{=+hKEg0~5=pugY%FKn1+kK5##wB; zj2+*=(pW1<9P%(TW+99E3K>+NGRp5Un)aI(FD2y_D6_APu;Hb#0H4U+ezOSJ)Eg-j z-|1+({(I21%fjB_YW^$G%L>x7-PMuZ;_0xMY_Ol4NPu}&Cv7^9TbLP-q*W=_i-1V{ zzKB8sTxW^cp_*{G(Rp*-_q&RF@j54lb10yM3<$#U-|m4s=ml>GG*k^qe^>yfdipbN z(B<9APISgHbq$FAR|}B4oV9s7`OWKY=6Z_aghy2)UYE%Y64>33NSk}xoM}}=OKK7Q z!?)YrAG;Pkj7!n85!Rr>pp#zCXj=7Xy9^8Lpga+4$3mDZ6tZ(N0v$gSyMRHT62-OX z`Q$4kjSCymG;^^|hSf_>;~7CzP$u$ecu3buFUO0wb|n;51H=t+7^b|8YTJFw&pXJ) zSeS~ehf;u4$<{zIeQ0EhsyX|BscAv6>0hP~0b?)SqgQJc$tcc~x(Wx~T9K_yM1cOz z&;yYvkP@f&v*HCKJ+?H=2{_4mSXEIAw;rckYSFj!&j-c-qQ2ByZ(H@pNN`8aG!5l8q?9AD&|Gw#839N3V( zCw=!d7rpo#)<=#B+l$}sSAZt(-Celx%MkjQ$lNRzgR9?YOTZ76Se}ldL}S|yV?|3zLH;M`FkGj_o}{)!h-yO`h*YC^ipyZv5dRsKhe7- zzK0{?+~=g?f1a4qA?6ns19$%;0M6~5nOmv3K2Fc_a9_UAS$k~v?)>Fg5Zs?T&mD^I zzBox;AAgP{eM3q;Ezo#PNflr((o&%TYouejaFc0JW*ywUQ|a>o?=5EP_8ed?Er%Ow zHo)A=el+a5OK-my`KMue`XQi=Zk(ojB#U>E&j8SoyFHZwldO*Wq_Fgag<8#E2Vk6v zaW19iK~Ci)1}8heK3&%L zS?rnXBAOJYLN3w2rbo~efSy%2YNN@N@0EEZ;cn?10%q0)v|_MDv>8l#0kpq=<4Aww zbzc1)O1xp_9#7r}0E95QAHP1?lP49_o*z_s(buAwW$99DTTN$Cq=x)4UyPW~2qexu znNP8-B6bIdSstl_1qfjq(6{y^Wq~1+eWgJ%5ZzO4Yc*_*b@VfDrCzRdVDa)!vM|Ils$7=}zdY_2!hr34+>;R{=GAym#Z6{lJ&C_g zqS4BHVM?`D{1~n^n6$&y{UmTs04?&Hi zBqNJ7B!8-Jur8`pn*sRPUbqfJ292oY6Ff9}KW})#6xTU8bA6@DIbOe$!g$Tmh_J+j zOlEaavA(%^os4mEI>V*QSFZ1idwJ97A6Km1X;cC0W{WpTu?%y^wZ$ofof@iwY-8l~ z*GdF(?^+UoQM|*o@Nci--amJ)?2D}|vpn6U=+;PuR@E1KKzTIi1PSg7G3AI-P<1tL~{FCJiR85dBuj#@?RjOjwIQeKnhnJ#r%|(@M`L6XOMh~$5bET5WWwW zBt1@UiI5q?{?zegFRI}gS;+&GD%4|4t1){owa`q>|3=3y;4kF~&S$lucP>;TI#c$z z|6X2xF?8yc1$`uNIXj+*Dx;c^vES1=+uCgSK1TCL(jNmTmF-rcGbXuy#Cl z=%?Zn0($OR{aJG6yQaGl42gG>;z313yj1bPES(O5p>M*}`4T_;Kxcm`{%Z;3K%$2-gq zaPS^Drw!S|RaJByo;ZX7kn;A5Z;uekZvEt%{uwTt$(xVE*1t`$L_aJmT8^NSLr=C= zH;D|<(DqL&&uUV@eFOJRNXkm!;Ri8(e@uo>p0J)ia1?LdcCK3UUbiE1h&>OCSB+)j zhOwTPReUkWy0L!i{d3vY_~OwTe*We)YS8Uc_U6ECvT2yZei1BR z=Xn#q`6a}>FC*;s{y6D8!u5xD@$Cg7S1q~Gzq2K&nk_eGLFTL4jCbbNs-8PFj)@FZ zem`+9TVJ?0ipPs+KfIm5J#@bC$1@*MZ)H9YS>wIW%pZ0LonaWscJYBn<0P=x|B!1A zUkif|sJY#bqS&3Fs~^R9+T#|+%x2wpD#wfnWU*g@?Q`us`v58J({4x@$DCHH3pq@+ zdMR9uPsUpKqL!HwFI&>Ytv<E(j~uCJD1EY{G_ld$3xq9*)4R~ ziwR2FK(X*N)=?4CKdyDfQF4bK#(MlTZyx??app@i9ff4FK=voIKquuVmvH4rrD%m1 zy}Fr6^*Q8bif1l2x9%8->_SSjj z9ran5!827?vB>$PJmwj;cj4bHoVbJZMs+npfpe+QaAE8vQDtd`uYfEh(24Rf_yXpv zo*bvj8N8dW|Bkn3m$Hc`8vgavpp zIxRRytuc_40XCvhB$}Yf;9`FCFfris`aP^owu$bs>BnVNKg-YdOK)BTn-*)~ztg#H z(rb5Atfm5gjCpQ6iap4`A4Ywso=tYV?VgdJ)vHu#=S^Bzb1nT*e+`^|Y#vY2+z|Jg z(#ke&$J1Q*-4sUja7^uT>?geGd%4)@y2)>Do9fT!l!}U~xz`6@Lu(0K6g|xXD=@;@ zgI?)-c}<)r@FXctWGj{~-nV`jfTagvC(5*oN;$o;5RRv{l7YLJNIiU^X+U@5OkE10 zK;~i)f ziSs;QnYe#jml)X?_t^*!j`}iEmZI5>g2IBt6)>TBZ3}|$4x(8VQKvvd+}|u;%n`1Jv+watq|*hAAfXK9?x)b zxrX68h@_J2U4>B%)f4Ld&k^b|WO!IifQ|I8We~I3Y-}#>Swk(r06w0<>pUE!T`wC5 zmK;7c+d+j3>%6YVcQIdT8dIOH-o}e8H0u5Yr=WZ!iy>%S0TqC0(g#=m@}8GJc--{|gxb8&H!sYp7Fyx{(Ln3$=W<^4 z3L!E~b2yCOW29*$nFr$^t5jpD2GId){os@Y zJx-bir6ZErF3dPT0XL`iKVe-Oj344Dy&AX9idB)>@T~xx$KAZsGBhg4fIH@ZYcS?zO1$M-I#=d>WxIj4kx8Rs zNS-Q6^o&g+bD-I$kdA_aadRyXk>YT_eCa%{>vR1v+W|3SnQ9}gqox1s_zux*6G|q2 zDE*H8a}^(k90VX{Tvm#@;e3-oNAAY~kb7z>n_knETpqO==33y?KqFE;4HQ#nnk4~9 z-Wd7B6d?h?+3va#M_lfbXNQ);D?i@z2d4|>1qImD9f3U+5o&nGZVF+tbV<117Pd_2 z>FsT=x<9T*E4fwmHMr)92x`7IZ!$iOSbII5?$D?QMk1G$ znJi+2xph4}mS+}Bbh!le5UU?-b&WM$b>n;GuXA)?FZnoW-%}zc6JN4d67jLQKE@)q z9|B52#-4rmL(;Q#7&9fh)@qG2wO>hRwfSn9ZG0v9qXbgVb1EB#v`Wi!jn|?V^sg4- z%T`Ckabph7poNlyc_ep1cKtbd1hKOROPyl^ab4_s?2jlQsu0>80X`iHVvT&*J8kQ^ zhr%9uzaRk=G+;mblD%OF5pJ;+SXUfFN#fR3 zwm&R_U7H2Ry#@YeEEx~a;YT_$fPsPe-#`q*gl?WU-OH3SS?fNA_P;<`84=XtPQS6+ zTqJwf6#QD=($RRB8Xd@KMjG3nURGxneTD=yRu(QgNXH^XgZ$mN8+L;MAQ`}rlpWK%?q0!GPMXw&(BFf z03-V(jm58Rom z6VQAME^@=5v+>bmQ9>#yxBG~o*7SUHM0b|ff69fv!3`LvKgCEo7&sZTsUj`~;-D11 zP0xxM0;QJ7i3HOefjxGpi&*9>RqQ-^`i`ypnH8|iL@^B+e<2;NSihMB=MOiJ!h%3k zt0BH zmJA$Q-|@5b&p=@3?1#l9>01d!gyqxI6dvx3y3+CS z+I-b4s+n2BMl}8;3IGk92gBm;jH!-kX@~LTQplITbk~Y6%heYPfJtAUdUF-AAJQ6Z znHbXePtTe!yy%yjW>HNM}AwJVbKj=o{ zkf?QP7a%j4vPhS z$v*FNUg{yU+5C6OOJ*~_CFy^0pTqa#VY#R@?-D3)^%V5~eRodQ*|C!p@h}E%eX|ZI z>3kc%gd)QdizgJ~cBvrZ(G#SD*s6EBe0$YGYB-ITMPvfCUwo5=0uN0bP|J*NUvh3M z-)5$k8um)V$zIO+KMoS7GsKzlw7%Ty`@Qa3?0~N1;f2O-@1{tUp?YK!`r|5ur!_|l z{uw=9%>arPJ28X?Sq`M!U~TrAaCNR@1Xd*^K=Fb_vO)GMLWGOl9(jtqGgjvCg=C@L z?Kr-{2m3wpC5jPPAl8XhvSImL)Ld}_-sv({p06zr&{bXfM9uVFf3Rz)3<^Jq zLTOZAaPH4EME`+ZCZX9(87r7_NG7@X_;75m?8ef-WLM{Amv_z=|GIXxM5{C<7E6@O zlBS)+6O@!3p}jl98vpJhIH)!v#6$w7m`4pk0I^@}sqET*p`>w?LOZ16^n;qU$hoZS z^fB;0B5Ar{gT-V|19B?|8S_cMB+dc9l=Va#ZB4jfUwLf3#!IUN#ugxnj-aLzVmQai(tGcxLpf{d4j4;sZ*FEQ3bV@kXTe0 zNl}KuX7TTVi8UET4C$ZWYI`K%c?-4*{cCdX1g#9PXB2f{ZSA3<1o6jd1Nww=q5BC3 zYmfnhYZ+y%W(&|4P_G7iG)e2<7xM5+H~hD@<}144;(efb?zAFafdr z_q6Yqc78oq`DRo|W1>cW77NVw+$*^!TYlD(=?m{5dcB(G=U^*4`1TCoBSu;5zngb| zS=7+0+=+Om2+T|nYfFL$$m4<#`jR5|f6)O3-jR5T9ArG{gzQ!c2y`KXGU|{7>jYo<@>FV@R)-(`=OMS(mEdn+ftTM@Rmn4 zv_z3XMZ|LRqV?jmgLt{*A8C38>sp1U*%yxWkJCI!LL(9_Xb83{*`+w{AF64r#1RU! zt}DcvJ;rD#EK}lXz&l3OB-nIf z!NxW36_6&1J7D6eIq{yAaT8W3mTLkbQ(c3+e^l(M(@eBYf-|dn2~i|8SoynE zBjn?4eLt2%XVSHZe`>;dKdVe3+C9F~UfL{8msM&>;_nJ-z^%GUzFiQ5j}RjlC9AQM z!o5~62FnD@OWeN}cHGU}t?CaZye~!g=#?Eo^HEwIzG@btyUy}NlUcoN0S@UAEY3I4^WO_vg62ysQZLZO?7` zm{@)`cRU>OeJcm8!@`>iQJmy>bZ%uo`Fe^`Q`h1(9leoyxUQ`%_Cso!^3++5mHGK> z&7>)j2y34lOI(z2W6fTs_}%TV=R8gRu#2P-!l?(pK6){8p?M|^pGR?O93-i?m6e4% z*OZ`GYSRTN^KMA_??4QioU$|=mTc3aCbjws&C2W_@d-vrB%}$d&ms+?^{W~|HnyLg zla}0q+fLniH$=uk@uL0>gC|^R#Y|1|uZe1rls_sEIzade;gb*NKZ9pheOh*7HXh5` zk*@g{Py~PMrDsQ|h_xquNHdcn>6ButlBQS8e6N!+d*6kmwi-?-WN#*Y#=u4t*$dl|ILYoSga_?>kl?Qt<$bZ+ zlq;PBXI4>zINm6W{nSJ z;>}Ru?RIsMeTj{KMDY3rd4;mV2e~nz&6tB*3xUfoZCt9i=jGj8tqjZ=<+`T3{DEWJ2`yILa7Tq8 zGFrO`KH%+jfH@~8lbK(-xSBLl8~vYuJ;S}Y?0F~oF|cC5&M--paa|x%@)D2XBb9vU zbl}3^Xm}y}BY9}Wij`@iC8@t)XO{q>Oh*3%$>PdIQtlCn1ehE&KMRIpQm&( z^HW6E?<}5YMOyZz4*D=bKoh$z(i_FjSftB}zfNDG+2^j0>1t?e19Wf)9|S!y+d8|{ z&Zz&&;rESR`RTf!cB2Ec+m1u2&xR!%|Mc$K1*!T|lU}BYld^^aIBZVbNA`N5Z9IGe zt$qrmzsqPgUc4bvEbfn2;i?xtoBTs1&j-s;ID(n3Ev@#@4xKUj0G#RAbkMS0OmdVlgbtk|s3S-H3s8?%~~d`PrLc zXx1!1jI|-zwJqr2q4q!ok;nJ>S1r1kfq?&6t7VG` zyIYgaZ1_f}-<6u1?`83*Z}d{k^Io{XLbMKN{@ym&K3^dLt2S@w9zjAfdSoIk`HMEA z@ca!TGZ|%x6bzBr!rtFpL{D+ADdw zemhP0MIIUdbN3-75GwV3AQ6IME&O*)eUd(C`>%hiQbpHEe=U}Kxi!LqCEL(aap%wwpx8t0{ zTG{q+nOBhWl?YomK+e@34_ikkh=Rjsct4%N%PfsbG~V6az2zv%Tem+X!Q}jb$(**f z*97Y4nOg_i+K@N2u*S}9x=#f8EM+sZ=l0&$hABZxt%J8F*KDdwFX5Zz)tE|a0ZBZF zB~PKnSB{ZXIKH@_TtEM!py(l5I@EM8aDDf|=v0iIg@uKHY_hd^sCz5$qvMSOwmAZe7SiLYo9KHbnM?5xw!H0Hzh{TqkvM2+1c>l zT|$hO4PFvu^?mXp|J{k@eZ_()Hj~eU_~HnnD>Ab)&m=SI0D<@tJP|gCpTz&m3Fis6S;)#C&?$!`X}zpxW>`-KP72`47hGYS?ya ze-}+7-fr=$z5^0`!I~g1(W~okfi(e+!_ciem2t!20NYBTIe!|LeOi)u8>w?K-wAby zob>3o%6bra>xXV>bZyYiV)mh}Iz1U!;9|LSV_k8o#zRE?A1y!`rE(KPX28!>J7sq0 z?s|_U9^{glmITL~W=k9%u#wkDBj+1&+{pyB5kP#>vZ(1=IidZ11y565sN!3){D5i# z?Z+ry6maAezlAIh1WcqUW`OJ2^fNm3qh zswiZc;=4v~ItfoLEa0B|^xzu07UU^X=mG+OB>Sv8aQ0_}5!d0mkOuT_hkz-3+05@P zq`gy|Z569`0w%cW3|gR3gf;EfDT#F^T<7!{Xo#MMCGG=urSnxQ5hNdr{Oz{j`uSBy z#=|%Pxb`Kqz+^z9x~r~?0vsiX`!=xi6DEx7ocN8o;7a{>Tj2>8Gcmym(|ITp6GJ%r zn};l$BCUMenM$Wzmv@_24Lm9yLcEG+6HPus{Z6qMb?ucv`}n372DszhDx0D!`~uE| zDX~a{NhIfLhvD{YVERLg&kym0M-L0UASJ?9^yCS%p)cW%X#)Z$6w9GHq#rvW%hk_v z03kor(@3OuRV&?0*W=}Q$~(B3+cYW6b&8|>+;b<`oLy}jPDP*ii{In%ntl5Dv;{R~Y#L{se2PZ-l+<6a`pq$PS_$2mvpAaIs!ZOW#}_2UPL@7)XSv*ZkV zP7lb~M^H=18hP5$4FNCo2j8thoazh6wgU;|EBVKOO>NPxxYx|*`gJ+h56(I#Y0ex9 zKf4d+96K0KEYgh_G!2bTq*kY zP7zi*J3hD#zf;4-r#%|yz_XOqjnCrcYsFN7>F9vuTD7D6uSFX%HBb{AwNRZHmAv)B z!Rbx%c^|lJG2_Jv%wBJ)hHrT*SaDQ?%&u|ep&!TLc2yhGS53{kAvdsXpcT($jFh3d z)N-;!_$pmKS9NPMYR0kH*5BJq)20>L_3eYdCQgXLcFZqyPQ4e?hT7ZqyP?E6B2ZSl zgQQsosh z=pi7;H(IUbx%V5uJ~yH_Z%L4{o&dRR@bo1vicu4uN(Z&L-?_*fXdrxd_oDp?4VZ$` zI-Ex!2_BqVw<4^E&r|M#L({o3y;hSnnA48tgfX9P==L3$^;`a)x2fYCOC>M0t{Rs_ z^I@N~*u`=yCNSESWLJz8CqbpxeBIqve*b+tBTJ0!Yoplc2mn~@UspRNGB$Zi)3&H3 z;}}GOinvx#4kBEcM|C62xNz6^>9RyIqghuZDN2uv4UaKHe1(4X9PiG%bM0xK)3^2Z z4;Gqa3g+;Rr2iV$WDV`BNtC}|Qmt@JW-?mv)Z7lvSG#*grq`%0MX%kZ&R8oPyq&8{ zFoR!c5NZTDc`&w|dlnnCEVzgV%fEy)xWv>uHZI6wZW|m)$}_wQPR#1BzBfOjsP`&6 z%%*Q`r^Hls$-dP&qiq>H1{Ey0LLet{jymC9mUYr6Cw_Y3@pkA$0$FW&D{A91w0LAi zkD5|wPo7^^JZYx`iti>_30dx3YU=MKj7k3E0zA*IY_wV|lxzpl;Nn+4|7{g`o;P!Y z1^{Hdnf^M_I4UW1=iK&s_03q@jpjA0J%Z_79i|dgS$T+X=pbXsjH}&+Qt8*t$tLaF z1IDYPPGID_(at)9JGsv{qn2r$Ln@8sFtRNW*_%mluzj49kFGwrkz6?CT}tFLy@%?v?DWLjqDHa2iHg!I|_WsFZmDm`!1V+{`_X}4mdH2@``qNFI1vOS+sNU(P%$spj%O(kD%+aMy=#x)N zSGg1v9t9RdvxFg1R*k^IVg#`qH{1&VQDvolWj_FHOJ&1gaXG&>t0wB2pFwR$&a;UT z`eCekQ5V7WqgUeGfV$FYIdf{f{0&&L@Vd%<%bM$|Z3%ps527e2@VOgZkdc&YsP8=g zs(i=jxm7-PQ%QuLhQHy5ai2xjv2dn&)6HeK?b@k3rsJ`>iU1_oCumY2Sd}@fZZsdKmE2 zPWQZzHufk#_aWc>cD3}RCF-UWSJL)cX~LV7H1!$g8Fh&K8+oErZG9nqiU&hTuunQU zMX>A_ZN;9wa>l9L!$w|q%QX}phtv{pp6c$hJJPxFu?`PCpEViPg_L$XxfpntCl^^W zH}zkGx}2d!I7y>Bm05Jr`{Ifi;)nRKZ06}>YgK{?Xv@%x2TR*O23dpmXZKt^vo$Aj z6^H+h8XOeV-p~ahtsu*6Sy8>1DOY`y*Rji=RRt3f?pwJHxJ*B~cR`}ebb_p;FaL)% zeNsDA?aQ6g@hzV)gyWD|8$DVM!B}MMlD|JohcC2M%V+S9O5g~O)y=Upc&I}_9vu@r zo=aha|ge*TVG&0eT*(X4HI5pb!ZakFyFdz+eei5U-?F;w+$KNG(7fWS4 zxQd{$ssLpZ-dt@#cAI&^2dc{u{!n4Jzw+n5Yv_ak3oZbl)kU~#qQuv}xAkq7hcWnF zl0S!S*S=E!GD22iyBL71Mc-A|aFw)!z|`5uGF~sQ(_^gCaCd2;3{~i_7+6UlloZr; zXi?i*?cP1AWtm%=ugw^k$p89Pqivz_kiivE+A_;A#Sw=h^K|3Rg4(=R-7hrAz!_|; z^s?Fu*X#&k^-3PD{F)*h_m@BB-LVKEBi4{CeWkyer6ENN#qIw5l$iugdbaXn5}|+Q z_C%)+J2{l`&V|lrtLH0waZWY{bxRnsWUU$dgySQ>Cpg`rZkE3ix*qI&_Lz`)Zy)e8 z$&sQIhH5zi^Gx*^!?w*Dx3W7;!ry6DHK4_rv+^{ufj!TdPQudhv*h%cwwTH6O3)@) zEd_V7Eqov3Z#VYc`tcZRuKJq!SFjAb6tDf&QqAbABsT(GnR-&|l^4Ng_lU7mm&!lQZ~3H*C6W z4RjjEnLT##DV5G;tMEYkjrzg=^U&z4iw*P~__-{o3H0@84* zLl87=DAv#`SKI<7yYNOBO|rW#O}>|3Tq05p$3s!yym2mhtlEH6a-FyKK}=Wg_t577 zymX;0=yw0u<>^Lq{zUJB(%va;3vSz>fb5Sz7^?m+(P4IJBT|1_JZ7WYM@egbt(44o z5<1?};zKtrF@J}vi;pk#&hWEwHXHW$I^`~(=f2g&0U+5|U}E-d>s{qZ%iTHjQ$=-a zi^1sy1CO1MkR@U9#$l;$`R=*~t8MzB>j3L-N#r#1jL)*oL&*P|fQ2yzLD8TP5&oYRXxl6HiJxp?xalbpE-^}^O+eoxtv4wX!2j**f{+&f9@rh}^ zYn`m|wld0tyDth5T(Mt#Huj^E11U;|{J?JeSb*TnKr=5a>|Vb1^;U5NXUL766eTVI zhA=!_P<%kFYC@q(1;0OKTAAOctT_MjPivZ3 z>zR`D2I4^eU=S}}ShlySD`jhMA+z5*cQ2@TJi0sxjHQ+z4YyrC;XO>%`l*eLxB}rs z7(IOU^}vFXwRE5`Ogh#)OW2?#{5XokW{Eh5rMC6=mApFKdrV0!d1shbcgTSHW_H$0 zf`RWz6(M*uCz@u>SU>+XHbiAYhC)we)IGi@7D3rWZNzio4)G&Y!)jEf=7Vn*s4(Yi zr*~OSYFl;Qv_B54!r&C{i4p*oGZJ}K4FW6Q>L%D<;-1@$Hg+kY;k26L=b(JrgJBwF zMvnYlLnLCi-?mD4Eaa4?%)%+UE7d)V%eweY_lrl5w~e1h?`=4XLhNWdcZDd!zUMn^ zHTA`(ALGS25{Wwz$ly<}~=WTrjk`4kmhWpiW*zXwu_nKCCM zi+_0gR5AaU@A|t2GPHZln(NKz#8(9XIBa}-n;1+_BQd34otn^qtMY^n(VXv`5606~ z%VM-b*L(!7o9dVssX#gvKpRo4Q`@1__PQmTOCykXvu7^0czM}v4mFv(n zdN&$YXlG1C_HdDlbJ91-#Hwh*G}bg7$=;t$Fz@9J;UY|0ae6N{2vGy~J1Z|nKPM+R z$yFCQf^4*dOnXtMp26wIImpdTSY=_&tPsSP4i=c^v4*`hu#!g!{Qd=d>PhKiGvyu%3gc$T@v>2la$7oH^N^|=}Mm@74;1|~P#6z9O*n`JJe zmA^-QE?zbTL|R)-%&~`T%bXd%CwJzE47NlRzrtT;{c6Ss@*t%=U~=c)(T03v7LKSb`|c z76#arcJmk}`B*^imSL<#S`9kRN&2V|Q`R9Rcif*i$&TYR=5FDQQK2facqD-Qz$Dh9 zc0GJDHyv$%`$LwZj*x$#C@<@2MdD)lD0vvl8F~tyCvUbQVJM1_3L7R6Iied_$dfV; zuMSZnQBq;k+1o>ZF}sxxSCa= zodf$(ES_$UXZquW4>iHZs9aKuBYfBm^(e~3voom7Zf(tYv{B@`CM;xSD^8e0&K952 zdzZI4i+Fi|$0;rq3C~uFeO80^Ygn6T_#cNBd>{Gzi-Jt1Sp$*LEbv3>aVd^sG=?>(V<^hG4ro>Ns%FB~} za6SqtR&et-07m{U{vR3r=6t&lP|4i93&i5fSy4M(R(igps>0k_mpO$)U*DZ+(^IJb z--I))?gxu>t6THZ{1a}~*>KlDY!3!GWP-B8`9EWVZ#gh@>b5R`Mmf z3)HjIYwm(D00&C<#lzCq$|NQT%&+tHXo{SBi(P=p#%cAhbjfm}v*c8!xnE(0Z=fR6R6p69N;Zk9BLYfn zy1a>D0}M8IMr|1jUasc5VRQ^ZEfCt-5cDgA>Z~^T0!tkOM^OY3#hl4uk;p$Z z&|kN(AM#=aiXsUA(g{(=ktjtAkNHmiZrVj#fu>+MnC9+8@`IqhtP=$^fa}#f9EgM@ zBrHf%5igdX0$x*|b|63$$|8R^&+%!4sI=UrnL}ALMb=Dy6yUklshJ&?kSqw*Tg%oD zbiU10UQ6qKTU%XhwT(_bKeInmWgSrfxhjRWx|k412gf`5m42eldSs8=s*ueuU@I;# z;AA+09H1)(MnAF!WPpFIEs-!WQf65 zUK}fI>SX_ZXkMN+*HTmMF*5{K%Cx^YCRLuT<`J;E%m^o_?db{giamWpq>lc?k<1f3=w z8($7AS16#Fe@WkDZ&Ir~0xN{db1$os^z%71t6#A(x>;jd%=R7N1tjZjhIi#j;0uVG zcNNm*#}KdyQx41HdtJ1eBxpzN1_(zfFurDvNKlpa@;836QSIW!nQ`LEOU;?$MF=IFyj zf~h8^w)x}+J^rJhip2YW*?qt4w({%4s!dy=WOKSyRlU#s0L*lZ{aTgZ>n2&&hT2o_ zl-_4s^4Q^kXqxJm@ji?VhwUty9Jy>H-M8^;xclGta}2DX!W(Pk-tLF%*O+=aYELIE zoLuxQ8_UbmB@w(@W1Es#X^VEUV7WK;MP@0BRLOfxtg}pwl6>MpBzE)Tfr+uxI=yV7 zGVD2y<*}8~p;cFpRSqd63PWCDEn@MAv5W36)N}I#iz7L8R&l#=x4F%G+jKKLoBWL| zT5ZfJzh|`dlei$!pq@~NwK{VumuyeLA#K*=-_(=?w&%B2Ma2;SQ2VF2vYLZx*8#V^ z*)qBn#soICL+-5X!!$b*YLzs(nHWR>m6pf637_0DKAv7NxIGv`>uXZwE)KROyQAQ7 zN5)9L_g|!tf@P^Zk^DsceQu}yXX1hX4d?yDYC`ssm&o4va|XYjT6E`%k4>AnWb4sw z#S5OyfE5K7P0Ta(dkz0|1LibQiYXfLZ;?L$;wdP?brT6nz(1^2K6dtNG5{UyV+N$i zVMk1Aox(o3{!)USAqI=()98A@S_Vqe!UCT#cj|vy_|}d(9yYk7$Wn(1^IBpwOZWt2 zu87l83PMp7(Zk8P)VAmU8bZJ+f`L}{S9Eq(7(72JO)X}tke_=$am=pb>5jl)ilOgP zKUnj=?+~>>MRw-WXYZ-Gs_TitoRJEsxpk&uv`eEMPyI1yid2zus6}Wya~|KvclyUw zJh^Q1nXQPfp;)O*+A<2KvufOii^*j|p8w>N9T~|b#=?#BcO7!^t-s4w4KXZ|$LF(f^RJr_knOZy-$=K9= z7zriI-dyjr-<;8F`L=v6TD>@@4Vk5TB$<2q4AIv2XXf%Y}U3^_XyQ ze@{kEM2Y^iz($fr&sTtSNV`XyPpR#a>*4h&o|G;Pdb%FuC%p`=OJ3JjEIv6R;r~!L zeyvkfP6wOcP$J(RuM|+Iu)hmu2BxpJb<#Ne>I!>HK#K^qA)8=QFAG#s5f_bw&$SU^ zw^5DJ|435z(m(t1&0!k5ScVs>KgL9xKj27^pip=u*=LpfpRp+z4Wnn@3Qf$2 zyfr?(1j}3qrSHiW2NL{BFTgxZoBYWpv_gnXCUxKb{)qnWuewJ^I^HJnm#c_Er)11A z@sOiCT8v{!$)SsTrD1BrGnG=bRI}XwtBfLaQ6IjRn!tTa(W?L8J$YsCU) zm*3^s0nLF7#(x0pEf~j&+S?bJVz>-Aw(wH}7%0tpHANLE%V7@#lL>W(0?LrVuHjq| zyNEN7+(uh$Lt03lT^&Nua9C+k=(&tgz&>|A<*f=C3y!%sXe9@iYL=0WyqBj(kx?e` z^pH-o^OWJ$(QW?%l6-9Wu8bTS%0zCM=?e5K8ttX*cG#C>{cZ)LZI~>`tGPYJqkoll z*kaTlq)9u?SjpfsF?O}5e~n*4(I^0B`zSFC-MwFP+WvqI1LG4d!B&(|NXRkW9F69$ zo@hGt`geMve3fRBnBY1BKj-*1g;ck}$YAS6&Kfjxai=W+0|-iPvdWLdtwyX9arxbB zI!6@KCDZZ%+lS|=*Y_NaTK8pU6dJiB+qf!o{kLN24%+mKv>Gftr}(3j)0aUA&(9 z6VfzTkAx^Bk<{7D5?1m!h^WyI0I_eJl$yFn+G)Zj73^}(JS)`0=3^AD9bm>3O+fRRyutye zt_V}t##5p19H0Mw>w{XFQ!q_RIHaSp6c3)@M!Xm z6=~H7*ITUg1Q9k|o}n%^jJ};5#S9QWf4&-=j_iGBAVoYJuDHT-<%^7JAJ4$9MYGu*U}RM5rc}a^7sUvV4=oKh5!nuNK{?sh ze7DQTStmJsftLm|s%{Ug-BWJLm2viF~SLs5Ij}sj_#(>eEb_{bWv+ zg{0ta1Mj2EQ{bWvp2}R=f-~f1d zj%!VS+iL%jm!2 z-Vipv3!{)Q+c>I-C1@-tveGZh+FO3<$=iU-;uj~HrDl5T1BdHS$V?P!+XNJF+5fZL zpEjcDD`OzJPU%$+_%F56DXIi&2P+E!U&%8?%!mE2k2|K^jmG~(Hc}!PHt4)WQXN0m zv><4uypXk(EP`14+k2WxYy@-ghUA#CJ8Jo7L<=m45+;g!A0_*rPG=Hx$M-)@;N>6w z^ED)wrlA5%Jr+#i&mIqWyzUsNwvU%L2NzhKY*-t}wgD&A|hcI}^hy^~5| z^xA^AoS4htV`fs=f!_%kp6Pp`xN0|O?iynAkg7Y^@2Z>`PqKfVne`5wRUipCIsX!= zAsw?*fydy(WA}x)x5z~xHK1p}{~P27^3;n&8CSJ=oHpW51eAFVuSNUbq|STJxL54^#+iZpNJXr`aMrIf&1Ct^Ww+_u12Sk;Wt_1;W1BMVJx1 zhoYT|3O=v;c(ofm_hR$hUq$lNM#<#23S!uojS{nGq0zp#Es$QFbej_c<8r}E7!-`i;K2q<>mgV{{Q_k5XXtpKmKRo%?EK+KzL>opM> zGtbrCzH8p&dG%uZ>+;UpP5JrD?CnUip1^yqCutgY43d+)tK{GJXGDf;A$^#GN31Z4 zujQ|M)KAbnD~=Z?1%-;Q4EEZNMsJh1S#lV#&;)yFwzel&22hr0)V zw2$9lm{SojJWvovcU`7ODB}Im72VUqmRBdpqTkCPmafiD35!V=0sTw0vU+jwT+~@s z{%#64!(*`*jsfF5V}0dm?K-B}F z(Fga$$m@UjTAccdA=<6=lI@m#eLuC`h3aQR>nLD8q*6eqqy2CTB@4j$>2>SIOsWRl zQNsNA%|3IfECU`kZcrsU`8B8RMB%r4ZCE?ogl5 zHp;oJ#+ggtzQ}NA?{j55QZRLhGi*X(D=%kqrbCs-j2tN755G1HS{bi5lh^;`_va?v zL#@jP`HMfHcwc-{;VUlj)B_ImjG3g%4;4Fhx*K8br9Er^tfzCk4!*S(v2e0Qaa-(! zuMcE;`}UQg_jwu|629IpA7vXgX~5I-ha6B>WexH7)+Yl5JGae>l8Ge z{T08ko8k;DCv41T!~2Y^L-!BKhMrI*(U1;49u1sylXxmK6z zGsI%hgRj#PUr*0|#KyN9QLFDWD&Qm3d(9v#YZjAo*K3w-QPw2zeZQ7gf{&(TPe`n} zClpK;;HltMTAkUNsAl0>>J}Q%cyI8GQrLa$OP#-fuUA21`0zM1V#5R2MTs`^ug0wbem`%U#oE6k-+-aOWgz z;d*H<9Pr=0mo6KI#UK8}{SCFvDM&h!LiV~Z+)h~yPKWuN4;>5G^M~$lr3GNHOR$Sb zGZKPEN0PC<2o%JjfUnGHd;KpoTiy!qY6p_@8Dz~c3k}L#L^vgA$80jXB8)kT+??9$ z)gT{QdO@k+Ik)sfa_V8uSV!t*eE0CrGY! zohLSSDWq%h@idzKO`;cJb~(esT9cxPHSK;yX{U0#)XON+EFB-;e=buZP4G)v%L)Cd zIf-oD>fv;brO8;3>&WCx95DN^m23cZ4YL+}k`lsMEP;YcZ34F2KBPX@j2hGa{I?@| z6z0~r&*}TsAKnR(TDY}8W=6iFdUq(*VFx9zGmzE$a{x)@r~+I*SBccpp{bWkVZS=n-d+8hC#I z>L@YpBP|RZLIU8wlHmk@Ofy7G;yUDN{dVwSTGYVB;A(j2HQ40NxIXfEj-(%}Fc2yJ zAlMlZi)XlO3zF{e3mN)+pe6jn@S8cfeP@Ths`HJn`EAp5mr*c9V?#Zox3m+N9uG>18}a^^gFV`?6x(&>3-eo;6QpWM5KIgCea*K=lDt)7fJJrePkYwyRQD!I#8jn zAIIir?=Tj-jl^GnUmbX+zv$Q5!NvS0S$%fwGn)cIbok2HJYwUW3ApEZ8czfUF_tW+ z;>O5>NVMfVXuh)n2LWpeYD2G z$5eZAUW${{KbAAEzX!@665*OD$8BC$c_0QNK*fq1%*F3E(#5sj)R{@lOr!pO54N4m z{8?38!SS$M_fx_SQB~%(` z75tN;=sI=e-%#;vA1Ny#9%h!oR)bmpXIWyyrUNYQ9$yhp->TWW?4^=0LZ@2_G+GyL zP#I(j#MFH?Q1D+dh$WmRL7z@a$Xbg=%u(tO*SRcT(COC&D_I9~#%kic%t5w#a<*8l ztM43?{YBQ9Ry#8?i8BNuZ9RUdgA2{bOb82&ugz*nz%zA~4d3`vaY1L(cr_0rH+Ouh zt9iP) z!Lr%h;C_}^7N+7YRl0fZ(Q28k8_E)W-*RYJY!nv1qc)=VF~GA`mqoK1>Jifh*+Ol= zGDd5+=r@Dx$$fU8*(KjcTk2ZueE3t`!Ix-}RAs`nFRpTNjQf=geUS-5d`eROuwI zwVlc}fyiu4>QsXvj^>$@pp)vKHYZu8e7z~sBf)2vDbAw>7 z!v*FUu1^xGQ%t;Mj3IO>AI_YYWy;7--&v98M?{Q{I4rk^0gh~Q8T1;yE&Fmx=DWEj zW`!B3tG-y$PY2aLUyiE~a#H6=OnM?(S4#n4W)vgmc{_xU?B!)oPvGY9q7~owLCN{N z<6g($$|V@Ke5U>;m|uzN>LC)m|J&nj)9m3TbFz7RM4*DZF2b>m`Du0YOYxs^y7U(? zf9>LcU=k50z1!yf-{rfy<{a+>|18{ct;hR4u8qqveZBL9i9y998D^WC`W>QAiThz( zxy|x&Ory>zwm<&L=yD8L_LUUNauY?+DBo9XIx0OLN_lSy*y8F_6B|!_9MWcu50ZP4 z$ujJF;>vm}YY(HR@fYIzY2w{uC?HLV6LV6}7|)g-eCH@vyCK6`v+cZk_XU!~lM)Ja z<{x6J`Lh)UDD=jOn4UBp7>VMTnI(CL@@ZUd%+parIu?5VSmaK2pW(n0I-3xHh8jUn zF3qj1%1+*@Dd<2&4&7GTqWE>nOC=`3Cs4#oXiH@An`$&#{n3KM1;d>Po7i@IYlm&?$^VO%cs9(=|`@Z4nG<6JAo_27LohQT(hgvdxIsmyP<`2O?u~}#`Oxgsw z0-!$s@vthnU7x5V#*#Y346c~hju%y;%`&v&{QP{!)se}OiOCWEs{=-zrvWm*)=`sW zEMLE`gVqRk;J57+gk%}BgqUFO*Hq}O9f2>;MI$!5#$W79&0(XO?cDd{lq*LnR06XN zGV^wh$j*6H-HbHAML^ATw%e;~_~72pic@(wC3a;^z_X&{tI6BJ z)T?vLq|H`urvX@NyQd5wuYF2Fa3d?4s#s{dHTR7UFzI4s5M*EdE2~nUjSq)+&wvbL zrLFEe&+z-^ptX2I|0zXTN$KI(0_^+L;dZz!GbJaZz#C!_Pq@KL{2b$`{uTN#3d*0F zs83Lae~T^leCQYvNR9v6kgZ-tQyu#J36N~86Xm)kmPl0}mX$wNWEq6@v$b#J zHO+UyPwi$^nf^;9R$PC%GQa9Tz|X_=3}1*}TMNnOadTit9!ZWF*@}gb4GK5QP9;88 z7R)SC6k#N_FxH7#>}K2CaLA0~P@tgNw^r@m@+>K880FpHryNpSoV1;+dYxJKk%pqQ zu!ZHpJcf^I-PJL=#q5$D^hO)n-hhY8w3z&}h33ljiPc(GDz;f72)V%{9$wn*h0r`O zAb5H|BnbvP?ohZ(ZicwdY5GcPiUR6NBHsrg6>~*hwO#m;VWm*^v93kmHmyFbG4uH5 zYi1PQo28;gw3w=rk`fQc&92zz%PZ+|@MS1M8|`lC)XveTZqMC(Uxj9xdB0~B3f~`m z?iHWn06}y}nLNt9uqh(a_R4gsUOoE@N>?+g#MI^-x}xv9r3y+hdONww^z`%+_SFi?jC{&J7sIyF`NIh}QI;G3og3HLy5Ho}`7w^#`m$*d(l?45)g) zZ~;UFNp|vOBtO)6^v|)9g44pVg|e=HD4m;?Q7;~2Gtn`(KsJ-yHk;z#vQ3Ngi#nQh zC*i$tKv4clPRHCZWYW z)f_9r@&xr|$q>G%zUnXh%}!QBWY|QBPBxxCM2&jo!?{o5%}psSH-fg1lgxuUGlP>( zrvsogA>tMdvNIU#i=2*(=0mKcA267ZyZH+xC0quLfrH;m*m+QKIY6aP&Fk3=cvKt2 zSHS zVxYEEb#U7Mu^TmR9@*HaokmiF;ll(W#|kTqnpgLtv$L(p6>Q-K+?k=jS$O7xc-fULdlE0zTngq-& z&wG)VEAHoW;gp=f733^;r?1rSO|{Av>Mx>K`ls+1+VjjU-rQ2(VRQS0hB=_+pc^{N zg~1%W94Ae_C$cJ`Wn4JQv(y{AQ+TwJx;s~TEBHzc;T|DIYtGs_{P@s*Wf=4S4(|;! zVJ-Ed{aBEI3 zn{Oo7c^Cz5fS=2BK_5KE%ISqO=4Avh*l#k;RL*c~rar+Zu;az}gzRR-65RQxW(E`x zoG15U9w62tjC_0B4pv0Q5;+KZGn^MeDsoJv_{vOzar!_e4IKdsi8LL{d%_uk(sj#q z;hX0X=IdzNtXzmAJM4;Pyhw&79#8vA4y11&ZoinQ4;{~OxGG^gxsQN$zE?=}f1rTq zx|Lk)RkYYHO5-g_NL#T+`e6?N;1OhIp(L`D3Z%=)!{%hTxT0QpjpxT>&(q8@tY=>K4nMjIpRDlnNFPYy)#q2n@OidZdl-HuvzrmP^XAyw zQ!B=Oy0=k>Yeu@J^SXO3SEb_OVCikTh-~MN$a1vt@`(MOl9CJR_2jzWxN9l3I7{byLA9){oa242$jGj?Y4o_f~S4z}*LH;5gsmg9T=yxIiTJe&L@qKi7&KL(1_(dx}Uf z65=MKJweCAd81Dh0s#;`ItN4+fgNig|ALGXjl|Q$UoaR~=qDOU{Mor{{4njtb~mSj zm`Uo)=i!ly1CbtU*J_^4_)=dOE|IErsNt<)n0igRu&bPFOlQT`kFyw|VQMxEg}mHhPK2vXjz1dKH9?e0_~(`?TK z-l-3*+FpI^zU;Hd`bZg~CCz;9#;zD;v_8)Ii}h)I>v*{&7P@7!-1OVgz?PRs-#Y(v zI+wdl?)AM)IUBk5>Y++hO{hpM)A!jyX3G2K88B<~GXClNR|}twsmC_)G{i{ownJ(} z;z{7;4{@s{Gq8WiTQBc~PnG%E*86j|L5=`s>ii`0xTDNB!0_jkkmXVN zE>8&T)X>Frb}H)D{W5fU-J>HLK@wtl1^-kT+`R?OwbByuzq0pVr+G?2w-`4W^8juczAk=d-8Rx){atSa!-R>V7x(@-*3TY)U>2 zM&QRusc>)h`-dl1`f7%IF(aqFd6MJSr(c%mG0buNQju}MG<-Jx;m~f#49aAWbG*Q< zp{?l#yZ`xE<8p?7*W=rLx)R|VqfD7*Ti)4npaw7D-u+ngNE%*{C%0hF8^Q!%feRUp z_T53|Q#gTjNQeH`hz4+jLOA8?AiGW=XenqN_8GpUEo;hLy(f2KdBYhh3K zFh@hAJQBWlFM)AZIA zS{yX{1t<%40Ueps6M8pOaJ+%nKwjGH@$E`l9^WJ^<^{-N&PeK`WBq*HVab@jO4%G>!nNkbTzpexl8l0p}%CY1j!jY5eQoZ8Q~ z@tzR#XiaS@O6u`KaSvp;y=);2T#MD3oZt-depD~=G7sdBMtEHGdYDgN#@q?e(EOy0 znD6f5vcLG^Y%Cb`E4o6>!RO>rua<{i4ZdERq5mdmUgLGrwd-yK^IlI;aq*H-=`T3M zZ(qYt0k`c<)bGXn@7n-~yVPETBW<23IB5H$O&Fq%?M@$w4uaasSfm*xGM44*fE``l zJkj2-*NkZq!z6zpJ1&#^nB3#=QbUKw*JFN*=3VO^flkE%GU6iY0kdL&=#f2v8B}99QcP@HX?hz!B4P+p%*KJ>F#pSoZv2dvDoE!-3ok1H;}Y! z?9=9mB|7kJz@T>jjKcZoROWP8dOw|X&0#dpf<*_#7J-WiIm{H`JS>w|?Tp8YX8$?A zaca(D-GqI%kH2|YBbJlQ4mzVloR0QFqoDKPLe5VffdE+bos7e_0k1%IsjiDG$1B3_ z7k0E6+_Po_8)`R0Z_i8c=noK;a2i*UF`ZMxh}Flt^pZwi2CoB820emuQR{W@Lm}9) zypG%OfgQWl#EA4`gj{4@?K^EUr`6RQNE2Sb<0s(Kf3ijM-&521)yE`8 zR804&XL^|%^GAMu-zC@0mi;?rd>s0qVCH5r$iV4&`;wgN<7G?i>1}b`Lf`GMc;nM+ zf>Fn^<8LXpLtbb3-&Cmpx6k@&721v=%205LMt1!4&8Lk&5W;;vLAOPgQ%}H~?QAY{ zOzoIV^5_eKYi&2RE3qe|jv+kwVuPo<5x7)FW+J~ZhWfU7;WLnA-P!-#``+~FI)A5P zDLktuIpDeH!0`nwENVOu>YIblzt351Akjq-#xKD3+iUe5^B5zJMw8!y}8btnv9pd7+82tSuOCf z!r3d@x0;EO;_p&~ah-7wbw9%1nVr{N7n;0g@iFBkE6PyQzQB<6@D9t&;6G90fVN|I+JhotwJ*wyh&<`wD75NrahTDd$Wt9u3)t zJZG)={BDK6rsEV8KA?Xdm1_Olr=!o=l=P!#JuV-aO92h~0$PtKvR|OZe9KW#mJJLahtStEqi;=1o0BA8HT89eYHb=8~R8du}E6ioMKYm z`h}Ht^4f`o2>B~GnSollr0)g8N)W*`fcZGCWBEC!X=7JRM`n?c5n#|%f^djuP3)Of z)|8^-A@rKSLXyresV6Uf6KVDz_?l9C2&S#9wqeshrJ7l1n^{eAQuSF>e&U(+Q;Kek z1O$F}D^iGy)Xk-NYkSG^7{XL>VPLDb?;UlLlT>!aKKLEa|}R=@vAP_`=>& z{7 zo_C2*Lt{;=E~*tSXnN?~VXNTbD{G*vk{os@!Pe*<#iE-c?3}ZWUthbVgg^ zVccxybApw$q_(4>xCdXX7aF2WxJM9eZnoiTKIRk~Affd+%g9KRf#`^wYC|&a+cw*6 z_r^nb9n2q!WSukLife^I)XiJqzT@(JhTQvTXnNRLqb!_+V$rE%m{U^!;&IYS_UjSK zK{K@f&YR0ZV_$b;Z8jLdD$ip@a0ho9?E5y^J#FDR_c57@BL*@s;H&pghsWvd)q#A4 z*-Mje8SnyWfE3oOFV-czXOt*`-4aSo0s9ba^>U50+#AoG;l#4w)Wl?bWDfU}Rd{dGWb zI;V`(wBndr0@tw~_r7;@`4F~&!eX9~iWUc%9{LSx(6?tAxq#4iOz&4&>R(CzjwC34Tmx-638+GRVytdh_&SI@-RZq4`>@pqOcV z)O_Hxw(vE_J&lu_I&v{Yn_9Dr*c}jBmTxuPd6=NKj5)@raydVv@(!B7D?r$vje(F zpEVa+Q^j~`^bQA=?OFblyu^6W2otbbv7)t;E@!EI2R=$iX*I5xY>}u<>F+zrO4sy{q09IX9u`I0X(|fS z*g!{n7Rs6S9f~Y3C;jCiNqY|cm$FB!WcybLEDp&Kxb&Q|-3aB&&A(nWrW^`h>LHR( zt->9tuIw|t;`>$6bln^maLGbgmCs^Qa@6EV2&U)yW+J-vXE)Q+JTy~mHi>DE?)Kh% zBnD^F9!`ZscwNQhs)hZz$iAC-AywTB^SJ=$!eF=knmCN1mcdKnRDsf<-&O0}eYkR6 z)MeJ{lPl#x3t3H(4EleJru4@5T*5eGMa&L65X82{g?f9s3gVKEYPY|^xI8qUt#)+r2N8P$a=>uy?>sDy&g z@Y|Z6lvP9nBnU)L{a;hC~DGnho?HaHVs!DQ^lG7>EmoZtV|W(ibqcfGdXIpR#!n#@mW zbg(~LbiSFISOC=DW+mQ&897WWVnAfVnPx`*&PdKaiTU)Yj|dRZ7%pAMy~@J zODOIS3rL81utc47AbO(D7Rvmc&4+JmoK;GS<>)=JwYBBwfqJRPk|bWmbu2)*afaTuQ%S%>eH2yL*o%_g#G%Id6Kyj7w zC;F01DLCSH?w|KXRTXly;VTS!G}2?}!~M`oxpFDf*iSEzD(kD}enx&t>98p0XOs@M z-U60RmM2V$%%H%HG9(HI6%4CVHFZO~`5|hGnN>Nu{2{(D{>{>DDG()W9I50L#0!rGbIb8N^7dmcQ2T70}Vu`SWKry zx`reIH!W3f?8c~7C-^fDRk1%#mydxA`e&ora&DoQ>BLZegvF2LM zwq`#kM#?5nu?q-^-D$G;8Vaf!?3D)}42M){$Z+7@+3yjzr%Q}0x}5VTOHK%)lL>7w za2y#~pw3ssdts;95QpW(-gMn)NyvxeB@}4i5p-dw6wI>}*VThXVLYw}w5-%CxmHOR zzl#6cF2o7am)%FVQ8RT{Tu)tA2}vs|3b_#~4HhJF{E)tuE+zCmoMA4~0^Tnk)wZ)- z9hJerNKo$Gh+lREzHhi(7xXLPU`N|>;DO@+;?BpKu;PbEPK&q4d1dH_^i`mdlravC zcW1BM_4+)=nycd$orB#2ZFpZ~1Z6aXNu>0{p*fhOZ2x3BI`T}9W>F`i-Eq>HW3~`P z^X$WoY8NkvUfCs>EN3Ultl_#mU0}(fMvN6Gg8Fat^CW2ZEv$4H6s9U#d&Uqcw3!?c z9O7mO0Gn!X*0rXgmF0{t+>+gdaQhs%yaayzSEa#f&}*p?B31d8GL2(|Gv5BNq+^l^ z=mieH%H^ghHHmK~{JTKLL&IW*mNM)Xn1AO~tz1E3ld%-}@o8ygDo~Ty?B?nga-ZXf z;5+k~XEK)r$tdVqC{`tHP+)yFaJ9&!6ZrXX0hbi6-;(BUVwwW5H!CDJz;maFsKCC^ z!G*A_XPAoH8H_SRbeoS+mayXCoaLW$97w3Yw9c&n&U?%fYCD{P=XJ_@PxStfutivO z*i;LpTL}*+m|tuz)~_38kt*97t_`PRV)cvSOG?OA!HghxA*(4bUMp60pbcQVPAcnG_=f-#%$7cy-LFYTqqOfBN#xU@)J)7ZE&eJ$8Cf^*r^8_3)^3xps^!wr;U ztUSbuOQzlexwumBVrB_UY5KAXUUaaUPgua!FjAOLYh}K<$ z3rk;)f8!Z$>Y#PzOaQnolnLW!SAs$ED72 z<@sUSt5{!;W>rkj#(PwPF}0#BaAs?gLZ0b`RUS_Z_=QFaHKg{;`%PH!FAKrixbt?3aw@M^*9KfF!(pTD(dD zqeO*Ad|p6XZA#?kqSQ zN9w9sgC^FmNe3lA)Yv0B9Tn>3tZxKNdH?%nkw4D_16yA@>otm0g&0?x*Bs< zVKZ_af-1{>j@$2VrS6~Sv8#-sO`O&18jsp{%gE&Nb#jFL!3!BpkulZ#nMYG~(56Aw zd;QU%ob1>RYFvqcbb=$SmvF{>fHQ~9$0BKuI%I696lL*pnC!!`D;63ZMtbXv!l4Bt6)Wldzi7(zf zAjth%U&sIIDe&X(?@A4&zWRU{xjHM5N1Kt=4*``qn&qCG@N{mk2}9qilVF$t!Ip)x z(V9yGL97_tC3;8mk3Uz!O309$SPi>PWy1C;$W4GUj%s?1fT!HFbfYsNO0#cX$z1`W zy4#R?H;`CcOG}E~yh=Zoy3c(Dub$gccVJ*>jbVY|x3vi2I*U#s)dDr6 ztFB|6VAH+%r)64Zq^Ii;e7Z6UNbxL;6}GdMItz756S=bw96q-Xm9xmVgSPoNJ7^XR zS_Su*-Ip-R5c9LxcI{~Lq_>(3ndI1D8Ptgh33vy(Bdx)6sOH)iu~h-1x%B?Q;Bv1e zT-Qg^ECqKfBdh&P1OoBVw4`O<6ZNfIx?1qR5>IjduRb}G8XFwwHgYT!PL7OPCY|6?i5$JA^^(Ry-K-SZN(lW&iupxXKpO&tHbQGb-bw|1JZc)|E-Ol42 zg-ZmA)fsLX#m~GNF;Cq*b3<`5RdY=Z75=}w6>AHvF|3#+3aK$ABW0oznJ{15+s9>#aU^o~iWS0m5B!@-HKRlS|6)meH)2@QFBTO80 zm%#uDBv9o`;TM^cTGQ?nK}3N7;vtyTu`l1X?38hV5Q9404%t z`AJOVp||$ZOTap<_8<51)`V~r8(e7j$d;vfPjW;Z^7Oe z5IKwX$o)_?+Y;Fw-;i{uj%9K;JlEHj|4l37+kd*{IUcun|1R{%b`k=iF1K#?0rvQm zZwi*VX!nr&2!x+rUS<8&Qlr>0?0()YG7^*MTHT3*VC zVu>QR?LvY+8Z3D9kr3{+J0a!P(A~Y{T2tk|%RL22=Xd@-gZ4P~IeMX5P zg4F5d+|*`Jacn{-4~mhX%;f*BJZjoDvGa@#uuwrvbyYkG=UQdbF3y9YG-cIWL0z7Z zrMG$Z5;_#8f66Ri({fLa?0kxS^b(*=G#8c+IG>yPg)whmksaT)^ZE$YS5 zSEhUzt6CYAkyadpA=5Iy4>QxU<;KpGE{6@==eiC!e)U1cKQF<4BfN%gM2KjlnwvyV z7Bhg0Xu|jwF$7_MQD3lS?9{WMs%t^$>YB7qXM4;Tb^10L)mu*DUsR;3=P%L}~ZjX~R)z9H1$-$6CZ; zfBZFMoMtZQIznm*CDAzBXKb@rq0Rv@cive8X;e(7G(BV_$&>+AAjXn`OzO?yMVh7o zh^zoRMjark1VR{2>&7BaqZw_A5N$f5Y$GRl2f=h_F@cMvp2ManHTx}2K6+2IfDHQC z&Vii#I?QEgbeJV1M0Kj8^N&>3m{4q+cVahnEx#e6a%~3G^H1Vhny3+Xz9VWnBVovvZNoy&F^?R9vZLFoo=u#mJXL~#gInH_z z(W&^IH(iS6;@r5Wf8(t%05^pZ*LQzF=D+#98*AU8OtVN@nhzY$ss2XFgLhQ?8{SKJ z;^&A2bIBg;**_QbIu0nGH{U5q&NI^@l=}Cg`WSrB z`jHCq{(%j*h~Z6fd4V??xSEU-o3R$m-HqM0(gR`YE=$+7gqW2&H&4jldiminy^Tt}cs(qc^zhXtn+#6G**^UyzaP z?{3Y)G-|`58xgU6>f6>8)iQLwnwzZu{}=H){N)JXs<8(ap(Lir@xtSu>kP3GGxsDz*3nHsmP-s#J$yt4G?EhQrH3kXg4<( zx0VAaL$`MI78!~8@FOU?(M4SL18wYF_-b$#pOkYpyHz(Oi4n%@g?YyLI>$8Fxq6Jh z-CEa6msmYbY?GijB4e-HPqN4JjSQn=7&UuGj^qMfC9SWe@1sjC!=u};@Wln+jsJ4t z-cbaP0f!+W;5DU8t?*T`%d%FQJ#$33a8PP~u55mJYq-}rYkQ_LGve*NGvgYIH{k!H zQf?5YuTbLbac(xb6xnInyj*a7rrMllxE5~=PM=RXW8-qa;4l2@ykncqh#NGqBsh4x zL-kUyYHZaAtn8+%8xQQc9fWT|RFJv>WmCV)6VCTP-4RK}E!qqa4oEkjMk*<_wTb{N zS2RGK;~%#}X|C18gZLkG!s6aV{pH*^akPPxPa3TsY*ZUahHOw*f3lQ|D;)`EPy5Lt z2%OC1_(pdF)O65(VxvUe`=C-l3_^m#l#LMF3u{i^LoZK+dR`(qrQ_uArL zSPcdMVR#v6$W2AuqYubt(12imi~>QN;PcpaAtLDsTadFdvZ9m=bP;DT6zb(0#uq*a zQ_`F_mW6IbV&u&;zAv$(_|0Su!AkQWB#)xvI=84#7}pFm0j!evU&;QTtAtqLk{IQI zeFYc)50%xIryUV=L^A+GurcvI72cr88$Bb8EVlrgCNTj9sNzivU`JHQEX_JMFw5uqL<@wb{d) zOZTVWZp&dMW+0zUF5=)%c0R++${>k4i7!sd1OD|i{%j?(tqv}oD=7o z59&XIo>w7Z*^b>dj>anM$(%^FvZpl(F@d^WZ-Dt|zBYwco31PsrZzew zzh*k`l-W$4W(I}lg+WupFeAht#*QI$Nz0P6!>h`g^YJcIfOIx*!1~%i%v{>m`J?Sf zu}3ZQwI$$`jY=V#Ws=M@CEdQ<4N)jCQ;sn!{n)6lgmw}jOP9q<*4k4|MPjaiQ&&T) z6q6@JxzMy*^<*6e@rL@mv|evnbV6xkSbh}A!| zU1dC{rsj2_Q74Ky(s@hgD_GV*f&jyl2@&x|)d2FF7>~0mW`l$kyo0o^!C=Zy|5cZ3 zc6N1v@F7}9?W;G}tTJLq7g&h*8z%Kg+&X@7vaM$09eW!oWi@&utz> zH&4k%ruMfoYzr3v&qh10nHr{NwjTe(GK>QrJ(%Ak)RTbAi&IGzf0{SYU%2X zJ}C#^(8o76TcyMDKEEtY_~y0I1FEFqz0B$ezhbD&tybrj4-j-cnd2uXLf1FrwC%Uh z`T2JK#tCa2y>PqH1qiCPGUBN^FCy;i;r&%lne);XO|`)tu+1f26eiy~trhq>-pc}D zBYJ8ApfKJwPjg}wLsb!7U&MsWGbCf#*ch#(l|jsx#F@iTp9LQ&%juBWw_3d0=gb~% zyeQT2Q?yPCsmmT_$MdyTzGIsjIjM~_u4K6QIrzEm>dadE`>qfg$ji&FSYp!N?$RlV zi?(d6nFy=$4*Ykwb0JicyoGzk!{d#kGeD|zc}aadk{lO@;g8!ZE#r|`;`c+>zR0x-1$r;j zFzhzcanPHtToQ^~74#}M)PEP=v8(K^o_5+?F0T^)j#pdFla@_H71Di-co6%5j_-1T zURC}t*ZI2h1iNr`J{KNwIT^T-c!9(beg(}G*9OvgWaSZO&fRpM%StS_Ov#S=#@&+GA&-`wz}jo zZXH&!t*F0#w_r}Ksm;h9f&H!6mt*4vC}(-3Ho+dtw?1?qLxqUo3AoUR1k$YS&VrK+ zoZLu+iJ(y)Znrrqf2F6c0elD?KhT;E>-R`Q z$ma6dgW~9`i1=WIQG;5{NB8wxN6HUTz7P>Bmc=DLc*oCZYk59P5i>>9eAR@Au_*AN z3l?m7zD~d9E)7!^5K4t)EU$>TbS)t9q09^JM)&km@t+I^Lds0;$iQjv1YLH@lo&rp zK5Pbtq4=`d*yb0STos!WpSPE6v3EQ^_xCs9_?FXG2Ek|u^FPmpi>`ocMwXsXDE98| z4?OjSsl-ArLx`S2uWu7Q0VfZ;?#%DE1D#+(tQ`)Q^PRp|FI(jHOqm_us`Qi$kPu3E z_YhBN)RLpwwk$TtfvQ>x&g*|cBa5fQ_97Pr&)f7#q zKart^KU79j%SG6*oEKa%Lev)?U?}d;&$%wY{O1LgdGW+!6t{kgKYg5xlvOu6@|@vP zfdUz|45)li5kd?X1e+k*u$nlEsdZQND|8{LUA&_P++M(D_oYcbjva zYL6br6OQ$g%^A;Afdfxyl|*Tr@F2#3VkWVmLhPUJZd_%!L8L@o5fxHfp3flxkxE84 zddMXUPh(`69bLjCm#J+7`@IwM#Y2SS^{T83DF?!Ip8Yr~9ioLl&XDFK=USHhC~P3S zH$yiUr*3Dp_r0YEdyyAzaB=tMr;)A9t=(r1?b+@4>5%zs)F8CfjV=SIa6{}N8rHV3 zIQ%M{F_nh!>+lTJOZ`ugTXkFMhdc-maZ85uCk4kCkU?>C6tNef%7%!4iDt)5 zTAH!r;%tJQ0T1h`wgH69AIfsurs*BBlI@ti(q{gDBL<{HoqPENhRUQ7@uWB0Bi%s|Z3wU{D1) zKK}Q{W;(j!W=vYr$oauIqm?>ef1EEe-$vrwx!utMg&Wy6K{83U)sfA}>N^we@bpYQG53!*4S$|7aZuqfPtrRk0P0i$!u*pfR z1zrE|3-b_NaX^q$3jNa1p?tUi&aYn*2y^S$&Qi9hCfs_A7)@0}-w3U4Lggh*d(*Ee zlVn~>5;j{9YujoQkjt=8K}NuUFp=Nx?h%bKIQ>(*Dt9i|Ppv@f-P#*OQKGLtpSQt!oR7o2E( zlkNa;sHuuGh$)xFPXTq8%@CmhC~=*{6sCy};bTi#GdSD_!%w@iEkuwa6sBzY{i$FE zB8?Ebu@t6h6|#my^jhZuvt9=|UO~G98OHK(4q37ZmW0^G;uK!OBLc?4IDoG_^~4As z!WS?h9(cOx0yFg9S*%;L7)LhE0N=3XEZ0&QSF+N!6Y-rNtZ9nz4)mB|AI4KoVXz>V z&~_)sEqWd^2M*nb?l7b;=gc^|8+HNKc$R@J5j~3JjujFI&A-ng0R{r_CEPxfM%<1q?QusiHy7yO)&(K#<#_l;jMfA{rQxcesF*T8 zCVRe(NqTYxalD*s&jAk&Ad32EIo(o#&z#H2?AvLR=GJU_C{0H?+1~Nr#wOKoZ@XfQY48%5GqT70 zrJShRQM>Wv^q+U5Qmd{Iy7!&aj2xIc232reJa2O>ay?OBUbExnt^q?&?(n!M7dqXa znUkRx)5)}Nx}PfjcjJk$E(Twpy$1;KQ;^nzE%TsT4hzp1G>k4$T3~qrZnF^d*86$( z!HFxy#m#I!7b+yg7^KBy#av{}#$INq(tU7!ucl&Z(o$)8nY)25OuHVuSa-v@5hi%= zfwF9UCR>>jn0w1-JP>d`Bqg#Xs;z`3C(~emX{JNZhtVP_uB#|N_yiiEKx{+NeH{tpSi~%S0MwwyuwtStx(zkP~&t z^nJvrF#d!1LXUvcau$EO>Vo`TRk0c2>IZH_CpDD=ESNON{gVO!E_Ez>C)*8 zVaJpH&kQ7K3a;thL@ee^{*(uy?}z4KGvx8@ zFhVaws|DT5L6dPisPb$6HXTx;N-mxY{mWg&4t)!c*+`p z-P?x}?=?ssurpW$iUK4YF%9YhS#z;2n7POi5tg4S3p=Ggk(24GLo@uBZ)aySIypj{ zGLsF3X_@EVp#LL)KU_i4fZ(100C-GY@^j|Reo9OXHW)zJY=CMxb+*dV6d(%xtp*Oj zQPe%p%*6G$c!m$jgZ<@Te((F2_g~cc3gbet)FV%9`~~y& literal 0 HcmV?d00001 From 0e6f2158a170893003fec8e4b4282864637ad375 Mon Sep 17 00:00:00 2001 From: JSangaleti Date: Mon, 18 May 2026 14:25:48 -0300 Subject: [PATCH 04/16] =?UTF-8?q?Mudan=C3=A7a=20do=20diagrama=20do=20BD=20?= =?UTF-8?q?para=20a=20pasta=20de=20documenta=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../diagram.png => docs/assets/database-diagram.png | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename src/database/diagram.png => docs/assets/database-diagram.png (100%) diff --git a/src/database/diagram.png b/docs/assets/database-diagram.png similarity index 100% rename from src/database/diagram.png rename to docs/assets/database-diagram.png From 6b04662e72b285f83370b0c27894f405be28e3e4 Mon Sep 17 00:00:00 2001 From: JSangaleti Date: Mon, 18 May 2026 14:54:45 -0300 Subject: [PATCH 05/16] Proteger fluxo de PRs entre development e main --- .github/workflows/validate-main-pr-source.yml | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .github/workflows/validate-main-pr-source.yml diff --git a/.github/workflows/validate-main-pr-source.yml b/.github/workflows/validate-main-pr-source.yml new file mode 100644 index 0000000..815508e --- /dev/null +++ b/.github/workflows/validate-main-pr-source.yml @@ -0,0 +1,36 @@ +name: Validate main PR source + +on: + pull_request: + branches: + - main + types: + - opened + - synchronize + - reopened + - ready_for_review + +jobs: + validate-pr-source: + name: Validate PR source branch + runs-on: ubuntu-latest + + steps: + - name: Check if PR to main comes from development + run: | + echo "Target branch: ${{ github.base_ref }}" + echo "Source branch: ${{ github.head_ref }}" + echo "Source repository: ${{ github.event.pull_request.head.repo.full_name }}" + echo "Target repository: ${{ github.repository }}" + + if [ "${{ github.event.pull_request.head.repo.full_name }}" != "${{ github.repository }}" ]; then + echo "Pull requests to main must come from the same repository." + exit 1 + fi + + if [ "${{ github.head_ref }}" != "development" ]; then + echo "Pull requests to main are only allowed from the development branch." + exit 1 + fi + + echo "Valid pull request source branch." From 904829a094b3199f62a09e0cd0e443aae4ed65ab Mon Sep 17 00:00:00 2001 From: JSangaleti Date: Mon, 18 May 2026 15:10:32 -0300 Subject: [PATCH 06/16] =?UTF-8?q?Cria=C3=A7=C3=A3o=20de=20m=C3=A9todos=20p?= =?UTF-8?q?ara=20autentica=C3=A7=C3=A3o=20de=20senha?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Foram criados métodos para implementar a autenticação de senha segura (8 -- 42 caracteres), armazenadas em hash no banco de dados --- package-lock.json | 17 ++++++--- package.json | 3 +- src/controllers/auth.controller.js | 55 +++++++++++++++++++++++------ src/controllers/users.controller.js | 32 +++++++++++++++-- 4 files changed, 89 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index afcd2aa..ceba5df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,8 +7,9 @@ "": { "name": "localhub_back-end", "version": "1.0.0", - "license": "ISC", + "license": "MIT", "dependencies": { + "bcryptjs": "^3.0.3", "cors": "^2.8.6", "dotenv": "^17.4.1", "express": "^5.2.1", @@ -111,6 +112,14 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/bcryptjs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-3.0.3.tgz", + "integrity": "sha512-GlF5wPWnSa/X5LKM1o0wz0suXIINz1iHRLvTS+sLyi7XPbe5ycmYI3DlZqVGZZtDgl4DmasFg7gOB3JYbphV5g==", + "bin": { + "bcrypt": "bin/bcrypt" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -892,9 +901,9 @@ } }, "node_modules/nodemon/node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "dev": true, "dependencies": { "balanced-match": "^4.0.2" diff --git a/package.json b/package.json index 8544500..4c11d30 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ }, "homepage": "https://github.com/JSangaleti/LocalHub_Back-end#readme", "dependencies": { + "bcryptjs": "^3.0.3", "cors": "^2.8.6", "dotenv": "^17.4.1", "express": "^5.2.1", @@ -34,4 +35,4 @@ "devDependencies": { "nodemon": "^3.1.14" } -} \ No newline at end of file +} diff --git a/src/controllers/auth.controller.js b/src/controllers/auth.controller.js index 1dae6a3..4659a57 100644 --- a/src/controllers/auth.controller.js +++ b/src/controllers/auth.controller.js @@ -1,21 +1,44 @@ +const bcrypt = require('bcryptjs'); const pool = require('../config/db'); const ALLOWED_USER_TYPES = new Set(['cliente', 'comercio', 'admin']); +const MIN_PASSWORD_LENGTH = 8; +const MAX_PASSWORD_LENGTH = 42; +const SALT_ROUNDS = 10; + +const validatePassword = (password) => { + if (typeof password !== 'string' || password.trim().length === 0) { + return 'A senha é obrigatória.'; + } + + if (password.length < MIN_PASSWORD_LENGTH) { + return `A senha deve ter pelo menos ${MIN_PASSWORD_LENGTH} caracteres.`; + } + + if (password.length > MAX_PASSWORD_LENGTH) { + return `A senha deve ter no máximo ${MAX_PASSWORD_LENGTH} caracteres.`; + } + + return null; +}; + const authController = { register: async (req, res) => { try { const { name, email, password, userType } = req.body; - if (!name || !email || !password) { + if (!name || !email) { return res.status(400).json({ - message: 'name, email e password são obrigatórios.' + message: 'name e email são obrigatórios.' }); } - if (password.length < 6) { + const passwordError = validatePassword(password); + + if (passwordError) { return res.status(400).json({ - message: 'A senha deve ter pelo menos 6 caracteres.' + message: passwordError }); } @@ -28,6 +51,8 @@ const authController = { }); } + const passwordHash = await bcrypt.hash(password, SALT_ROUNDS); + const { rows } = await pool.query( ` INSERT INTO users (name, email, password, user_type) @@ -38,7 +63,7 @@ const authController = { email, user_type AS "userType" `, - [name.trim(), normalizedEmail, password, normalizedUserType] + [name.trim(), normalizedEmail, passwordHash, normalizedUserType] ); return res.status(201).json({ @@ -86,17 +111,27 @@ const authController = { [normalizedEmail] ); - if (rows.length === 0 || password !== rows[0].password) { + const userRecord = rows[0]; + + if (!userRecord) { + return res.status(401).json({ + message: 'Credenciais inválidas.' + }); + } + + const isPasswordValid = await bcrypt.compare(password, userRecord.password); + + if (!isPasswordValid) { return res.status(401).json({ message: 'Credenciais inválidas.' }); } const user = { - id: rows[0].id, - name: rows[0].name, - email: rows[0].email, - userType: rows[0].userType + id: userRecord.id, + name: userRecord.name, + email: userRecord.email, + userType: userRecord.userType }; return res.status(200).json({ diff --git a/src/controllers/users.controller.js b/src/controllers/users.controller.js index 8b1ecec..f60b5dc 100644 --- a/src/controllers/users.controller.js +++ b/src/controllers/users.controller.js @@ -1,12 +1,33 @@ +const bcrypt = require('bcryptjs'); const pool = require('../config/db'); const ALLOWED_USER_TYPES = new Set(['cliente', 'comercio', 'admin']); +const MIN_PASSWORD_LENGTH = 8; +const MAX_PASSWORD_LENGTH = 42; +const SALT_ROUNDS = 10; + const parsePositiveInteger = (value) => { const parsed = Number.parseInt(value, 10); return Number.isInteger(parsed) && parsed > 0 ? parsed : null; }; +const validatePassword = (password) => { + if (typeof password !== 'string' || password.trim().length === 0) { + return 'A senha é obrigatória.'; + } + + if (password.length < MIN_PASSWORD_LENGTH) { + return `A senha deve ter pelo menos ${MIN_PASSWORD_LENGTH} caracteres.`; + } + + if (password.length > MAX_PASSWORD_LENGTH) { + return `A senha deve ter no máximo ${MAX_PASSWORD_LENGTH} caracteres.`; + } + + return null; +}; + const usersController = { getAll: async (req, res) => { try { @@ -97,12 +118,17 @@ const usersController = { } if (password !== undefined) { - if (password.length < 6) { + const passwordError = validatePassword(password); + + if (passwordError) { return res.status(400).json({ - message: 'A senha deve ter pelo menos 6 caracteres.' + message: passwordError }); } - values.push(password); + + const passwordHash = await bcrypt.hash(password, SALT_ROUNDS); + + values.push(passwordHash); updates.push(`password = $${values.length}`); } From 0bda298ede1156ac85c7cb9f089474bb9ae05886 Mon Sep 17 00:00:00 2001 From: JSangaleti Date: Mon, 18 May 2026 15:16:51 -0300 Subject: [PATCH 07/16] =?UTF-8?q?Corre=C3=A7=C3=A3o=20do=20Swagger=20e=20d?= =?UTF-8?q?o=20seed.sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/swagger.js | 16 +++++++-- src/database/seed.sql | 78 +++++++++++++++++++++++++++++-------------- 2 files changed, 67 insertions(+), 27 deletions(-) diff --git a/src/config/swagger.js b/src/config/swagger.js index aa64ad9..292683c 100644 --- a/src/config/swagger.js +++ b/src/config/swagger.js @@ -82,7 +82,13 @@ const options = { properties: { name: { type: 'string', example: 'Juliano Sangaleti' }, email: { type: 'string', format: 'email', example: 'juliano@email.com' }, - password: { type: 'string', example: '123456' }, + password: { + type: 'string', + minLength: 8, + maxLength: 42, + example: '12345678', + description: 'Nova senha do usuário. Deve ter entre 8 e 42 caracteres e será armazenada como hash.' + }, userType: { type: 'string', enum: ['cliente', 'comercio', 'admin'], @@ -198,7 +204,13 @@ const options = { properties: { name: { type: 'string', example: 'Juliano Sangaleti' }, email: { type: 'string', format: 'email', example: 'juliano@email.com' }, - password: { type: 'string', minLength: 6, example: '123456' }, + password: { + type: 'string', + minLength: 8, + maxLength: 42, + example: '12345678', + description: 'Senha do usuário. Deve ter entre 8 e 42 caracteres e será armazenada como hash.' + }, userType: { type: 'string', enum: ['cliente', 'comercio', 'admin'], diff --git a/src/database/seed.sql b/src/database/seed.sql index 889d152..24d239e 100644 --- a/src/database/seed.sql +++ b/src/database/seed.sql @@ -1,24 +1,31 @@ -INSERT INTO categories (name) +INSERT INTO + categories (name) VALUES ('Roupas'), ('Comida'), ('Lazer'), - ('Mercado') -ON CONFLICT (name) DO NOTHING; + ('Mercado') ON CONFLICT (name) DO NOTHING; -INSERT INTO users (name, email, password, user_type) -VALUES ('Loja Estilo', 'loja.estilo@localhub.dev', 'dev_hash', 'comercio') -ON CONFLICT (email) DO NOTHING; +INSERT INTO + users (name, email, password, user_type) +VALUES + ( + 'Loja Estilo', + 'loja.estilo@localhub.dev', + '$2b$10$8a0uwSeIyWgs/rO6QanhPODmMrcpsKn5BHy5TapuIgOaRy57WuvzC', + 'comercio' + ) ON CONFLICT (email) DO NOTHING; -INSERT INTO stores ( - owner_user_id, - category_id, - name, - description, - address, - opening_hours, - contact -) +INSERT INTO + stores ( + owner_user_id, + category_id, + name, + description, + address, + opening_hours, + contact + ) SELECT u.id, c.id, @@ -27,23 +34,44 @@ SELECT 'Centro, Campo Mourão - PR', '08:00 às 18:00', '(44) 99999-9999' -FROM users u -JOIN categories c ON c.name = 'Roupas' -WHERE u.email = 'loja.estilo@localhub.dev' +FROM + users u + JOIN categories c ON c.name = 'Roupas' +WHERE + u.email = 'loja.estilo@localhub.dev' AND NOT EXISTS ( - SELECT 1 FROM stores s WHERE s.name = 'Loja Estilo' + SELECT + 1 + FROM + stores s + WHERE + s.name = 'Loja Estilo' ); -INSERT INTO posts (store_id, category_id, title, description, image_url) +INSERT INTO + posts ( + store_id, + category_id, + title, + description, + image_url + ) SELECT s.id, c.id, 'Promoção de Camisetas', 'Camisetas com 20% de desconto nesta semana.', '' -FROM stores s -JOIN categories c ON c.name = 'Roupas' -WHERE s.name = 'Loja Estilo' +FROM + stores s + JOIN categories c ON c.name = 'Roupas' +WHERE + s.name = 'Loja Estilo' AND NOT EXISTS ( - SELECT 1 FROM posts p WHERE p.title = 'Promoção de Camisetas' - ); + SELECT + 1 + FROM + posts p + WHERE + p.title = 'Promoção de Camisetas' + ); \ No newline at end of file From 745b9204ab8944bba50785cd84af7c1777cd0de7 Mon Sep 17 00:00:00 2001 From: JSangaleti Date: Mon, 18 May 2026 18:19:49 -0300 Subject: [PATCH 08/16] =?UTF-8?q?Implementa=C3=A7=C3=A3o=20dos=20m=C3=A9to?= =?UTF-8?q?dos=20para=20localiza=C3=A7=C3=A3o=20das=20lojas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adicionado um arquivo SQL que altera a tabela de lojas para terem campos de localização e alteração do arquivo stores.controller.js para que os métodos permitam a inserção de localização e o retorno da localização por meio de requisição para abrir app de rotas, servindo como forma de mostrar com Maps ou Waze como chegar ao comércio desejado --- src/controllers/stores.controller.js | 280 ++++++++++++++++-- .../migrations/002_add_location_to_stores.sql | 54 ++++ 2 files changed, 309 insertions(+), 25 deletions(-) create mode 100644 src/database/migrations/002_add_location_to_stores.sql diff --git a/src/controllers/stores.controller.js b/src/controllers/stores.controller.js index 37b44e0..c56370c 100644 --- a/src/controllers/stores.controller.js +++ b/src/controllers/stores.controller.js @@ -5,6 +5,104 @@ const parsePositiveInteger = (value) => { return Number.isInteger(parsed) && parsed > 0 ? parsed : null; }; +const parseCoordinate = (value) => { + if (value === undefined || value === null || value === '') { + return null; + } + + const parsed = Number(value); + return Number.isFinite(parsed) ? parsed : NaN; +}; + +const validateCoordinates = (latitude, longitude) => { + const parsedLatitude = parseCoordinate(latitude); + const parsedLongitude = parseCoordinate(longitude); + + if (Number.isNaN(parsedLatitude) || Number.isNaN(parsedLongitude)) { + return { + error: 'latitude e longitude devem ser números válidos.' + }; + } + + if ( + (parsedLatitude === null && parsedLongitude !== null) + || (parsedLatitude !== null && parsedLongitude === null) + ) { + return { + error: 'latitude e longitude devem ser informadas juntas.' + }; + } + + if (parsedLatitude !== null && (parsedLatitude < -90 || parsedLatitude > 90)) { + return { + error: 'latitude deve estar entre -90 e 90.' + }; + } + + if (parsedLongitude !== null && (parsedLongitude < -180 || parsedLongitude > 180)) { + return { + error: 'longitude deve estar entre -180 e 180.' + }; + } + + return { + latitude: parsedLatitude, + longitude: parsedLongitude + }; +}; + +const buildFormattedAddress = (store) => { + const streetLine = [store.address, store.addressNumber] + .filter(Boolean) + .join(', '); + + const cityLine = [ + store.neighborhood, + store.city && store.state ? `${store.city} - ${store.state}` : store.city || store.state + ] + .filter(Boolean) + .join(' - '); + + return [streetLine, cityLine] + .filter(Boolean) + .join(' - ') || null; +}; + +const buildMapLinks = (latitude, longitude) => { + if (latitude === null || longitude === null) { + return null; + } + + const destination = `${latitude},${longitude}`; + + return { + googleMaps: `https://www.google.com/maps/dir/?api=1&destination=${encodeURIComponent(destination)}&travelmode=driving`, + waze: `https://waze.com/ul?ll=${encodeURIComponent(destination)}&navigate=yes` + }; +}; + +const mapStoreResponse = (store) => { + const latitude = store.latitude !== null && store.latitude !== undefined + ? Number(store.latitude) + : null; + + const longitude = store.longitude !== null && store.longitude !== undefined + ? Number(store.longitude) + : null; + + const mappedStore = { + ...store, + latitude, + longitude + }; + + return { + ...mappedStore, + formattedAddress: buildFormattedAddress(mappedStore), + mapLinks: buildMapLinks(latitude, longitude) + }; +}; + const storesController = { getAll: async (req, res) => { try { @@ -18,6 +116,14 @@ const storesController = { s.description, c.name AS category, s.address, + s.address_number AS "addressNumber", + s.neighborhood, + s.city, + s.state, + s.postal_code AS "postalCode", + s.country, + s.latitude, + s.longitude, s.opening_hours AS "openingHours", s.contact FROM stores s @@ -26,7 +132,7 @@ const storesController = { ` ); - return res.status(200).json(rows); + return res.status(200).json(rows.map(mapStoreResponse)); } catch (error) { return res.status(500).json({ message: 'Erro ao listar lojas.', @@ -43,6 +149,14 @@ const storesController = { name, description, address, + addressNumber, + neighborhood, + city, + state, + postalCode, + country, + latitude, + longitude, openingHours, contact } = req.body; @@ -53,34 +167,74 @@ const storesController = { }); } + const coordinates = validateCoordinates(latitude, longitude); + + if (coordinates.error) { + return res.status(400).json({ + message: coordinates.error + }); + } + const { rows } = await pool.query( ` - INSERT INTO stores ( - owner_user_id, - category_id, - name, - description, - address, - opening_hours, - contact - ) - VALUES ($1, $2, $3, $4, $5, $6, $7) - RETURNING - id, - owner_user_id AS "ownerUserId", - category_id AS "categoryId", - name, - description, - address, - opening_hours AS "openingHours", - contact - `, - [ownerUserId, categoryId, name, description ?? null, address ?? null, openingHours ?? null, contact ?? null] + INSERT INTO stores ( + owner_user_id, + category_id, + name, + description, + address, + address_number, + neighborhood, + city, + state, + postal_code, + country, + latitude, + longitude, + opening_hours, + contact + ) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15) + RETURNING + id, + owner_user_id AS "ownerUserId", + category_id AS "categoryId", + name, + description, + address, + address_number AS "addressNumber", + neighborhood, + city, + state, + postal_code AS "postalCode", + country, + latitude, + longitude, + opening_hours AS "openingHours", + contact + `, + [ + ownerUserId, + categoryId, + name, + description ?? null, + address ?? null, + addressNumber ?? null, + neighborhood ?? null, + city ?? null, + state ?? null, + postalCode ?? null, + country ?? 'Brasil', + coordinates.latitude, + coordinates.longitude, + openingHours ?? null, + contact ?? null + ] ); return res.status(201).json({ message: 'Loja cadastrada com sucesso.', - store: rows[0] + store: mapStoreResponse(rows[0]) }); } catch (error) { if (error.code === '23503') { @@ -114,6 +268,16 @@ const storesController = { s.description, c.name AS category, s.address, + s.address_number AS "addressNumber", + s.neighborhood, + s.city, + s.state, + s.postal_code AS "postalCode", + s.country, + s.latitude, + s.longitude, + s.opening_hours AS "openingHours", + s.contact s.opening_hours AS "openingHours", s.contact FROM stores s @@ -127,7 +291,7 @@ const storesController = { return res.status(404).json({ message: 'Loja não encontrada.' }); } - return res.status(200).json(rows[0]); + return res.status(200).json(mapStoreResponse(rows[0])); } catch (error) { return res.status(500).json({ message: 'Erro ao buscar loja.', @@ -152,6 +316,14 @@ const storesController = { name, description, address, + addressNumber, + neighborhood, + city, + state, + postalCode, + country, + latitude, + longitude, openingHours, contact } = req.body; @@ -159,6 +331,18 @@ const storesController = { const updates = []; const values = []; + let coordinates = null; + + if (latitude !== undefined || longitude !== undefined) { + coordinates = validateCoordinates(latitude, longitude); + + if (coordinates.error) { + return res.status(400).json({ + message: coordinates.error + }); + } + } + if (ownerUserId !== undefined) { values.push(ownerUserId); updates.push(`owner_user_id = $${values.length}`); @@ -194,6 +378,44 @@ const storesController = { updates.push(`contact = $${values.length}`); } + if (addressNumber !== undefined) { + values.push(addressNumber); + updates.push(`address_number = $${values.length}`); + } + + if (neighborhood !== undefined) { + values.push(neighborhood); + updates.push(`neighborhood = $${values.length}`); + } + + if (city !== undefined) { + values.push(city); + updates.push(`city = $${values.length}`); + } + + if (state !== undefined) { + values.push(state); + updates.push(`state = $${values.length}`); + } + + if (postalCode !== undefined) { + values.push(postalCode); + updates.push(`postal_code = $${values.length}`); + } + + if (country !== undefined) { + values.push(country); + updates.push(`country = $${values.length}`); + } + + if (coordinates) { + values.push(coordinates.latitude); + updates.push(`latitude = $${values.length}`); + + values.push(coordinates.longitude); + updates.push(`longitude = $${values.length}`); + } + if (updates.length === 0) { return res.status(400).json({ message: 'Informe ao menos um campo para atualização.' @@ -214,6 +436,14 @@ const storesController = { name, description, address, + address_number AS "addressNumber", + neighborhood, + city, + state, + postal_code AS "postalCode", + country, + latitude, + longitude, opening_hours AS "openingHours", contact `, @@ -228,7 +458,7 @@ const storesController = { return res.status(200).json({ message: 'Loja atualizada com sucesso.', - store: rows[0] + store: mapStoreResponse(rows[0]) }); } catch (error) { if (error.code === '23503') { diff --git a/src/database/migrations/002_add_location_to_stores.sql b/src/database/migrations/002_add_location_to_stores.sql new file mode 100644 index 0000000..180a1e3 --- /dev/null +++ b/src/database/migrations/002_add_location_to_stores.sql @@ -0,0 +1,54 @@ +ALTER TABLE + stores +ADD + COLUMN address_number VARCHAR(20), +ADD + COLUMN neighborhood VARCHAR(100), +ADD + COLUMN city VARCHAR(100), +ADD + COLUMN state VARCHAR(2), +ADD + COLUMN postal_code VARCHAR(20), +ADD + COLUMN country VARCHAR(80) DEFAULT 'Brasil', +ADD + COLUMN latitude NUMERIC(10, 8), +ADD + COLUMN longitude NUMERIC(11, 8); + +ALTER TABLE + stores +ADD + CONSTRAINT chk_stores_latitude_range CHECK ( + latitude IS NULL + OR ( + latitude >= -90 + AND latitude <= 90 + ) + ); + +ALTER TABLE + stores +ADD + CONSTRAINT chk_stores_longitude_range CHECK ( + longitude IS NULL + OR ( + longitude >= -180 + AND longitude <= 180 + ) + ); + +ALTER TABLE + stores +ADD + CONSTRAINT chk_stores_coordinates_pair CHECK ( + ( + latitude IS NULL + AND longitude IS NULL + ) + OR ( + latitude IS NOT NULL + AND longitude IS NOT NULL + ) + ); \ No newline at end of file From 3df06435b91915573813e998a1f1b24f38b0091c Mon Sep 17 00:00:00 2001 From: JSangaleti Date: Mon, 18 May 2026 18:22:38 -0300 Subject: [PATCH 09/16] =?UTF-8?q?Pequena=20corre=C3=A7=C3=A3o=20no=20retor?= =?UTF-8?q?no=20do=20SELECT?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/controllers/stores.controller.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/controllers/stores.controller.js b/src/controllers/stores.controller.js index c56370c..1028620 100644 --- a/src/controllers/stores.controller.js +++ b/src/controllers/stores.controller.js @@ -278,8 +278,6 @@ const storesController = { s.longitude, s.opening_hours AS "openingHours", s.contact - s.opening_hours AS "openingHours", - s.contact FROM stores s LEFT JOIN categories c ON c.id = s.category_id WHERE s.id = $1 From eaa8554223a58c3373a7fec364acbcd84751721a Mon Sep 17 00:00:00 2001 From: JSangaleti Date: Mon, 18 May 2026 18:28:30 -0300 Subject: [PATCH 10/16] =?UTF-8?q?Adapta=C3=A7=C3=A3o=20Swagger=20para=20os?= =?UTF-8?q?=20novos=20campos=20de=20stores?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/config/swagger.js | 172 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 169 insertions(+), 3 deletions(-) diff --git a/src/config/swagger.js b/src/config/swagger.js index 292683c..1ba7fd7 100644 --- a/src/config/swagger.js +++ b/src/config/swagger.js @@ -113,11 +113,83 @@ const options = { name: { type: 'string', example: 'Burger House' }, description: { type: 'string', example: 'Hamburgueria artesanal' }, category: { type: 'string', example: 'Restaurantes' }, - address: { type: 'string', example: 'Rua Central, 123' }, + + address: { + type: 'string', + example: 'Rua Brasil', + description: 'Rua ou logradouro do comércio.' + }, + addressNumber: { + type: 'string', + example: '123', + description: 'Número do estabelecimento.' + }, + neighborhood: { + type: 'string', + example: 'Centro', + description: 'Bairro do comércio.' + }, + city: { + type: 'string', + example: 'Campo Mourão', + description: 'Cidade do comércio.' + }, + state: { + type: 'string', + example: 'PR', + description: 'UF do comércio.' + }, + postalCode: { + type: 'string', + example: '87300-000', + description: 'CEP do comércio.' + }, + country: { + type: 'string', + example: 'Brasil', + description: 'País do comércio.' + }, + latitude: { + type: 'number', + format: 'double', + minimum: -90, + maximum: 90, + example: -24.0463 + }, + longitude: { + type: 'number', + format: 'double', + minimum: -180, + maximum: 180, + example: -52.378 + }, + formattedAddress: { + type: 'string', + nullable: true, + example: 'Rua Brasil, 123 - Centro - Campo Mourão - PR', + description: 'Endereço formatado gerado pela API para exibição no frontend.' + }, + mapLinks: { + type: 'object', + nullable: true, + description: 'Links prontos para abertura de rota em aplicativos de mapa.', + properties: { + googleMaps: { + type: 'string', + example: 'https://www.google.com/maps/dir/?api=1&destination=-24.0463%2C-52.378&travelmode=driving' + }, + waze: { + type: 'string', + example: 'https://waze.com/ul?ll=-24.0463%2C-52.378&navigate=yes' + } + } + }, + openingHours: { type: 'string', example: 'Seg-Sáb 18:00 às 23:00' }, contact: { type: 'string', example: '(44) 99999-0000' } } }, + StoreCreateRequest: { type: 'object', required: ['ownerUserId', 'categoryId', 'name'], @@ -126,11 +198,58 @@ const options = { categoryId: { type: 'integer', example: 3 }, name: { type: 'string', example: 'Burger House' }, description: { type: 'string', example: 'Hamburgueria artesanal' }, - address: { type: 'string', example: 'Rua Central, 123' }, + + address: { + type: 'string', + example: 'Rua Brasil', + description: 'Rua ou logradouro do comércio.' + }, + addressNumber: { + type: 'string', + example: '123' + }, + neighborhood: { + type: 'string', + example: 'Centro' + }, + city: { + type: 'string', + example: 'Campo Mourão' + }, + state: { + type: 'string', + example: 'PR' + }, + postalCode: { + type: 'string', + example: '87300-000' + }, + country: { + type: 'string', + example: 'Brasil' + }, + latitude: { + type: 'number', + format: 'double', + minimum: -90, + maximum: 90, + example: -24.0463, + description: 'Deve ser informada junto com longitude.' + }, + longitude: { + type: 'number', + format: 'double', + minimum: -180, + maximum: 180, + example: -52.378, + description: 'Deve ser informada junto com latitude.' + }, + openingHours: { type: 'string', example: 'Seg-Sáb 18:00 às 23:00' }, contact: { type: 'string', example: '(44) 99999-0000' } } }, + StoreUpdateRequest: { type: 'object', properties: { @@ -138,11 +257,58 @@ const options = { categoryId: { type: 'integer', example: 3 }, name: { type: 'string', example: 'Burger House' }, description: { type: 'string', example: 'Hamburgueria artesanal' }, - address: { type: 'string', example: 'Rua Central, 123' }, + + address: { + type: 'string', + example: 'Rua Brasil', + description: 'Rua ou logradouro do comércio.' + }, + addressNumber: { + type: 'string', + example: '123' + }, + neighborhood: { + type: 'string', + example: 'Centro' + }, + city: { + type: 'string', + example: 'Campo Mourão' + }, + state: { + type: 'string', + example: 'PR' + }, + postalCode: { + type: 'string', + example: '87300-000' + }, + country: { + type: 'string', + example: 'Brasil' + }, + latitude: { + type: 'number', + format: 'double', + minimum: -90, + maximum: 90, + example: -24.0463, + description: 'Deve ser informada junto com longitude.' + }, + longitude: { + type: 'number', + format: 'double', + minimum: -180, + maximum: 180, + example: -52.378, + description: 'Deve ser informada junto com latitude.' + }, + openingHours: { type: 'string', example: 'Seg-Sáb 18:00 às 23:00' }, contact: { type: 'string', example: '(44) 99999-0000' } } }, + StoreResponse: { type: 'object', properties: { From 3a750ce28e05e09cb3f0eab9c08965bdbdaca9e6 Mon Sep 17 00:00:00 2001 From: JSangaleti Date: Mon, 18 May 2026 18:30:25 -0300 Subject: [PATCH 11/16] =?UTF-8?q?Inser=C3=A7=C3=A3o=20de=20localiza=C3=A7?= =?UTF-8?q?=C3=A3o=20na=20seed=20de=20stores?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/database/seed.sql | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/src/database/seed.sql b/src/database/seed.sql index 24d239e..1bf1967 100644 --- a/src/database/seed.sql +++ b/src/database/seed.sql @@ -23,6 +23,14 @@ INSERT INTO name, description, address, + address_number, + neighborhood, + city, + state, + postal_code, + country, + latitude, + longitude, opening_hours, contact ) @@ -31,7 +39,15 @@ SELECT c.id, 'Loja Estilo', 'Moda casual e acessórios para o dia a dia.', - 'Centro, Campo Mourão - PR', + 'Rua Brasil', + '123', + 'Centro', + 'Campo Mourão', + 'PR', + '87300-000', + 'Brasil', + -24.04630000, + -52.37800000, '08:00 às 18:00', '(44) 99999-9999' FROM @@ -48,6 +64,23 @@ WHERE s.name = 'Loja Estilo' ); +UPDATE + stores +SET + address = 'Rua Brasil', + address_number = '123', + neighborhood = 'Centro', + city = 'Campo Mourão', + state = 'PR', + postal_code = '87300-000', + country = 'Brasil', + latitude = -24.04630000, + longitude = -52.37800000, + opening_hours = '08:00 às 18:00', + contact = '(44) 99999-9999' +WHERE + name = 'Loja Estilo'; + INSERT INTO posts ( store_id, From 0282b5c7c402192ef922ffc32cbdc86950d71a31 Mon Sep 17 00:00:00 2001 From: JSangaleti Date: Mon, 18 May 2026 18:36:55 -0300 Subject: [PATCH 12/16] =?UTF-8?q?Pequena=20altera=C3=A7=C3=A3o=20na=20seed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/database/seed.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/database/seed.sql b/src/database/seed.sql index 1bf1967..b76821b 100644 --- a/src/database/seed.sql +++ b/src/database/seed.sql @@ -10,8 +10,8 @@ INSERT INTO users (name, email, password, user_type) VALUES ( - 'Loja Estilo', - 'loja.estilo@localhub.dev', + 'Mundo da Panela', + 'mundo_da_panela@localhub.dev', '$2b$10$8a0uwSeIyWgs/rO6QanhPODmMrcpsKn5BHy5TapuIgOaRy57WuvzC', 'comercio' ) ON CONFLICT (email) DO NOTHING; From 3813168ea9a4244aac8763a0f955a394c466b122 Mon Sep 17 00:00:00 2001 From: JSangaleti Date: Mon, 18 May 2026 18:42:14 -0300 Subject: [PATCH 13/16] =?UTF-8?q?Pequena=20altera=C3=A7=C3=A3o=20na=20seed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/database/seed.sql | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/database/seed.sql b/src/database/seed.sql index b76821b..f648445 100644 --- a/src/database/seed.sql +++ b/src/database/seed.sql @@ -11,7 +11,7 @@ INSERT INTO VALUES ( 'Mundo da Panela', - 'mundo_da_panela@localhub.dev', + 'mundo.panela@localhub.dev', '$2b$10$8a0uwSeIyWgs/rO6QanhPODmMrcpsKn5BHy5TapuIgOaRy57WuvzC', 'comercio' ) ON CONFLICT (email) DO NOTHING; @@ -37,8 +37,8 @@ INSERT INTO SELECT u.id, c.id, - 'Loja Estilo', - 'Moda casual e acessórios para o dia a dia.', + 'Mundo da Panela', + 'Restaurante de comida caseira, marmitas e pratos feitos.', 'Rua Brasil', '123', 'Centro', @@ -48,25 +48,26 @@ SELECT 'Brasil', -24.04630000, -52.37800000, - '08:00 às 18:00', + '10:30 às 14:30', '(44) 99999-9999' FROM users u - JOIN categories c ON c.name = 'Roupas' + JOIN categories c ON c.name = 'Comida' WHERE - u.email = 'loja.estilo@localhub.dev' + u.email = 'mundo.panela@localhub.dev' AND NOT EXISTS ( SELECT 1 FROM stores s WHERE - s.name = 'Loja Estilo' + s.name = 'Mundo da Panela' ); UPDATE stores SET + description = 'Restaurante de comida caseira, marmitas e pratos feitos.', address = 'Rua Brasil', address_number = '123', neighborhood = 'Centro', @@ -76,10 +77,10 @@ SET country = 'Brasil', latitude = -24.04630000, longitude = -52.37800000, - opening_hours = '08:00 às 18:00', + opening_hours = '10:30 às 14:30', contact = '(44) 99999-9999' WHERE - name = 'Loja Estilo'; + name = 'Mundo da Panela'; INSERT INTO posts ( @@ -92,19 +93,20 @@ INSERT INTO SELECT s.id, c.id, - 'Promoção de Camisetas', - 'Camisetas com 20% de desconto nesta semana.', + 'Prato feito do dia', + 'Arroz, feijão, bife acebolado, batata frita e salada da casa.', '' FROM stores s - JOIN categories c ON c.name = 'Roupas' + JOIN categories c ON c.name = 'Comida' WHERE - s.name = 'Loja Estilo' + s.name = 'Mundo da Panela' AND NOT EXISTS ( SELECT 1 FROM posts p WHERE - p.title = 'Promoção de Camisetas' - ); \ No newline at end of file + p.title = 'Prato feito do dia' + AND p.store_id = s.id + ); From d8356b7d147c442d061939fe80b35f7efc276852 Mon Sep 17 00:00:00 2001 From: igordiogobp Date: Tue, 19 May 2026 19:19:29 -0300 Subject: [PATCH 14/16] adicionando armazenamento de imagens --- package-lock.json | 174 +++++++++++++++++++++++++- package.json | 3 +- src/controllers/uploads.controller.js | 89 +++++++++++++ src/routes/index.js | 2 + src/routes/uploads.routes.js | 16 +++ 5 files changed, 282 insertions(+), 2 deletions(-) create mode 100644 src/controllers/uploads.controller.js create mode 100644 src/routes/uploads.routes.js diff --git a/package-lock.json b/package-lock.json index afcd2aa..36924b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,11 +7,12 @@ "": { "name": "localhub_back-end", "version": "1.0.0", - "license": "ISC", + "license": "MIT", "dependencies": { "cors": "^2.8.6", "dotenv": "^17.4.1", "express": "^5.2.1", + "multer": "^1.4.5-lts.1", "pg": "^8.20.0", "swagger-jsdoc": "^6.2.8", "swagger-ui-express": "^5.0.1" @@ -101,6 +102,11 @@ "node": ">= 8" } }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -167,6 +173,22 @@ "node": ">=8" } }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -244,6 +266,20 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, "node_modules/content-disposition": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", @@ -280,6 +316,11 @@ "node": ">=6.6.0" } }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, "node_modules/cors": { "version": "2.8.6", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", @@ -752,6 +793,11 @@ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, "node_modules/js-yaml": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", @@ -841,11 +887,87 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/multer": { + "version": "1.4.5-lts.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.2.tgz", + "integrity": "sha512-VzGiVigcG9zUAoCNU+xShztrlr1auZOlurXynNvO9GiWD1/mTBbUljOKY+qMeazBqXgRnjzeEgJI/wyjJUHg9A==", + "deprecated": "Multer 1.x is impacted by a number of vulnerabilities, which have been patched in 2.x. You should upgrade to the latest 2.x version.", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/multer/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/multer/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/negotiator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", @@ -1124,6 +1246,11 @@ "node": ">=0.10.0" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -1178,6 +1305,20 @@ "node": ">= 0.10" } }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -1205,6 +1346,11 @@ "node": ">= 18" } }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -1366,6 +1512,22 @@ "node": ">= 0.8" } }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1472,6 +1634,11 @@ "node": ">= 0.6" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -1486,6 +1653,11 @@ "node": ">= 0.8" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "node_modules/validator": { "version": "13.15.35", "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.35.tgz", diff --git a/package.json b/package.json index 8544500..61ca53e 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,8 @@ "express": "^5.2.1", "pg": "^8.20.0", "swagger-jsdoc": "^6.2.8", - "swagger-ui-express": "^5.0.1" + "swagger-ui-express": "^5.0.1", + "multer": "^1.4.5-lts.1" }, "devDependencies": { "nodemon": "^3.1.14" diff --git a/src/controllers/uploads.controller.js b/src/controllers/uploads.controller.js new file mode 100644 index 0000000..2ad6632 --- /dev/null +++ b/src/controllers/uploads.controller.js @@ -0,0 +1,89 @@ +const fs = require('fs'); +const path = require('path'); +const pool = require('../config/db'); + +const ALLOWED_TYPES = new Set(['posts', 'stores', 'users']); + +const parsePositiveInteger = (value) => { + const parsed = Number.parseInt(value, 10); + return Number.isInteger(parsed) && parsed > 0 ? parsed : null; +}; + +const ensureDir = (dirPath) => { + if (!fs.existsSync(dirPath)) { + fs.mkdirSync(dirPath, { recursive: true }); + } +}; + +const saveFileToDisk = async (type, file) => { + const uploadsRoot = path.join(__dirname, '..', '..', 'uploads'); + const destDir = path.join(uploadsRoot, type); + ensureDir(destDir); + + const timestamp = Date.now(); + const random = Math.floor(Math.random() * 1e6); + const ext = path.extname(file.originalname) || ''; + const safeName = `${path.basename(file.originalname, ext).replace(/[^a-zA-Z0-9-_]/g, '-')}`; + const filename = `${safeName}-${timestamp}-${random}${ext}`; + const filepath = path.join(destDir, filename); + + await fs.promises.writeFile(filepath, file.buffer); + + const webPath = `/uploads/${type}/${filename}`; + return webPath; +}; + +const upload = async (req, res) => { + try { + const { type } = req.params; + const idParam = req.params.id; + + if (!ALLOWED_TYPES.has(type)) { + return res.status(400).json({ message: 'Tipo inválido. Use posts, stores ou users.' }); + } + + if (!req.file) { + return res.status(400).json({ message: 'Nenhum arquivo enviado. Use o campo "file" no form-data.' }); + } + + const webPath = await saveFileToDisk(type, req.file); + + // se tiver ID, tenta atualizar o registro correspondente + if (idParam) { + const id = parsePositiveInteger(idParam); + if (!id) { + return res.status(400).json({ message: 'ID inválido.' }); + } + + const table = type === 'posts' ? 'posts' : type === 'stores' ? 'stores' : 'users'; + + try { + const { rows } = await pool.query( + `UPDATE ${table} SET image_url = $1 WHERE id = $2 RETURNING id`, + [webPath, id] + ); + + if (rows.length === 0) { + return res.status(404).json({ message: `${table.slice(0, -1)} não encontrado.`, path: webPath }); + } + + return res.status(200).json({ message: 'Arquivo enviado e registro atualizado.', path: webPath }); + } catch (dbError) { + // caso o ID nao seja encontrado + return res.status(200).json({ + message: 'Arquivo enviado, porém não foi possível atualizar o banco de dados (verifique a coluna image_url).', + path: webPath, + dbError: dbError.message + }); + } + } + + return res.status(201).json({ message: 'Arquivo enviado com sucesso.', path: webPath }); + } catch (error) { + return res.status(500).json({ message: 'Erro ao processar upload.', error: error.message }); + } +}; + +module.exports = { + upload +}; diff --git a/src/routes/index.js b/src/routes/index.js index d4a3e7a..b976925 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -6,6 +6,7 @@ const postsRoutes = require('./posts.routes'); const storesRoutes = require('./stores.routes'); const categoriesRoutes = require('./categories.routes'); const usersRoutes = require('./users.routes'); +const uploadsRoutes = require('./uploads.routes'); const router = Router(); @@ -15,5 +16,6 @@ router.use('/posts', postsRoutes); router.use('/stores', storesRoutes); router.use('/categories', categoriesRoutes); router.use('/users', usersRoutes); +router.use('/uploads', uploadsRoutes); module.exports = router; \ No newline at end of file diff --git a/src/routes/uploads.routes.js b/src/routes/uploads.routes.js new file mode 100644 index 0000000..04a5cac --- /dev/null +++ b/src/routes/uploads.routes.js @@ -0,0 +1,16 @@ +const { Router } = require('express'); +const multer = require('multer'); +const uploadsController = require('../controllers/uploads.controller'); + +const router = Router(); + +// Armazenamento temporario na memoria +const upload = multer({ storage: multer.memoryStorage() }); + +// Upload sem id: POST /api/uploads/:type +router.post('/:type', upload.single('file'), uploadsController.upload); + +// Upload com ID: POST /api/uploads/:type/:id +router.post('/:type/:id', upload.single('file'), uploadsController.upload); + +module.exports = router; From 3ec4aa7ad34bdc7abdea6e1c0406c5670969f8b9 Mon Sep 17 00:00:00 2001 From: igordiogobp Date: Tue, 19 May 2026 19:19:50 -0300 Subject: [PATCH 15/16] adicionando armazenamento de imagens --- src/app.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/app.js b/src/app.js index 42da520..12a90e4 100644 --- a/src/app.js +++ b/src/app.js @@ -1,6 +1,7 @@ const express = require('express'); const cors = require('cors'); const swaggerUi = require('swagger-ui-express'); +const path = require('path'); const routes = require('./routes'); const swaggerSpec = require('./config/swagger'); @@ -18,6 +19,9 @@ app.get('/', (req, res) => { app.use('/docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec)); app.use('/api', routes); +// (ex: /uploads/posts/foto-123.jpg) +app.use('/uploads', express.static(path.join(__dirname, '..', 'uploads'))); + app.use(errorHandler); module.exports = app; \ No newline at end of file From dc971516a94d928e5f3ca96fb7e35dc1c46b5124 Mon Sep 17 00:00:00 2001 From: HirokiVitor Date: Wed, 20 May 2026 13:25:37 -0300 Subject: [PATCH 16/16] Adicionado Login de Admin --- README.md | 11 +++++++++++ src/controllers/auth.controller.js | 15 ++++++++++++++- src/database/seed.sql | 6 ++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3199516..dfcaa32 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,17 @@ Esse comando aplica as migrations e executa o seed inicial no banco. - Health check: - Swagger: +### Conta administrador (seed) + +Após `npm run db:init` ou `npm run db:seed`, o sistema possui um único usuário administrador: + +| Campo | Valor | +|-------|-------| +| E-mail | `admin@admin.com` | +| Senha | `admin123` | + +Não é possível criar outro usuário `admin` pelo cadastro público (`POST /api/auth/register`). + ### 5. Ver logs Para acompanhar os logs do backend: diff --git a/src/controllers/auth.controller.js b/src/controllers/auth.controller.js index 4659a57..828c2cb 100644 --- a/src/controllers/auth.controller.js +++ b/src/controllers/auth.controller.js @@ -2,6 +2,7 @@ const bcrypt = require('bcryptjs'); const pool = require('../config/db'); const ALLOWED_USER_TYPES = new Set(['cliente', 'comercio', 'admin']); +const ADMIN_EMAIL = 'admin@admin.com'; const MIN_PASSWORD_LENGTH = 8; const MAX_PASSWORD_LENGTH = 42; @@ -45,9 +46,21 @@ const authController = { const normalizedEmail = email.trim().toLowerCase(); const normalizedUserType = userType ? userType.trim().toLowerCase() : 'cliente'; + if (normalizedEmail === ADMIN_EMAIL) { + return res.status(403).json({ + message: 'Este e-mail é reservado ao administrador do sistema.' + }); + } + + if (normalizedUserType === 'admin') { + return res.status(403).json({ + message: 'Não é permitido cadastrar usuários administradores.' + }); + } + if (!ALLOWED_USER_TYPES.has(normalizedUserType)) { return res.status(400).json({ - message: 'userType inválido. Valores permitidos: cliente, comercio, admin.' + message: 'userType inválido. Valores permitidos: cliente, comercio.' }); } diff --git a/src/database/seed.sql b/src/database/seed.sql index f648445..ae48afc 100644 --- a/src/database/seed.sql +++ b/src/database/seed.sql @@ -9,6 +9,12 @@ VALUES INSERT INTO users (name, email, password, user_type) VALUES + ( + 'Administrador', + 'admin@admin.com', + '$2b$10$7L83xfQ.WjyKYvlkITfP4O6vFiPSFMNGWN.fI94dHIF01nfqXvH6S', + 'admin' + ), ( 'Mundo da Panela', 'mundo.panela@localhub.dev',