Sync
Some checks failed
Deploy to GitHub Pages / Deploy to GitHub Pages (push) Has been cancelled

This commit is contained in:
Alois 2026-04-02 22:34:56 +02:00
commit 0a49531a71
34 changed files with 6941 additions and 2 deletions

7
src/content.config.ts Normal file
View file

@ -0,0 +1,7 @@
import { defineCollection } from "astro:content";
import { docsLoader } from "@astrojs/starlight/loaders";
import { docsSchema } from "@astrojs/starlight/schema";
export const collections = {
docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
};

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,839 @@
---
excalidraw-plugin: parsed
tags: [excalidraw]
---
==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'
# Excalidraw Data
## Text Elements
Client A ^LMuVNYHF
Client B ^NPb8UZQY
wss://tensamin.methanium.net/ws/call ^f47esqM4
Indetification
-> User ID
Private KeyHash
Call ID ^ohCVLlFq
Indetification
-> User ID
Private KeyHash
Call ID ^SgJYIBws
wss://tensamin.methanium.net/ws/call ^tCV2mv03
Call Connection
-> Call ID (UUID)
-> Participants
-> user ID
caller number
-> ... ^d2vACfi1
Omikron ^lwoijTA4
<callerNumber>, audio ^aqRYkbrQ
######## Asks you to join a call ^hdXwtCu0
Join
-----,
-----,
----- & 23 others ^VGBB7y68
+27 ^m3SsmctG
User A ^0Cw6ADVe
User B ^YLQEYtPW
Community ^gITeBYi7
Omikron ^yLMMguyE
Iota ^OUKiPhBU
Iota ^oJbyRqwX
```community
ip_address
``` ^Ve4SagEL
uuid B
^1hrUXkzj
Auth server ^GuVgOxGa
public Key UUID B ^gujGFvaS
Shared Secret ENC-B ^1Mkl04Ht
User A ^ThBjRkU3
User B ^tUF7uR5F
Community ^E1t6gOmw
Omikron ^cjgM1Mas
Iota ^BYHiT8Uu
Iota ^DjDZJMdW
```community
ip_address
shared_secret ENC-B
``` ^X3Wz3GNM
uuid B
^mw6TNqMf
Auth server ^OY9uqpE7
public Key UUID B ^wTpXHWc1
Shared Secret ENC-B ^Yp1fa1Vu
User A ^ZIuVmUNA
User B ^86c0bCpw
User C ^a7FoYZnr
Call
-> Active User A
-> Invited User B
->...
-> Active User C
-> ^bi67IiQ5
Chaticon ^IoxQS5Ph
Callicon ^9g4bn1go
Java Websocket
& Audio Tunnel ^kZgKlKPx
Omikron ^pD7PRyi1
{
"type": "identification",
...
} ^w4kwmm4v
{
"type": "new_call",
...
} ^32CxydGu
{
"type": "end_call",
...
} ^LfgsNGqr
{
"type": "identification",
...
} ^zPVcr55F
Identification ^HVl6U1XR
UUID ^M4e6cbm0
Decrypted Challenge ^BmNWjp9y
Encrypted Challenge ^adfJsar7
Community ^DkUvjZZJ
Client ^hWkmFSq2
Type: identification ^oT3u3S2d
Type: challenge ^JKc4QxHN
Type: challenge_response ^sG4DAcGH
Community About ^gaxe6Pwu
Type: identification_response ^lluQX9mR
Genral ^LcbOrGox
Users ^Rz1xnd9z
Communities ^2p2z9aJj
Settings ^pgTOEirk
About ^kZcJKxcW
Shutdown ^zwsEYx7B
LOG ^qgeMYgnP
expand ^Ofm9E0uN
Status ^rLF8WfgJ
Genral ^7RJ48PuQ
Users ^0ePWEFVI
Communities ^g47xgm9V
Settings ^JmvZnOtG
About ^D6e4ujFg
Shutdown ^BgN9Yw19
Add user ^q3ORx85s
User 1 ^NeRHPDxz
User 2 ^ZDiJWJLV
Genral ^FiWAWn4J
Users ^WikIiMpF
Communities ^i4BC46R1
Settings ^6wCFs3YN
About ^MoD0DXnq
Shutdown ^ghwPTKuY
Add user ^ykvOqzZj
Community 1 ^9Jv2pfbD
Community 2 ^YyuC5W5h
Genral ^vxLMu7iZ
Users ^FPYPJIxm
Communities ^sdLrV2IL
Settings ^EbUPLSv2
About ^wydii44N
Shutdown ^EPnJcv78
1984 ^kqq7cKY4
Port (you access this Ui/ your
Communites on this port) ^uV6XUncL
Choose Theme
Current: Bubblegum ^0PQqIy0N
Theme ^SNKAoL0v
en_int ^aU6SnVdi
Language ^8iDdRSPp
Upload ^ItY3rZTf
Genral ^98hlyui3
Users ^6fYVL1p1
Communities ^5iyWw2J3
Settings ^lNrlfQ1f
About ^sdoo07Pu
Shutdown ^eBp7Bo7G
TOS:
EULA:
PP: ^klg8NBMz
Genral ^aYMfEdRJ
Users ^ySATTI8Q
Communities ^fwcPzyJ3
Settings ^AvEynWd1
About ^BXehpQJZ
Shutdown ^wxX8YDrB
Shutdown: ()
Disconnect form Omikron: ()
Restart: ()
UPDATE: () ^fC4MMcpG
%%
## Drawing
```compressed-json
N4KAkARALgngDgUwgLgAQQQDwMYEMA2AlgCYBOuA7hADTgQBuCpAzoQPYB2KqATLZMzYBXUtiRoIACyhQ4zZAHoFAc0JRJQgEYA6bGwC2CgF7N6hbEcK4OCtptbErHALRY8RMpWdx8Q1TdIEfARcZgRmBShcZQUebQBGAFZtAAYaOiCEfQQOKGZuAG1wMFAwMogSbggADQB9ADEAMwBRADkAcQBhdsIAKQBJACFsAFUALQBOACt6IwAOdLLIWEQq
oKI5JH5yzG5neIAWRIB2BJPD+IBmCcueHmO+YsgYbmPEuImANnvEz7njua/CbHbaQCgkdTcOZxY5fFITO4TOZzCYpRJzUFSBCEZTSKEwuEInhIlFojFPCDWZTBbgpTHMKCkNgAawQnTY+DYpCqAGJ4gh+fzFuVNLhsMzlEyhBxiOzOdyJDzGsqVcLII1CPh8ABlWA0iSCDxqiAMpmsgDqEMk3EeSxNjJZCF1MH16ENlUxUtxHHC+TQdIpbDgYrUL
zQ8RSAbtkuEcH6xD9qAKAF1MY1yNl49wOEItZjCDKsFUxkJjVKZT7mInSnaVuJeE8AL70hAIYjcCMpeJzT5vRIHTGMFjsLhoRIIwdMVicVqcMQduaXA4Hf4pW3lQjMAAimSgbe4jQIYUxmmEMuawWyuUTRSWJSe5TrVT3mCgao37Yk+ku2uY+mwUDtBAD6Nk8qYUkIcDELge6fqg8RvJc/zHNcSEpJ8mJEBwzLZrm+CYWw4r7mgh74GExTNsUNaQ
JUX4/n+AFAZiT4SC+b6YrsaD7AcPCfAkyLdsuKTXDwi6YmGqAAnE6Kwp8SG9j2/yYuCxCQmglzJEk3yJJikjYrib5oDwA4UlSrpRuUpqOnKXK8oKApbBSorijG0qyhytmKiqqpppqOp6vWJoch6FJWRaVo2vSDqss6rpBUanrCN6vq0piQYhrAHaRpirlxgmhTgXa6a4JmcE5nmFIFsQRYSCWABqZZnsQlaJuV+Gha2cE8FcgIonJFmQEO06jqgn
wDQwU4jrOHDzmgxzwsilwpPN+bbruxGoKRx5OU1F5ZDkeQFZikHQbBHaIchqFzOhmEFjhaBtQRRFwVtCDMVghnoAA1PcZaUAAKh9VQ/ccxqNJwUDaoQRj1jw43g7k9QlZqEmXO9r4AIJEMoI0QKQOJ4pOpBQOYBBYziuP6CQxA0piei5LgBZMFmEh1E0bRdD0AzDOM0yzAsaX4/4BCA6+wO/ZiuBCFAbAAErhND9aMkIb0UlhCAABL6Xi4baDwFH
bNRFRwRUW7mu0vRfAAiogADSIyfIkpATAAjpoPCEAAssaLHoOshCbManGoPsvwpNoRznL2DwHKiEzia8okR72BzxJ8CLxBMy5oxSKlqfBlzxNoALR8SGm3KnIIUnpBOfVcRcl8cDw3IkFcIZLHDUvW41hWyHkKugfIOUKJ5ihK5bufKvLecqYN+bFgXuu2UVmgglqqdaRkr46C9VEvjV+JILWpYGwbYKGWXjbl8Y3oV5TFaVuEVXaVU1egYz0AfF
YpWg1HLPAsMmwtg2kiBCmdjhySJsNbgK4q52iGlNOc9Zrp/BQvEO4q0dzBDOiRI8qs7SnjcntK8h00ApmOlBGCG0EKt2QqnOGvZbrYSfu1O0nJnoHjwQbKilUTb8maMQRIQh5gwVaFuCYrQUhsAAAqaE6FMXYzEAFrC1AHMIQc9hp0uHxFCJwvjvESBGDSCc5pJwOCnNOXxRLjmUhFcMhdi49ibmXVuxl27V21nXBxjdm7lzcXA8oZlu7b1ZDZAe
EAh72WNM5ceTUwnTxnnPLUu8DTBWXqFaKa87G8BCU6AKe80kH2SlWE+dp0rn0yuGbKFJr75TIXfdUGYEAs1QI9SqhZg4QDGFQRKblj6/wfNAZRRkgEdQ2p8Xs/ZjI3CgSOG0SJZkziQR2ESXxJkmRfmtbBG1Xonl2peA6t8KGnWoRdJulxjgRk+PEJh91Wl4SeqyF6XCyiUTKEbWi6BzTSMoCkeAtt+g8HaBrKYuBWjmigBMZocAcJKNWBIf2gcO
KaPmqcR25x64HG0YwikEkHhzGTscVO1zEjjmBBhXO2T66ONLi3NuATIA1wMishuTjfGuMrh3LupTLKZPiYqeyI8nJj1cjKflg8Z6NCSf5F0i9Cm5PXvndcAhMkpLdPKikXoj4/1QONcpF8qlXylHlI5FIH7NLKg89p1VOljEUZqpq/TUB/yGfChsSw3mWU6viS5XZLiF0WSNHg7xA3TVmrwZay1Y7dXJJsrBCAcGbTwXsohBzrxHQgpQxNNCkLnN
9dc25LDHk7JeWAT1HyTaiCGMcVoBw6rHH0L0IQvwECfGUNqXo7RHK1mGegQIAEgkaK4gcLsJiQ6LgmMneEFydKUo3twYEs67RMp1qgWOS7Amd3Mrk8VETBXdpFCKieu7GTWGYMGQIuRpVqviiFO0vdFWbxyRk1eN7969OKYmG5p8MoSU7DlY1N8M1FSaS0tpL8OnFheL07+JSBl3ldfWS4oz73erHH8eE7wc7wMmpwc6GzygIKWTNesEzlqHGud+
uN61nlkXwSKfZ+101kIfH/GiJtpHmhdgAGU0NUZk/0Uj4DRFoCgQgpikH0MQb2oJHy9spKQJkVAQJgWOVQuCObrpw1bto7D5QsJ3PA/pwiTzOF0e4e83hVQRjYAvNgFImhCDVCML0Ro35GjVFlmwKAmhzQ+3k/2qIW6D2QGDvsJIY7nDXVOOY6dbxbHzrQOYily7PELhS5u7l/od39zssPELEAYmisnp5dAp6ODntwJe9iZr575NSQlF9jpH2RSa
zFer6rGt2i1U6qj5R9WVPgtU6MgG6lJgaRAc1YGrUQZtVUXAaQYPNR1S632yGPXAI05nRccw06Z0Da8Ddg1cMcDDbDWEhw1yt0wTRsz20CGMZITeVjD52NVH+nMVozJ6jMAOM0F2cBPZzBdp7OqTQrYAHltQ8HfP/N1CmlPATvKBJYE2TrqfOrQrsEx3hEr05AAzRa1YmZLeZ15hsrMSAoJIbUABNA4VsxjMmcPgfQ/R4jxF6J8TAMArbalhRSX2
eMEADuC0O8dqdIsTCLrFm48W5352S7pNL4Yexcu3W1vuU8BX5eiUeuJuXWLkAqxeg616Ou3vSfezJLWt6a7fRq7rSVtVwfgmlM+BqhtGtjEB+paZQOWufhuSDEhcAw6W061bvb1vk7GXBQuEDY43HjhSIjI1UShuWeGZcHOLldj6zRLZCbSf3YY6mpjpCkwvbvHDwKbFYfGyqNxz2Qg6qtFpxreoSOPWqczScjTF01xrlzcqiAhOHozeMxw3BZOy
0U5fibZvrf2+d/8/D+vyKuKLgy88TR4dZczoS/nG4xcjtYlrjaAjkBB3Zc17uyJDk9cuWPYbsrxvKvVfN7KgpXXeWr1t8+tbq+hbu+g6ofL1u7r+pfABj7mNuQmagHkTrNm/JSJcF/Mtq7kZgIGhrwJ8COjxDcAXhNMOHhmgBMCnjhiQadlnqgEhLxLCESkQZuPGomrsjtOXk9sBuUOjtmoPnDLcCJIWhPkHgTiTrRqXssEDBIJ0EQAdKgBjH9BQ
KLJ9BADIYQHIQoWmBDFDDDDaPDBDEjFTPgKjOjFAOTDjFUMEI0DVpQSTO4OYZTNTLTBSPTFEEzKQC0hANTnTgzkzizmzhzlzjznzgLmUkLAWCLFIegGoRocaFLDLPLKwLoWgMrPRgTkzFrBfrrPrLHpZgvlUMcBDq+IMG3j8ggMcFbBMO0GMD5hQFMEICMGvoFIFoOpvqgP2EQRJM4ChFOnLmfnnE+krh4lkfBGrqZGLrfkAdZK/nurrqPM/gbtr
m/meqbler5MkiAY7n/s1tkqPr3A7r/pAD1jqkQQNn+sNuULUqaiBiVBakgcHnNqHgcOgZHoMmtihl6htDxH6hpDwPjsQdAmQeNGnmduloYugv6hQRuEXqwcmuweeGmpXreEsGxohs+EDLJm9hIK0LInMOMFbLTt3rkSia9o3givoBDiMHVL0JgIMDAEYPUJgJrJgCMJoMQFuI0H5piWiaHopmwMpsjr3naDwacljnDH8f8KPuPvciIWPmIXdggBZ
vePkdibifiYSXCnXhiRSMHP2DvhAHitoK3KiNpEfk+ifvLqliMcZOrsEnfjMQ/kKgQvrm5Ceu/qsTYffHVt/g1netseFIloAf6Xkj6Z1n6Ucc7hAT+hUucd7pBL7uNv7rcdNrKa/J0rgIkC8TqlgSaDgeYrcCkEJP8WnllMWSdqCUZMtIXEcI7EwTCSXmkYVo9oclwZACKQPmKcJH8ROGrHdPcaIdPkmnRqYVUDEbkKgIMIocoaObIeOZOVobkDo
bDPoYjMjMYdwP8WxA4ZYQgNYcaEOHYWTNjI4cQDTAVq4YzD6B4SbIUcUaUbgOUZUdUbUfUY0YLDiBEfgNOdIbOVABOXEdLHLArMkagKkUwprCrvBHrEqRWlUJxjxnxgJkJiJpoGJhJlJjJoLvJlVojm0c4HQdoFnLcLtuiIkMJEcFLuHPNMCESoWUiKiDaQrk+tYkaWNMiGiJYt8PqSup9MZKcG8BznJEcF2PCESraTyiqqvPfvuk/rEq6TMeVh/
mbusTKnFKAVMQGUqrkgceGXjJGScZATGdATUqNtcffIgcIawg8SgbgJ8Fma7lHm6jkcSdgV8QJfNLHGWVQR2FipniRh2IYpcoJWfswbdjPhIU2RwS2SxneKiULhvqSZ8pNgcMcOECDs8SpqjmprwZ2UuPNP8dKTmewqZuFY2XAGwAWEiQ+MiUsANGUCkA+A0mADVWUCxWHOxYYunFxZic4HxafoJUuGRRGMCAcI1UKfpqEFAOyPoFTDIG2NIhVVe
pZVFFVlAIMFVAWMoP2RgDKOtTKJtdwC6pkCQp4VWoMDWnWg2k2i2m2h2l2u+JNoREIImM4OHJdkkPCHgTcMuOcLJhAMoLgHANwJ8B8SqqtRjHydTiEIHlZZADkMQBDUpnpLgCbDhfycaEEKeBQA2TBZTugI0ClWlZ7M8ZqeiWLHhYNdoHJEkNLrcOigIZFsGuHKRRpCcESlnIYv8QMTaBGIRYfsMcyqYuJZMcGdJXMcKgsfJUsdAO6VVspbVhsaG
ZbsaA+rsdpZsYcXpeAQZdGZ7v+iZbAWZY0smTDfmCHugLZQ1BHtmZPq5XBHgWnHMKnCcAdnNF5cNBWaMVnOnNcCFfWeIY2YQgiRXkbRAO2ZjmhPwd2VKX2VTlWIoJEDkMwMjBwNoNkOoNYIQEIPoNoD6FAAoBQBEO4PgMaMVQ2SORIIADwbgACPsAA6HAhd8gSge4FWKdadCa9dkgmd2dudCaBdRdBAJdnoAMURXh8dzdSdbd6dXdHAWdOded/dC
gxdYM2hisehC5UAhhKMG5ph25EgVhnpx2xMpM+Ae96AVMp5zhdoF57hnh8FvG/GgmwmQiqF4mkm0mxoXIH5HAkRYsVd1djdCdLdydVMqd093d89fdhdS9g9AFCRwFSspAKs4FmRgtUFzl5aeNEAH2X2P2f2AOQOIOYOjQkO0OTR82kN4uzgMyuKewvxvR/Ndo3NY440PFNo6IwtuqOW0tjpBWRWL+0tilHpX+alWxklOxgZexqqGtulxxrupxHug
2+tI2htrZk2FlMpsNFQ5tlIAsYBsG1Ybxvazlc+ceHY1N6IayRBJZSWo+IJNBVwck/UK4/xoV2yAdKawdnBMVJJNePJZW2pfjSVbAkgnQdU3G+A9QLsRJZa41bZWaopkdVwvEyIQhmjxaHjFI5VlVz2d4LVYAdVBTjVsm+TZFPVwacwY1WVask101s1sEC1lV21DIq1e1jgnc218NbTB18Gdox1B0nhNmdmDmTmLmbmlwHmXmPmXJgy4M2Az1tIr
FEYi4CeKIvEvwR2kAANQN4Y8QoN9o4NkNyNptFI8NiN/JxzFDuFpz+AWNONxJsFEgITYTETUT5DrEgTOwKKlwyc/wZ+XR7wk6B+lp5QzDvAvNfRyuIxXwnDPcfKDpMl8xclYqClstn+KlOlVuwZABUjwBSt6l5QcjX6hletFxWzplajU2JzyB6ZEw9lrUttuZ1CDCC0/YDKAJcy4YTcfl4aK4WGa46cN27jCpnjxAxC0ViZfeGOXLnZ4JKIaTRV8
ppVFd6A/QhYJMGoeAJMnAqAurqA9dzgAAfKgCMGEKQKgP0FuPXXq9IvjPQFQqgLbAgDABrKEJINa7q50IPRa1uLq1OaPWq9VBq6TNqxwHq+G7qwa8a6a0wD6x66gLa4QPa3uI686668wO62G56965a36xvUuevWagYWuSYYLh9GfWPruYfcQYeafceVUBfWecaDfVeZ4Tg99r9v9oDsDqDuDlDuHoGOET/V+QG+q4QJqzBCOBG+G1Gya2a3G1mwm
3aw606y626/G161qD63m6ZIBYkWvSkUg42erKg6ukXBg/Ph+JYSMFMKwPENIgcBjH4L0GwNzjDIQP0MwL0O8xbZQ20f6lfgaXQ63EaddEiE3CNbxEQWCyC4ypBbxKPjflw/aTw4ixLciyVuEkI3LWsQrapXKprarZI+rfi2I1rZ+h2CS0o2S/9RS37ggSbdtWmfNpofoxgYYwhr7CY56nbT5cSKiP6i7anidgulCUfR7TQUSkSq4sYpVP7SK/CWK
4ibk745x/JglUEybNqMoL0LTkMIXTEyjmUGjgkx2ZHQtPmQq4y2XZk3aNk8xlXnk69oUw1XeE1fk90Zs2AL1d8FU8Z5hLUwYPU/NYtZ9DmS08TN0x08tac7tRtdF+kxkoc0jdDZ0zKOc1DSjVc+jZiJjfyfc6Y3kVexINp7p/p/kKTR8+TTqR2NLqkIXMGpFq4qBwtBB0SlB2aTzeHJCwLaujC+MVlshxpVrqVrMVEki8Vm6SsTh9WxqIraI4Rzb
mrfbjI1ixGdrfI1R7GTAfGXARNlS0xzo7gPOWx06uFzgVouiEkIFa7fBP15QRJ/5UljxP6hMhckK8XrZ2Xl4xK/AcKaZxHVphZzimwrHYl2wkq0ORFfXhIIGwmuOyGyOLOzG+a5a/G4m8mwgKm2uxmxuzm1uP63/aq2OxO6G8j/O2j4uxjyu2m+u4u5u/gD6yvYuQexGhvVveuepLvfW/vVW/uUwLWxW421feUC28zCbPgDe3ew+0+zp6+5gO+5+
9+++cLCO0TxAHD8G1q0jy4NGxT1a1T8uym6u+m5m3qwz0z5LHuwg9wGBb2T6Ke3XNBQ81g1kJSdSbSfSYycyayeyZyT+wjjlzV2OA4lcJhpGGSOgvqV0bCI4v6vCLHKSKSoB2C5nJOhhj2EuEhOYoYlC2g8Gg3IYvCI49dGuDQ3aEh3C1JQi+Lc6ZLSi4I2i/LUVN6Qt7pUR1pSt6R5rUS5R7rdR3GSapSxozmcx6Hp0PS4dUY05fs2EBtEuBCbC
LHLd91O7Ygk93d0uN1PCFnB97CcOYp+Kw5y1XFep58yqWVmEzwPoPQMJIZ3E2HQD1y3JMGgCE3L2EQYVdZ5D2wXZ6Fyp2UHyYudim1VV7PsHIJU1romfLFE7VrLlNDE/VYvtolL5lw/OYACbPgEC4zU1ADTULs0yiCRd4uW1XpuUH6a5BPCt5NaveUfJVEaiqFV8g9TmYLMuIzNJcKiDIpO0E8WKXfoMm2Y2g4gi4bbNpmjg9RRqG2WLsQCi7EDw
evKZLhc1S4xc+m6XI5goN/bXM+mtzfLgHVxoX9oAV/G/nf0q4BNqudoYOLcGSDQgEIfwUSI7FL6AcuibiKmuiEBCGJoQqIeaKPjBbb8+asHc/GgweCwtuGo3XhrJUm6otpu6LPDpixVpLdiOXfNvmt3I4u5iW/fbbgbV26h0Duig6yumQJ7W1MCjLOfnBFhCLgsURwNfqQVGixpCM5ZGgtcgmR6Jdse/cuof2U5qNw6MrczgIXL76YweY9JuonVb
qgN26GdWej3QXrQNl6GTBTrWFHo1166gDCekMILAjDO6EDXuvnUmGwNh6ShUeosMGEgMVh4DMYZA02ED0tQzPSGKzzhjs8S2O9MtpjB57oAD6/PY+vYSeEQBhe55CGJeXF5rAKSVJGknSQZJMkNYLJNkhyRmZhFv6v9FQjXX2HAMp6CaGenPQ2GL0phu7eBkkUQbIN7eEFEYuex0HFd0AxAHgPQAxidANQ8QAPhpy+b2JIsAIZIMC36K7E7gTg00
r1zrjLhAhKHYIWhzr4YcpuJuGbiIwI7t9YhnfYbtEI/TJC++ZSRRmkJUYZDh+jHbITRCO7NBJ+aoplhpirL0J5o1jETuGBsTCcqCntBCCOkuTgdmhX3SAEHSU4h12hT/eCHwVzzdgxOY+MHoq0HK/9Hwo9C3uyA4A+gAIOvI1qgAt65sAAFCMBGCWsAAlLOx+RvCA41gPIPGzDHPVY2lPadsXVjY5h9AmgJgOmONbaBSxhPFQgGM4DBiyeuvcMfj
1QDRjYxW4BMbWKTF2EUx14YsagEzGo8DeOYwenmOzqFjSAXY0sdoEuEFtKytwowqW1mGPCKYO5PckTEF4fCZYQNOmD8NvrUt+sQ7WEaOW9aBjqxoY41hGN9aNj4xiY1auYA7FpjF2GY/XvGz1a5jzW+Y4caOLLFW8sRrPO3qDwd6QVCRLvXQfgAoAVUpg/0DGCTSwrr5z+EAMLBck6J7BVwDDXwWC2hD1d0EZ+NhkZEA6V8gh4SEIRNwEajdsOkQ
lvvNzFGJCO+zFEjgkKKSyjwwW3YykqKH70cbij8bUWPwtpd58hDLWUkUIXBpxRKlyM/DY1oJ2NahG/FCKv3eBiQ5OLBFoQ9iirH8TO/eQHkPmsF4ErOspGzjML9Hq8IcVMZkEyC4A7Dvy6AAyYQCMl4Z821wlcpvTuFc8HhZhD4S8OXEn0K2a45tpuNbbbjIAX9VXmZIgAWSrJJkzEUBWxG28j2KDf8c70K7KliRlIF2LLFpzMhNApAK2DSJglhY
CUeBDSOhCWgoQsUhZaPnsGlxxBtIK4E0ntmJCddsJfEOLJhPg44SJiQ3UWjX3G7ocwhjfCIc3y9LkSf84o//MtylGrc6JUZeUVAUNQ7cWJkrNiXcQ4lHcNYWomQbxy5bdg7gckJSKaMBIuiKh1BDfuQWMgpBBB7LNxp910l2jmyyk7Koky0zGQjgsILSVox0nKsnJVQAADzPjWgQ4pgIa2oCoApYjgNgOWI+lfSfppAP6QDKEBAyJxtk6cdvUclz
jnJC43nkuNNEriUZZWIMF5IZhbjtq/kz8oFM+kDjSA30gsb9P+mAz2AcDcKd+Kil4jHeHYWKZg10FjBOgZANgBjAxhTADgtQW2GwA6Cn1mABJDgKxx7Tw4WiYuPCoJCLjjh0QqcHiG4mBBjpfU2gC5JVLuBO1zEtU+CL2EIqXJLB6caEH8AmR58z2es4EOtMsTGyew+pXCbyPwn8jD09fTDgkm8iiiBplEiUdRPiEUSxpOqPVAqKYmXE6Os08yqq
JWnaNHiFtTCk7j6QrZp+SGWfhdzGjoRrkEHFfihB5b1gOc3UMiorP1JnT9+EVe0UfyRIqTpWLo2hHmiuSf8vR3/H0aWhZkJTJAxAaoBQCmpCBFsUErUiYLpEhxjI/YQiiSnRBvcJkW0u0HiiuDFwkgacccL7R4jsswWY0JkYw3KBYTaCBKN4HcDIoGjhJzUwblX2mKoda+zswUQ6UlQezfSXsoaXEJGnd9ZG+lV3IHMmle5ppCZP7uHPYmRzOJlI
CHMtPO4bQDR66PAiJKNG0F3ED3dfuGiuT3BgQMaG0RdMio/drpUrHKrmhQj5o65zCbUS9Kh6NkYeg8HkMQpIU8h5CzAZkMwFQAwBhAoFNgKgCmCLUAZqADEd1hHrq9SFpC8hZQuoW0KZYDCphbgBYXbCi2LPECrcD1gtxFZhiAgmfgRj2SZx9wpGRW1cnoz3Jq47GRuNxk+T8Zu4tXioU4UkLuFVCmhUIDoUCKCwzC1hYEmt4RTD2uI38fiLQYAS
4pjzdAHVHaCDBzqMAP4JlL7mhY9gg87riPL+aWjR8eKd4ISkrhoh0IokD0V4KOD1cTSjXTkR2G7AJAEIu2R2OYmiwg9MsGuYbmLQ6kCiupwQy+Ri1GkKphpwZaUWAQo4i0/JQcqaekJmmfzja380fkd2kQALChF3einDHQjS5busWbOQuCWhkp3go+IuQpO+4OjvGYc+JqpM6GXQsFT06Ya9KRlVAX2BYA1s4D2XOBqAuy/ZYcpcD7LnAqAAAGS8
BLgqAbzHpBYAgyJA2yjgEcr2UnKzlBy15ecquV/Fbl6gKcLDJArGQqay0f4FrIeCdV4ZnPWgtz0xmVs0ZthdRXCs8laK3COi7UQTOHaBTnlXy95WcrxX7LLl1yv5fcoq5hT92IFH8b0L/EEjmZl7LEugF6CaAJgIwNkNgBzDNA9I0ibRMoCtgHBuM1QKYAH0lncppZZGYuLcDuAaQvgzccJYEu6gHBtA0IAvjnixSycmGuxdEHrGRAVM3gOOPOey
w3noJJ0KIFuNCHQj9hC41Q6/C1KPmhJ2pj+QiYsTKWJIKlD8m+RI0lE1LKldS+ia1MaWvzlGIc1RqxK/nzSf5R3DKTxKn5qc3UMeOKatPgiGJ7pyIQVttM5YFxxJZouoSiAa7UVEFGy2ZWXIAHxTxZvcw+glJSCdAKAnwDGFuDqhIAQIsmVEklU6BQBWgvQHgMoEZCmtmQssIQFbFqBpwXYtsYgJBL8ZC40aApcQbFUSomwRg2oRIPUHaBWwUgLg
doKwHoCYBbY7QZkCkH0DOBrQ3JSdZQ0yr+c0FiTYEFpg8HYLDMDckqvgqJEMqIAVamtXWobV+Lq2YWLSDomzjLhuoXVWSZPMCV7YlV+KcuBznyk6z5oasjCWbN4oHyClbUk+cUrPmlL8J5SqIT6uG44saJfsmUU6hflGVmlzEj+ftxH6Mtf5uAWWD0r4kXc4Y0uWmtcFu6PT01xGGBe117DfBroBa/BaK2LVOillVc65COnopYpb121PBb6MkLq8
Ue8hR5egDk1iz74q9IFXZI56zi9JyMiwhIDEC5AmArwjGTpvPpOFvh2iv4U8uZWsrOg7KoQJyoQDcq20fKgVUKpV6EzR6SmmmRSpxHHsMiMUi9jwl0EYwXYKQDUA+xgDMh6AUwDgJSTmDKBPYpAeIFbD0ZlqqgIqkXgEq4gAgG4qITgcSELKMFGaq/YuLxGOl54vg6snWRU21XQgZIcsg1fBo7DEglV5BDSOauyVWqeRhSh1U6TQ1ESMNrqrDe6p
iG3yvV4jdrMNoI0BzGJJG4NcqNDXtLw1nS6OZSG1DLTHKScmdZ8Q0zZwhKaIPaRuQjCjKjIEJSqdOl43SbkFcy37tXljXlqG8SVWnNxitjNBacUATjIZ2bVzqqgUwZLYQHqD6BGgUwRoJ0BgDxBCAUwCgKyHiBGAeA1QBvCesRxNrbtugv7NximCaAUg9AMYO0BgDNB6AdUFILTlIC+BmAEwe1BOuwqnrBS1Tf7kJpzRXrhIy0DPPbzvXaSf+Tc+
lWSXQBPaXtb2j7UYOgBZS9gqCJVWXzkjS5yM/qRmoJOLiJ5ip+U2wdBvDgNdGp1pRDXaW60obHVnU/rW7J8hDbaJVSu+d6sm2+rCNM2t+S0rI1JkOllGo7v9Fo1aN+JZBNZF8GuhgLvKRkDhmxv2nhpiQifOGICAu1wlFJKC8uTdLM40URN7wQDl/3Z2NyD+myiQHJpO5sLdhsm+dmnpU1iLlyUKzTTJu024w9Ne4bkG5PeFwqvhOMtFRZvQDBbQ
thAcLZFui2xb4tiW5LZ/T0WBTU9Xmm3vYt800rnFdKwLQlLcztBZY8QIYC7HoDMAhA0ofoM0FliJBzQFAXoNBh7lpaRcQWUVcHxDgQkfmhicgtYMdqopIs3YSJcdL+DKqruDBKrVqtEi1a/m+qpIIav/HNbTVbWhhJau7BdbkNfI0+XaJdIN8XV7st1Ubs1y4bfZns/2c/Mt1BryWIahZeowjnLabKb5U7gnLu0blk5G0ccI7DGhIQPRokhCFmse
4wKJdRKXbKOjklhU+NrQx0T4yK6paquFa59coH6CAxBgtOQgKDGR2zrNOo5dtZ2u7WkBe1/awdcOtHXjqsDvJJHcji+0CGJA9AfABMCh29A5gGMeIF3NtgTBtQ1QRoJcBGCtBjgVtUkojvRp8HVOqO5oOjsx3Y7cd+OwncTtJ3k6EdVOuQz3lp3cFnRDOgEEzouxrLicie8iIBISnsHOD3B0GILtpGZa99L+jJWuB6jwSFoZ+2EJOiuAPBhISQWO
MdJ1kRgmRqCNXfnw10SV7Q1fbXb1sAMuz78mGsifh2gPG6xtZRneNhsJZPzEwRG0loPxt0Mc7dqZI7qYbjkGNmmF3ZASlV9rstiD6qmodmo34pUhqS0GqTQeFaFrLpSkiPReqj1Nwruy0M/PHuekc6k9Wm0ckF2lAXxTJ/o047PUyg2S1N+epRVporYl6DN5eo8pXtM3V7fh15KoGPon1T6Z9c+jgAvqX0r619nemEfopOMzUzjNx8lX3tAr0zHF
jM7Ik+u52qEhDXantRQvENDrPgI6sdQHynVUMkgDiK/QnwA3u65VXEOGLHwRCFxfgNJi7PqTBaLy9Y6CYNK3BKGkVuK8HNkdvnuDXBY41yBBQNyQ3jaRujsgA4ViAOuyvIg2uo7Upw3VLxTiptoxtw6NwGaOVxFUX0a0ZUb4d0a7US7vgg1k0QoCA7VUlIPQKc5qyI4LxELnydVjV2gTQtsf706IE5gt/hAjEqs7JNhxiKvZyqpOca8wAtziU2c6
YkOcMubsI4xGoe6kQIA4M3eFZPdQd5nJpENycjMc4I4MZ7RHGbNOVMwzoAmvCmfZOkoLkGZwEDvlap8ntEAprOF8HQTdg0BGArAcF2ICNMlqkciLmtSIExqNBFeTwkypZVsqOVXKnlc5sFWMCnqHRvWG8Gy2UYUqZGSrbwMBoblCKi86Ve8GOl4HrV6oQgEyQ7N4DGD9VCOEfvQSLhfgEK7I5Gfq5O0mNmRm4MPjQE8cdqkgvsyQLhqIlPCvxyfY
MGn2z759i+5favvX0IYmBL1cOBHybhYobB/Yd3d8GVmrmdma6QiuQXQsYXyC5yP6hqEPOdnPoQAs842dEgaRewBffsD1SgvZ8HzDGpaGiBMboDZ+BAswioKy7aizmrF1Gn+xuZ3M4IVK/c4ee1AIBlA8y8Lsxc/bahEA58AgGl2IASWpLVgEupZVRNJVpE/QZkAtg1gs4XYzQeoBrCtgT6ocrQSQNIgNMb6JA6WgrN+u2wRwt+w1cEsJGtVAdqTT
ccOCiEMRkV0UwlFPpqoJQP7dV9Wl/Y1vDDv7Wt6IL/eJqcv2ytd/+1DVUfPk8NajfU+o9fJG2eqfZ988A3HPqX+qIAZxYOQgfm1IGshEalbbgDGDrbE52BrbYmreCRhvTrGqBZUJIPHbeAskBoY7BD1HG1j4ektaf2gn+KEpMAZvJ7GUBCA8dn2lHQlKMCSArYCAMYCkAQCXBqgiQToGMAODMBag9AUHPEEkAakzD7hiw/IamvPq6o8QTkCMCthB
iKAxARoK0AFVbhacIOgsaERkNqCjrNV0tQlIXVLqV1a65wBuqTbbrd1+6w9W4fhxEnLDTBhKb9rmD/bAdwO0HeDsh3Q7YdZlynRDep2eHz1dOyub4YuzHTCygRiHsEcVKhHn1w1z2KNfGuajojwuriFGZV1oh5ojsS5Fvw9EODLkpwDmilWu7dRGroLbJGhKyMpKrSxR3/eKaKU66SleuuU6AcN34aIDyp5oxNqytqmcrnRgfu/L2626lt9usq7g
Cd2bYNywIJCJMsmPgL2TrVyZHScdgejplto5020NdMdCq51wd/oiCQjE2p8D6y7YQqCmGTjJCmgO5ZKDu3G89oihRQjJhVOSnjB0F42oor3GbPhHx1FV8bvrqXNL2l3S/pcMvahjLpl8EwFNHrBSw7cJuxQiYcXUqnFZ7YfUwbRNSwrY5oXAMcGaB1QeAXmUwJ7FczOBm0+gWm+Zb7Rb7Wiu+/YIMskWRhdsG0lwfYLoaCU5zzNniNkrRB36/LOq
urc/qE5i2z2oVs1RFc62inNdf+yU3FelPVGL58p5K6qfFOQHMrit7K36s1uKi5trS8jSgf1s2VNAlVt6/GtfPGmg9yIGCxRV902hOrvuz2r8AQjkFdsrjR03QbD3Xbj+J1/xkLsGvPrKStsRvZIEGCNEobX159TNbmsLWlrK1taxta2s7W9r4NwKJDZp043vD7p40u/wuTbHvbA5X25zpH3oORgmD6RNg/QPMHjBX60qXJFA6DVBI1FbWbQy4hLR
RHBZdy2nFX5c1sk5iMDUUdXSMUK+tqvCXllPv8NnVA2+WwqdaM33lb+xEx0kIt2pCCrtHRA20uQO6mzaZV7AEbbMa7NPKCxlfgGnAcONpc1yBaMJC6slyrpGx3G+guj3s39S+x9ZfA+OOw9vMhti4+r36AJPAVEdoqMW0UWIzHjHw542XsTtvHk7VetO3jNDwDrm7rd9u53e2s92+7A96EcXeSepPPxtMylYiervIn0GKl+ddUE9hbhcA9QToGIh
4D9AhAssZgGRDYDmgDgxAR3YLssvEnbgpwE4KUK7LmIEQTlrooXDTgL2Tg2KWVavZq0BXN7r+gkbvc/0WrIrEtlWxKd0fS2+tBj/XbPDAP33sWZj6RmboftWOJpxGq3aRp1u9G9b/Rsq4kInivEf7OBnbQBvKGQKZjO0ipq1YjDGrRIVwWB/JMdulznbjnKw3JgGusG0TbAJlTAFlguwKA8OvBy2pNhnWLrV1hurdfuvVBHrz1zQK9cEeB9p1ryB
/q7fxt4E4Fce+uQno4ez5m5z6wl5oGJekv0buL+7dLLuBFx/gYCBPp5W6iRZZHPzeRxzTwJD4fLgZVR382Cu8ASjDSm51LcqNn2ErIBg3cY8+dvOTdKpix732Nf5XZthV1+7rZTJ6mjuBWMFzbTo0bReoO/Qsp7vhd/FWrxIDaWRXIJBPA6IT0Oty8QgROSDTl6J0EaFfQ8A2zTzVOwpUIpOogaTwthk9XJZOY7yi3J/HfyeIqk7J5JtiU/RWKbe
n/TwZ8M9GfjPJn0z2Z0Xfc1NO83LT7zZFKrvpFB9tdgLfXaSqEP5ri15a6tfWubXtrZ1qh4LqJN4Us44cQeTjgkcJ8Sp1J0BGrMuQAayQPYNONBp+ZR84YI6XbDcHtMGvtMEcCBJc/IqCV2W0V4+3c7Nf6Opalr55wrYaNK27XNz6+5Y+m3WOXXtjoq/Y5KuoH0yUqQ092Yu5dlFwiIIg+AoCE+ON+TtDyxcHGgO2kFmLhg0gfjcv8Vn7/blr6dw
X+myq//QoMWbvChmvDgAiM69gjAwg0ISzrsPNHRDxr0B4ZmvN0RPcIdCyx0zOHTWrNgAmPEq66Kx4QhkhOP7nMAT0VPcCeL3wnzEje6XP3uF+acY4C2YC4Mg6mOAkLk0yNPMWpB/Z0gd+dRrlOW7bdju2wC7u1PEg/d6c/M1nPQW8ccF2OKik5TIXuAmzSbAeYM9dnCLSeYU5ebIsyKvORcRy7HFRePnFjMn/Zl0w/POpBkZAqABnY0spAtL+AHS
3pYMvxAjLJlqVypuc+LNYLJId4LPOQFrI/qfApLGhcwuYX+wvn3CwF4IvOcZ5X1Je7sb+A59KLd56L/6kfPEhkIL5lasTAy6XN2LyglLmxfes9IeLWg/t42Ra/EAhLIliVmJdWryWRcil2S9t+ktKXNG3TqoNS7YCXXrr9Lh609c6AvXCT3F0wZohsutweIw1ZcJe8Zo7v4Jec2LJQeUeBkiUEcDaa9yODQgnLG81T3e7wIe7hvRr3K73FNd8MZT
NRy+/uf6mpXGjGV03WrfW4a3NT3RgF3NI9dOObKW1GD4ArghO1LBeeC217r+dwvrTC4VwWs1NnLHzpTp3D/MvscEfPTyEaOGw7lKk3MQgZktUAMxKuc6PzVBjzXjE8oQJPR03iJVK09FmkzSwAHwXOB/hW9zontcOJ7WcCtFfiZpYPkzV9A/tEIP0SCp7RC3uxoUP+i0iDEGo4H+mA3T0F309HnDP3Z4z0l6OrmfrMDbgZ0M63AjOxnEzwQO27me
zMZzizVz7BZ7DwWfa2iXz7V/aKpAI+aftP5HBwv+f3fgX9r8F4vOkXrzwD6X/15ovTozTo3iQSZ8/MYBffEgNSxl6y85fc7+X/O4V6c/MCQ4++e6RmbIpkU6zBabz3V4a8NemvWfvC8eexe1VtV2x5aHxRXDdgfTPHqi/eZi8MbhvTcSv9bjkGZdfJb5ib6oPZcY1NB2NPi+04Ettg1volwoeJeYCSWdvMlqb3Jbv8KXH/R38m2iZ+vLrV166zdc
Db3UHqR6oPZH+0soFQla5BGnDfA/6uywOC3UCao7yhwArKCcOstcAq6+WuuhZKezga7EoCQFJJ+Gg1DHDXO8Pj1qI+59olYo+fnmj5hkHqppSY+9rja44+j9nj7a2mQhRrAuNlEAFDG7HCManIYfD8A0+O0r4L2McxtvIMaTlth7s+sboJp42Hpq/y8+ECPz5SaoeuUDC+VHir71UYvob70eIZuUzHSqQLbKoBSbry5aBkvjXioBasugE44mAVnJ
gCQevoFvcqIEYE8QJgfkzmBtwKiAYBc8jYE8eOAQhBLOEng9LGQ2njUwu+2AnNQ5+YXDf6tM3vil51+jKlZqjmdmuOZOa/KlOY4WUfv6AJAVZKCojo13ACArgV+FsxrmY4OP6teagTR5GkrcI7AiQ9VgCAIgDKGUCvUpfmv7l+dwEr6O+NVm+bV+yXghipe6XlnbZeOdnl4FehdukElemQW97u6+ZDphayS4DV7FB7RKUERB5QdP4/AXYCcDWC8f
CXC3mUXmX5PmfxFv6yC43pxayWB/rN4gBC3qf5LevkIJbCW1/nxK3+9/gd57eL/g/6HebUMd4SAsNvDZA6IOmDoQ6UOgKBo2d3uoL9yY9stAtaEfHJAMmufNI4Dy0IWhZ6IKau4IoBpKAkBle90uWbem2AQhB6w6cPND/AIkEbKw+dqrc464ejkj4X2RjlfYWOVEq1h32P7l85AePzl0YsBOpkC6euZVoQCuOqGNQjmIdQRmaGitPl7aoe4aN6ZY
ofYIBwSBsTj1aIOoTgw4yBhHl6ZcaigeR5C+lHieai+znC4FS+d4HYFCUgIFihdUbAgxayeZgWiGHA7gZiGcmeSksD6hS4IaF5mQlAiA6h5oZpAYhP1DaENBYAJXB4hwIMdIoQCIMSHBBbCG2Zu++FvgLRB+1Alw++g5hxiZ2mXtna5eedgXZFe6oBkFd+t7paqLgECL8AjopKNWb/UCwc17Z+EYSeYFMEqk3CZw3YKD7ikTtDsHUWLQfsHxenQY
l7Rh0grGEnUJsPXphaBwBFpRaMWiMBxaCWklopaGTuMGZhMfsRTZKlsnaaFhyfiWET+HvkF7nmJFleYqqXnE0G7BTYYsb3AhwWDTHBM3nv4cWR4dlzzeGgrxbXBtWLcHreDnJt7Ew+3rt5P+j4W/4fBH/klQNqBwNqDRANhp+rEmpWmrIcCGwee5Aa5QA4K+0TguiDM28fO8DMmVKCOhU0otuvKQUKHlo6HyOjuSH3O8VuhpPO0Ht+7o+v7k0bmO
DAYB6wGwHnT6uuPRoT57+VGq5oYGBQn666ipIA8BgIt3PAYcs7GsuRdgNZPBbRu/Gli5c+Phgm5+GxkICAeiKbiTZpuBCqPQAABnJF6A0JtcYwA9dAHC1AKNGQC+g9dHJEyRwdtpEKR+gDCbKRs9HABqRp5IEBVgWkXJH5uU4pHYaaDxoXoqKfPK8Z1syKpoouE3krXo5kmKnuISAekVcahgKkSZHqR5kcwCWROkb27wm/Fp6JDuTvCO6lqaJrta
iG/GEYB0RbLjEawSmiH8T74jsHAoiU93GBGBKaIMkAQIwaJKq0WLIv94q6cGqkpC0h9qUbEBFRqQEWuhjla40hJEXSF24DIQRFMhZESyFa21ugT5hqRPtag2U64vRG8SzuhdwQI5BJaLwgbEUKFkG9YNLhpwxKL5Ss+xcjG7rGcbkJFMOsIBBp7GArgcaC+b0hIBz6JABOT109dMHZnRxABdEvKoUoW5XCdxrZEOSJbjk5wqqipW6FOuMCiruR5m
t8YYqXeqPQ3Rd0VdERRFdlFEns/mp8HoA2cPoAjASEL0DME+gPUB3AIwLThGA7QMcClg8zsPZSyo9naZKq1yD2DsCrNHgRbuA8nP7JwCIDjhlaTcEvK+WRzhvYVeW9shFnOJqmFbta3+lFbaODsq+5NROEXLatRqPilbUBaVrQH0hWPq86MB3zv1hNKFEaB5uugLsNE0s82NEwweG2tVYuUOohuQnS/wJAggOJ2k5bCB4aL2Bz+vEetEzKsoS6ZT
++Dig4xGCUu0Ct4ygEUTtAhthS7faShioZqGGhloYpAOhnoYGGRhiYbUOZ4ffx0ebpjIG7RWcAh7Juh0TE6vQMMRABOxdUC7GYAbsX+EU0yILgGX6/IRWasxu+NSbY4RpJnAkoSIDEqkoeRknDJK6jghpEB8LI1GhCsthKgUBc3KLHK0GPpLH0B2PqREam5EexHamrphB4f26ZBW5qmwxkaZwevtORgRYhsaMQLRDPuGCpyBUhzh+06Ljh5SBLtj
tHu2S/JBpxxOCpHJKB3Vqg4qET7OoCoAZrEODB2Z8ZIAXxTAFfHh2BbjnpR20KpuTlsZbvppjxR9EZrVuGWhABi8AMbDFYo8MYjHIxqMTwDoxmMdjGduWKqPQ3xd8aQAPx5dnTIDu0UTXaxRSccoaqGzIOoaaG2hrob6GhhsYaDG0rmHHLuMGn8RSeHNIVJDKcIfsBv8esBcj8E2Ru4JOWy8j0QIgvNonh4473DVFJqKuks6DeUqrxBzBdUca4NR
sVlhHmugsS3HUhIsQB4dRQZN3HSxvcaUbOuCsYPHFWbAZyE2UZKlwFncvSsyyRg8xsNTDKwbovF3c0LkcA8C1GCsYyhTtnh6CR7pkqHyB+8WzpHRUkeqE5MKwaYE0emgcr5G+r2L2A/MnCVzZ4EPCd6Hi+9DtoF3gwSYRR8UVgilRqq3oaHACJApkwl/EIiQ77GcTvmGHhBZYZ75Rh7TB2GxBcYT8b6A4+n+YAWgJsCYgWYJmMGd+W4esHXA1QSu
Db4iRtyJD+iwbMylhk/vkyReQnuFZaInGmJynmSeFlF+BHJlkrZJjFq2Fxc7YaZ5fmZSRIBwxCMXMBIx24CjFoxGMVjE4xkfhOH7AqQNNHGyRKKnA9gxifMEoWiqiP6YW2Fj0lLhufiGYgqwpvmQlR44PRYNhq/kInl+aIPuEHMh4fIKzeOZCeGApXFqCFfml4f3o3Bl/ncEbeUQQ+GvBzwc+GIpT4e/6uKWDGNZTA7QPUD2sa2nTb+KGUVxBX6S
qnEpdgdwOhCCCZ+peZqy10BzjJ4OmJpJMUtXJOgxovguD4khGEYPBOy2Ec3ERISVvIm0h3sl3H/uDru0ZqJ8sQPGhy4HtonE+6ZNWw+uDEZNEbQeck2amqt3EtCtWuYRKSWCfEfQac+FcuE4QccsiOiqhx0cnroAcAFoBEA2ANjwmsTYv+RJOKhJamaA1qbakxiubNnrphuek/FepL8QXonxjkQiozGP8c+BuR19B5GAJXkUDHq8zqa6mrsdqR6m
96EMef5oJnTi4oiuCUZ7DMgwmAcAaw1bPFT02e+muBbycrlJzEUkYP8QOCTZkaQuM9wOSYpUDMZIxsi+BkhFwc6uvXHlGkiW+6Uh5AXImUB7cQSymOf7sRE9xjrrlbqJkqXY5v2jjiNHpkn8GT6GJFPjTFdkaak1YjQ0IIi5LQoXvwS6pCDjbFOJUce7YSe7luywSRPtlbEnxVQNqBd0gQLdFCW2AIEB/kbQJ0DOAnqXjDZuV6TeltgqAPemPpqA
M+mvp1kWzwvRxbm/Hziydp9HBpSKsna/R4af9EqxO4hCaBS16XLR3pIuH+kAZb6fEStOPmtFK0qcUW4rJx3GPUBGAEwLTiywtQI2hTAjJIMAeY6hCMAawX8Sg4LObRP2DM0kbiTHUU/HEVoIR2iIgHRoKVLmqHO/lszENafCcaotae9pc4H2aEWKYmuJAU3GPOQsV+7WuPcYom4sLRiRFjpT9jY6aJ0qe/bsB6ZOeHjx3ATX7vEnQcaZXAuOD7RI
etPq/yIuCkDBZiRu6UWoCRyDgWloOaJv9DYOUwLLDMgCMZNb8GCGElTMg2oDACJAtOBjDHA5oDACtokgMcBsAf2GMDmwBwDRrHqh1hy4JqdsUlSNA9QKQAUAiQM4BGAnQPcDN4dgC7DOA+gNxj0AlwP/LpZmNh4YuU2WSbAuwVsNST/Q+OikDYAnsCkB7qEOEICr6rQJgBCAtQKHGyGH1py4Rx8bkw60p5yOJHxxqbgVwZpSVN5mDAvmf5loE+Kc
I5oAQlEaRIQBgZ5YohdCayk5mVgkMmBUjafnAwaqute4cpfMZhHdpZAZ+54RqmSonqZeGoyHq2TAf3FamUqdOkchsqfNgU6JmQYmMRrwCiBMe0ISvwr2oocuR9QseiaK2JbPvYkc+v3AamXqfhghCBhpqZ4knRimvOzKaRxB+kp6BOUBk3CIGdHZgZRelUB5OhmtBm/xZmjXqAJRGSRlkZFGVRk0ZdGQgAMZTGd5GQmJObGyE5lILYooJA+uglMy
BGVgzagUwL0DNAlrKQDsyrQLUCSA8QMoCJAzIHVBCArQGMDcSwASxm76FwECy22DwFWGAgVJgPLdkeIUNSKykYHSbCZ69k/osxpzs4rnO4VtJk/6YiXD4NxXaQLG8pSoK3Gt8b2UKmdRUsZ9kyxzIXLGBqv2VOnuuNEUdxgWIOZgaCOv9sbY7ZXZLbYWma6NMbicFieSkrgwkAbFI5G0fxGOJ7mWfyeZSVFAAjA9QNjFL6XeB7GKGfaDwDEAmgK0
Auwr4JcDMAGMFjEE0+AH2G2wlwK0BjZc3uHHRJkcYamzZ7XDjlLZXOpXnV5teUuqZxBuZzQRwWmMlhAgIPjLo9gsGjpjgk1gstDK6sGq2l+CGjndkxWJ9lInvuwBi1EqZbUWpnB5SiSKlaZYqU64Sp0eWB7/ZCGeqJlWRgDyHba6WDKoouC8ZUJm2rVrI7ToeiC5nWxAkejlbGk+TxDT5jtv7Y96jqdZhZ6ZOepqvRVOXHafxdOVW4Nsqdn9FM5n
hNLmy58uYrnK5querma52ubrkNOXbioQoFyCW06oJUMfhlJxUwMyAGSiQNqD9A9AFXlTOrcjwB4AZgHIjCqeMTvoPeZBHrKyBL3LvLIg/zJojIQiEVdz3AJsnlT25j+nqpO5BrhJkf6buR1oe5smUfaS2CmU6ofuN+S9l35QeaNp0BT+aOkv546W/n4+rAQZk6JnSJjrdy+iUnmkJ6kJC4+eKzFzYTy9PpULEg+pCbE5yz3qqmBOlsRi6bxtsf1Y
yunsegDNA8QFABtoBkplk8czWVUChZ4WZFnRZsWZ8DxZiWc0DJZ7QKlnD5R/g3nBZWnMcC7qRgBDgawIwBQDtA+FO0C5Za1rThzA0iNSL1ZNDljZNZlLlUCtZ7WZ1ndZvWSkD9Zg2cNmjZ/RWHFnqXHpsYR0jOljlrRv4u4kJxnDqO4mwqRekUux+gMZm14ZNNtlDYy4LgH8cwSWiDReVKcCpcaqLg0K6YeRlb45KbKU1Idpx8j7mKZFhbhFXyYs
Z3Eh5yiWHmqJr+VHkuF7IV/lRyKBJjp9F40TwFbY6EPkYVpK/N8CtWKIE7SwgcslAUOJ+qZHorFmOTBYFUC2ZJEXp/tnUyGRwduSVKRGBfcbZODkR/Gl6eBd9EEFl9Iznp2JsJwXcFvBfwUjAghaSIiFhAGIVuasCerxUl5xswW4ZDMtDHvhJsHkURZUWTFlxZCWUlkpZaWcAFLuu+hMiTocsgNSHZc0cdn5GycEHof80IFI4aqurvcBsmaZhWa9
QvwNe61m3wIGFCmHOKhH5KJhfJmNx5hdfm/FLzsCXvZUBt1FfZssQGq/Ok6R/mx5h3CtqY6A7N4WKpqeaMTZ8r3BzjDKPZGunmiAHNJzx82JajmoKYTqcguJxHvNkHx3orjl/83iZqG6htVK6F+JjHtmZnJsZpQbM2iQNWVLApZtaVcmVZlmbRmMDviH55JwM2UBJMSa2WWlqZhyY2lmZq9h3AAgnWZOljZiQYhhE1KEHtmBSfeG9mCyTX59BJsO
0DEZpGeRmUZvQNRm0kXOTzkd+s5vwFZKHOEuYEGS/tGALBISZub1aO5u7pLBBSSuHEWoXteYUWjHs0HfJzYX8lthxSYsm1+yyegCcl+gDwV8FAheaBCFApUKX7JjSVBa1BsfjOEmyxIA0FFhVyfV43JNFPjgX+yweWH74q4R+XkWhQd5wr+A3kwk/J7wH8k9mZwceHTeoKWQmXBG0FFEreV/nCkPBW3iimvhjLPDQvh7wXhBJx8QBYALUvQNUAQS
nwFMCDAHABMAYwtsE0C9A+gGOHHFFlhIV/xwcJ2ACClUuebooX5cBouWXwLZbnuwVOwI6uSqPfoO52hWJnb2dcK7lcxVzp7mkhCPt8XelymVYUCp7UQ/kaZqtionaZzAQNGuFM6arESAmOptlwlZmdHj+FIVoQRaIOOCvwLIsOfwLpwy6adJwOl2jmVBmOLipVCOD2ibDYAUwPFrxAnsKECBZWVWibfItQJ8CY6dUIMCewWMHVC+xGsLUBWwPDni
kHWDWRNlZZwxRIC045oDuCSAW4JoDUZygBrAuwLsMyCfAGsPgDNAFABQD9AVRbQ6fW3VfjR5ZBWUVklZxwGVmaAFWVVk1ZdWe1UDFjWV1XJFeMM3mt57eVACd53eccC95/eYPkLVgxbExTZ28asUwWB0cWX3qM+Vw5om+VYVXFVeib4U5VbRMNTdcs/tcAVaR7sdl44q+UJAMIIiSKHml+cMLY3ZfCZo5ul9Ud7kX5j2c1E+l+Ef8WERdhSOm+Vj
hTpkgeemZ/lx5UZYWR/5ialnAPAZvrQlrpl+LZmLRAVHzZ8Ua8bQbpV8RQekT5bHtJyIFSCv7al21klm4Z6KhCLUPRz8ZOLAZj0XZF0lAaQyUJ2X0S5FFOhBXBnEFfCCJWEu4leYhSVMlXJUKVSlTAk+R5koHai1FfCLksFYuWml128UUlTNAbOKIYjA9AMyD9AUwMQCfYCAHpbcYXMg1XiFouJIX9ybomhYNc31ITYI1BUTI4XAYurTENpo8poX
HOOheJl2V+9kYXo14iZjX8xLlbKayJwsf2kKJXlR9mBl4eb1GR5oZe/lKx1EZGXQlaIN/bJ5UVe0TZa5cMxpzx1wMAV+6yCGHD+odZOvGSBW0T4mJFJxblVVAXBhrCEAH2CMClgNRboIVVVVSkA1VdVfgANVmhk1UtVtsG1UY2h1Z1VGcSxXmVwF/NSlSC1pVEnFj1E9XiR7JaUYWmL8VNFhYyQwgkfV0JW6QShiRtWmF6pqOsnq5vF7aY5WcpY3
Jfk9pz2X8UdxBNcKlE1wJX5U/Z4JUPEyps6VUCY6dlAulg5uzNdyCmMRUzXqQPummW+OIPhHzrF0JH3Uo5PNbAX4l8BaenEl56UgUZuPbmLWBSubok6R2MteTly1WBbCrJ2tOc5FC86taLwRpnhI7X9Azta7Xu1nta0De1GsL7UYw/tcKWm1GvJm6W1X4tbV4ZQ+pLm6CiQLLCNAmAP9D9AVsNgAawzALbDOAW4MoD0AW4NqDKGEmAHXb66lVCA9
EHlKuDGQYRYP76VIcNWTyu4fJXAwWN5WCCMxImY7nWVbMS7kcxUmYYU8x6EfdlcpUplfm51fKQHlUBIDUqbDpHzg4Xqm4qWCVshMDW4WA5IVctD11gNSnluO4LNMj0xlyOqn1hiVaripwSzm/zZlPNWXl4uI9RIBbgUwFuBjAvQJ7DEAfmDPUJSvVf1WDVw1aNXjVk1dNWzV81fMXjZWRVy4vVBJZQbH1j6jKVVATTS01tNHTUvlSFqAMCBAsl5U
fptBvEBzZ0Mx0i/XjgtWlGhLmn9XxD6uqNWfkvuD2b7lKZedbfkeV9+bYVgNSTcTUpNoJRXXQNWiZk1wN2TcpVa0E8bB7z8nXi/os1GanlKIuXYDtgCQvdVzXKB0BY4kkNnQq9UzNpHofFqheObI00N6enQ1yN0tXDIU5r8Ww3F65bkyWq1DOZ8alO6AGo0aNWjTo16NBjUY0mNZjfgAWN0jfzmqseLdfhW1kpUibSl6KbPXSIlVdVW1V9VY1XNV
rVSCFB8azVHyReTCffVogoCqq6RgfEJLoUYQIAnjHuCQPx7GVl7iz42VehEyKQ+bGQvypmHxfaqeluunc0xNfaW3GF1zzYCX2Fbzbj5QN6Td81BVOQvA3wgNNTrHGi25mwJgtlQuYhWmnEXxzVkiFlh5pV8LTiVo5eJc/w8+7/BulotJZRemqBFZToHahg5b4m1UkZjr6y+XZHvLSeLZY0HyeOrYJ56tInjL4sedaVJ4cexbd5ylt3wIp5CeV7pO
UvFxrSOimt6CAuUE4eSbgIe+q5d0GdhAzLsVO1MYkI0e1XtT7V+1ylemEThiFctBuecfh55RosLpcTFhL5X0l5+RFYX4bhnyRRWxez5m5wJe8yYBUblcQRADCVRgKJW61kldJWyV8lY0CKVs7Y9TzttlsN5m5lXn8DVeXSdcnYV5BGP73JZQQRUdescF15vAPXmA7L+P5ZRU0xI3se0WZzFnRWnBJweM3H+kKZXbLe2fuxV3h8KWl7cVAlbKR8VB
HSwhJxPTQgADVQ1fUAjVY1RNVTVM1XNVStRxYSle4MINpVWI9wCkzKt6EIRRIu1iXu7CQl2U+gm+8NaAq1h/xOD7ttNvn2UftZ+M+6mFlrTLbWt/uba2B5fpUXUBl+NT1F9xfUc/aURg0YtqQlv8pjpC5CqRNHxldKeihrMmeTkaIumCqSgwWDpoQ3c1A9VvHOJCbRAhJtGxX6ZmpKgRqG2xWoSGb1thTFW1y+I6Ar4og7QdEnZtZQCJ1yQZvpr6
hujHnm3Vt4XVD7Ag9bXF0a+4nZb5Gt0ndD7lePbWPh9twHYUmEC65T0EDmXYVUA0tmjdo26N+jYY3GNpjeY1fxc7Z34LthJe55fANwIn6XJPnqn7p+6fpn5Ad+FbbEVh+fmuFhehwBF4wdh7eOD/lp7T0yVdZniBWXt2tWJUSV+tQ+1G1L7RBZ7A3fm94uCMSgP4F4RQZhX/tAHcX4t8DyW15PJokLP4xwlBov6kVW4Y2G/lG/lF2zJ2sbRWodkc
iCm7+TFReGLeUKdeEwpt4ZXirl/FS8FPBqKW+ECto+qtWFZxWaVmew5WZVnVZtWUx3i4fwAfquIyeLBa3ACEtSaDyasiJpvefFEJlMp6kKiAWBHgVYFeBEnZBS+BeAQEEnAJFua1khETRSFPZlhcA2DpNzrfah5JdSCVOFaTQFUQllNbXVvpZnfCUbk0aMsyI5IRSNC9e5TfBDapkGlg0ENcLcfEZV20e51yBibRJpkevnZABptAXZWX1UwXboEE
ol+hLpseNgs4FZtrgbT3uBdFFdys2uFd5x2BdvYYH4oxgc72vYbgZYEe9WAWAIs9/geRTs9i4EV3O+U1K775Jk/oO0xBvQRe3blrOXuUc5R5dUD0ZjGaeWLMEYChA5B6wSs4FB/XSUGjdr5e17lm1QQiC1BazCknkVewbuFfdyYCe3vmFXcO3kCWtde061W3fe2G1T7cbUNJs5pMGQdLdbMGFBGFT56bty4e15rBL+psEFSYxCX7bhv5XF40VSHX
93ApDFYD1oduXCf4sVKaWxWwpuHZxUIpsPTxVEdMoND3KW8zRZZnVbeR3ld5PeQcB95MAAPlD5i7vd7B1QnmrKXuhZN1CXYTQsdkTIssnlSIg88qiXU9tBBaEehkcBchg+zPbiG7NBIYGG7NZTcYUY1naVjW3NPxW5X89ZHP6VdRWnUGUR5IZayES9GTR63f5tdRPxINSqXBD1BeVFiVzxPEMbESSMCi95LOIpkXkXpevdIG8EBZZ50x0H1YK6pt
/nS1SBdNHtb1ttOUg6GWqxodGj1trNOiFWhnoYgOW+8g3yxGhFWsoOB9boWoPhuGgwCCYkvoagMBhRIfb6x9JXWN3J9nfaUnVdEgFe03t/fQbWPtz7fn0sCWYTAIXI+BvmF2lXSYuGldhFpgpWiNYaJB1hpFXK1fJsHRv0Id2sQBXLdXfWl5acMuXLlbgCucQBK5KuWrka5WuTrleDk4UhXTh8Fpchzh5fd0ngWvSXP1PJk3cRXhefXmv1xDa4Hu
EJDCav8ksWp4U/7Id+/cxVn+qCSf0Q95nUlwX9r/oR1aMxHZf0TDScdUCXA5oEYCXA7QK0CxygNZeltEK7nzR/EgLPQQemjNC94JAdNXWZYoHAlVrNpMIQa75RNqmE3n52dV6XRNKnfnV2tgqQ62P54DSL2QNunbpl/ZEZQtJU1eQuFVAtGmOOAIcJwAflzxdwIBwRF5jJXDb8UbrEUbxrnfh5TN8BW4k+dpZXE7oAfkYpEBRxkaZEaRFkRVhfpx
ALUBhAD6Qmj/prQC+mDAYUbpHyR/kbACBR+IyFH10GbKhmkj6GRSOYZtI4/E2RLDaBnEti4tWwHk9OaGljRGteyW6KSGbJH0jOI4yN4jwUZpFEj7I2SMYZVI6+k8jEpVeF8t7Bff3n0Nav9Bt5nsO5X2xhaf6FKqUDvSa/AyVYzSCeastxGOlhcK3WI1wnVVHH5G8q6XXDcmRIm4DOdcj6qdcTQL3EDwvaQOl1OneXWUD/zoFUA5vzegCY69Tonl
xlBTVZmIDgAwIEZqGRtbaUJ/qMEWF4zndG0CDbnYekotK4LM1+2wMUIDnRNI/dHXRlY7dHVjYMYw0Et/I5TmCjqMsKMC8oo6xBhpPDfBl7+fOYFIgxDY1LXctCjby0dO/Lctkmw+gBVm4ARjfoA8A5oNgDg6ygLLAYwmgO0DxA7diQnZVwuIHXWNXLCuCA+VwM7SYevELaNIgqftfrjgL3J4I+NllYFYFxJ+bZVBNFziE2c9zlfcP+jTw2p0i9wY
0CUfDJNf5VRjkvTXUeFKQHQWJjHHA3UWZoxsJT5Gzo8r3y9UI5wM5yyIDqrWI9tlG269tTUFlX1FeSbAQ4tOBMBCAAOM0C8Gx1nhMJS2oPUXMgjRc0WtF7RZ0VjA3Rb0UPVR1bvVItbtiWNojJvVJFJxREyRNkTURsAHpRGlTA4ZKfxCD43AmfObm9UQbqkCkU5iDkZwgFUfnAXmhFLEq1xl+B+NmFVrfgP3NJo88OeVrw95UhkyTS61fDZNT8PK
xUveBNMQgI+T5NapFh0SVxbdbkZq9NNLlqMisLXYkudvVoIMY5qI2WPRt/tvAmXxytYSzE5detLC3xEU0xnyKTDZgUCjsdkrVMZIo/gVfg3DZAAAJnhDOPOAc4yJaLjy4ziBrjG41uM8AO43lbRpp8bFMIJSCfI04Z2oxOO6jCPc+o0TDRU0UtFbRUsPMTrE7CVsuGpTK2UJikx9SM23js437AU9nLrXIr3NUGOlOsnEmhJiSTwnaTxomkkoQGSX
TSiJWA5nU4Ddw/pOuVhk4QOLcpk8XWhjovaTUaJNk9XV/DtdUtIMDFnZPZ7OlGMMrZ5HEZ3XnQw+PwQ3QCI/3UBTRY0IMeduPSFPHx5vVIOW9RTAYOxJHCQkncJaql5xRJe9YEk14S03DPhJCMz1QfUasoIlbTWSTYNLl4YUn14dQ7Y4MjtP2lwXgV3JVBUwVuAKIX0D8FZBap+JJvogOh7SQqpT9C4bP2PJd4AMl72wyUvajJE3YdJLQkyaSjTJ
i3R31ntK3UslOD59LOPzjxUyuNlTm49uNFDhyctBGy9BDnjnJRNr+1YVNyXcnVDt3T4kVhNvugivJ2kOwLKoZQDEMHttFpGADlHQT91b93Q/9279k3iPkH9GHaxXYdp/ZD14dt/e7PP+0w6R16jXhP9BwA1QBrBLjA02sNiTbNXEBHARUt9T4hFMVNNjQvHfT3sCF2GwlUoEAqylrThrrpOKdDzgZM2tP44GNEDGnSQPxNZA2XUUD/USBPUDMY8F
VxjKQKM2OTi6eYzhJGZohM55zVoEPYNG/FojExcrlhP5jOE0iO81QU4fVFlmxYtlUNMaVanmAbqfaky90UxACxpq8/GnupvrG+mJTzY8/Hy1b0fSUfRTkQU7ktYo5S11uUadKPLzLqTvPOsCafvNJpouUo3DuScaMW9AHWbfwTFfWQNm9AQ2SNnY9Gw98DFwL/HIWgqwenQkxmMIBAgPF80/cAoBDwBHDoQ0XogHs013W2n58CIJAJyy4yg/o7TG
dV7n7TNzX6NUhlcwOnVzZ05p11zYY6k2fNbrfpk0DUJeBPK8Xc8g3tEN40c37YbAyameTl5jjhZwR2n9NEN081xNWCwMzxrJtn1Y7bgz1Hjm2ZtEvh5xMJaC19SXlSSRzT+JKi2AJqLI6BouYLYHZuHhu+CzjiELi0DMlt9EcXH16eifQO0kzKfVV3kzXwZTMQVPJXyXCFdM4KUMz4FhmGIVLM60mLQY0BzOVDwQ2N0ecUFoMmGy6srs0qtYvkRY
TJUkuLMrRks6TOp9a3en27l7OQeWc5Ofdzl59I/UzKazSINrNnJY0LBzndM/ZX1btTyZnAkW6wQqqgICsvu3N9R7c7MdDv3W7M79CNH90XBwPVcGg9N3eD33Bzuo8HjDMPRMt39bU2ia04cAPECHgW45fXxzhaSzZGkAIJKqHAyINLiz2DNoyJW5ZtrSkL+ZlcxTnDHIga3YSJc18VfjlCw80F1Lw+lYvNeLBZPfZVk9dMx5tk2BNettsD63Gmxo
WRb4NA8yNBJAHA7Mbho5qmsiwhfA3EUSLcbdxPTNy/LIviDS8yoQoZt6T+mcjT6eqMbz4tZ+moZGK+SNYr1IzSWEt/qVuQuSF8yrUeSPYzlO8N/YzVN4r6K7+lcj2K2/OKNUpa1NTjVQGjoY6WOjjp46BOkTok6z1K4bf94KSx3dE2+bCDHSZXgVqS4BpdohU0C/iw5Zw54zAPBo1yRebDeBYZknO5GjrHyQOHJlUGE2dsrzG3D5Czcu9pVC/a2P
Ljre8MXTnwxGNNzL9lRFDRdk163cYvyxdwWzPXldxvT1tp5b/ASSTU2wryxfG2G93pu9ULzJJfIuSDiixoHKL0XR5warvHZEO9+3wEs46LSa7YFDyZUm4IuCGa8guTlBq8KakoxqyggEz8fWEH9tXZvYPSzKQ54Q9hjen2HN6g4cOHt6e3RmFNB3YMEnEU4ynPK7Ye5tP0V9xsyENgCUS/zNyQIyfEvV9vXRMgO0BiIuBrgaS04urdcs5NgVJfxv
+YAmQFiCagWRQ/vhm5ChX4MD+FvvrOXdOFdzN3dFQZxr/qV+rmbp1SwG92xDh7fRab9O/p7M9LvQ17P9DzU3hU4dAc+f34doc8ikgbaKVysSAHTfUDagCy/QBw61QJgBKV7QJoC049QP9DSI7QBH5su+uWs37AiFmcCkoFKTvygFdCUJBooWy3RTGyRay6PsMa9loWPjeqy+OSZb49zFXLvo5atANvpX+M1zIY/QuXTwEy6sGdDjq3Oet2TasPrc
gLZrF+FsE9QgnAbSQwSBtQaJDXDz4aIgPfAG/iGsAzCRQdXD13JElRjAoznVDwxrQAoRdNz6hwC9AlwFFmdAKQJgC04HAGMCtAjQIJhGA/0FuCJAHemM0j5ixZIsJu7gjTRDz1KtGuUNCpEnEGbreMZtC5HmacWhwGkAkBca9wEVJY56cycOKqDQhhL/ALcGpOujR+UXNo1Xo+6U+jB00p3lzjw3cvGTTzbatvDrzRA1ATrrVQPutIm7QPgTX/Zw
uMDJtnUF8sim+Ywhtn0yFbxd0LWi469wTqGv71KxY4HS4pyaDPpumeoLnB2nmryOy1x86w2pTcKhw2XzXDayU3ztehABQbMG40Bwb1QAhtIbKG2hsYbWG4hmNOjBaTngx78xyvKNScawCYCRgLUBjAW4O0AYwzQAcDOAiWokD4AGsNgDSIVU0Lg4bYIaXypAdffmGuWE6JFhkbVNBRs5KsCInWiZQVinWvjBhaxu/14Tf/XY1MiRXPlbv4xdP/jT
rbVvvNYvUwsNbLC01tsLXrftWxl0E3k2N15cClS5ameZzQOZ+IVPbUb2vX5MFjuE2VXRbDTegA9g9mHIhwAWRQoa1FVQMQDHAkgJICA6zgL0C2w4mCobOArQLLDVAZgFM7sTO9ZLu6CRgOBUIApE1MBzA5sPgDs4+gDADEA3YCkDcYIk1vULFdDsjOLKxY3HBT22iNNtk2My0lQi7DmJ0Di7qzWCFrLEYMSh0pUkrcCw7GkGlu1kUyV5OH5KNRcv
FzWO+avc9ADbz241r2ep20LtcwL2Orjc3p2Kxrq4Z3ur2Td0qPTBTUHoouffh3UwIhecr2e03AkuvYLFQNhMjbWmzPNR6Hgd8TH5Z6ew6klHmugWoFAueawHzqmuk7LbKU6W5rbpLZw0fCxTkQWSjBoJqC4AL229sfbX2z9tJA/24DtVTA4wPuxsWGTy1/rqaZOOz5JsFuCDAKQGrntAqgO0D9ALsMcDKAPDkwCNACAHMDijaw6DuxG+wMVroQwk
GyxIg6XbDuWIYulgtNw0WNBz3j9Gyc66Fqde7mhN3o1nUWrh0w8P8p9yyZNVbZkwB557eVs4XMLFNV8vZNUaoCNSbtBI3XsmoCvb7mJIBcmVq97unNlPj0of5NyhfVjpssGQu5SDHA9QGwC04YwBwDcgPm3CsM6HgZx1QdQW+iNfVOxfNhcHPB3wdMZgu9LJ0pRyRzVnJ6E3JOpwOzoCDZaV5izvxK2SNdnVRie/luUgZq9c2p7uO37loHFWzYWY
H503xs4HE6ZXVF7wm0Z06MmOmqX07cvUvF/ApcY4Eol6Y6G3Gi7AodlDbvO1PPt7vm8aQiHDwGIeDuwW33soraBbGy+LUU7ivD74YiSstjRLatvsNM+xttz72U//F0rCzZfvX7t+/fuP7z+6QCv77+ybUctEAHJopHo401NDLLUw9vhz5oKQBrghANrm3s0+qQDMgMAJcA2bDsCMAJju41/sSrYfKcDCQlssZC+rVw85YhwKVDx3jgDBAMrwWkB7
q6qO8x4uhSqptkz3q68ASkwuC8sr9O7TpC58XsbKB9+ME7Vc6dO2HdC7nt1bby2GVV1bq4Qftzm9VBNAV5mT904EMetjhxVc8ZAFolbGchBJd0K4iPt7yDklQWbVm8cA2bdmw5tObLm25sebs7buOLVQxSdUy7cuwrtK7KuxMBq7Gu1rtQib1tUWUTZVWO6G7xu6bvtA5u/ECW71u9dB27OuxM3PVjDuDULQEJLxPotpNknGOYvYP0CEAVsJmRbZ
/4Xgu1aqq0uv5ymznsDmIvNCxEzdTHuMpVaS4Lu5FziAWxvFbZc0dP47Rk4Tt8bxO/av2HLx06sF75Nb8OlWtdRdsSbpmUCMBU2rtLhPjxBiAMqbsMCJqRDqVZPNt7LB4FOd7oKgnxElYgx4n97opYPSzsGMCGKMAc7ILldiarGYCwQcZyPvFiY4lGcxnWPI0ddilJZGe1i0ZyTCxnSmgmccASZ9+mp6aZ6WIZnhZ1mfzsnQDmeLbzDRPutjOR7j
CQZ38V2NYyH+7St9jUo1dv7iWoNWdJstZ/Gd3ixrImdqA5Z1nqVn2gEOdFndZw2dajrR4O7i5KJuHPwn1m7Zv2bjm85spArm+5ueb6pT/3f7Wy8VFbL1wE7RGIVwLDv0I8O/nmB6C0zAN+BVNAJQCmEKlzZan6cHrCwRvwOiWL2T7qYcKd1yzce3Lhp/ceDSjxzntkcDh3geU7BB3dPgTAjj8eTxzLOAfY4ARyNBlMavUAPpwms8Qt5jw25tERHQ
h7IFEennSGfxHAvhiNm9ca+oEFMWa87sxd9F2AIgHwaOszftHulJz1tz55MjoImCq/w0IWM1+dsX+Bn+dybrfbkmEz9i7WuOLDgxkvrre27BvwbiG3MDIbqG+huYbB6wkY3qkpAqp/E0ukENXrps+xmtwRfDcD+ObNjbNkVc3Q7NtBK63JfOL3fVUCdH3R70fMA/R4MfDHKQKMfjH7XV+ipAkI8XzZGF2NdxhLRl+WFbhuckG5s0vtDFeRJiSwgt
J4GFprPvrAKXv3Bz36/0tmePs8f1+zww5GFjDbwZMtFX0yxBsWpLOEjDHAGsJoD/QlwMyCDACAJoBCAlwJoD9AjQPgBvpIO2pVWWmiAVJJKe7vnLgnsO71C3uG0uhAXY3gYLbbHfELseiB7tgZeJ7PUGcBdg6cPpc44LNjqfIHJW/qdlbYF9QsPHEsXas1bgE2TtXTbx84fDxhmV61VTsvRFVxqjdSxHOIVwN1vYSwJKhPmM5wOG5K9BF2Ed+n+6
XU1JFjebI2YAfOIkB8OpVdDbPqeJ/LuNAiu8rtTAqu+rua77AOSeDTj1ZxMkXUR7sZ9+UThQ0JHoW+HMpOIN4urg3Ep4odLQxcGVKiRCIMnzDXXYP/1hJsSpnAnLC6D8zf14tsntmHOO3gM7XVh0adBjPGwBMOr5p/nvfDHy7dM2n4E6jcAtDp05OmIljOYs17RkAoGeTskJT5Iumm/6eAzl6rlrdk6CJ7sqsqhF3R2EFtakeBSnQMbfmApt76lJ
TtJafOK10+7gWz77xltu1uO23AAVXLdtVe1X9V41fNXrV+1dvpe+6KWW39MGyvjjK57bUqNCUtDcEn8N4jeknKN6Auj2LgpTdvnokIq0q3k04JlG5jN98CZw2WwuCKqpycbJla90s3sbyfg0qrQg8Eiw4VwcnYBcelwF9teoHsTftcQXh19VvPLzra8sWnYt+GWfLCF161FeMt6DntbquCSa0psRx9M+Ue0p7RScNN0vaa3+6b5vCDPXgbdZMtFy
jM1lQXdDNLAgkMXDLgpdwh7Lg2C1b173ts07SH3K4KVon3P1JiRV3OqrXfnIg8pWt2LNa5EFAb6S45epDVQB7eRMXtzVd1XDV01ctXbVx1fqzAS8uDTRDXpsGczCwX+3/tH9TUu1DvM6kBRXkcAwdybCS+MmJXDXpgr2X9a2TNOXS+89uvb7259vfbv29vtA7kD4N1ddy7T13EU8DyhbhLVfXUM7t64Y0PjrNl60FtDHS3/auzjFT0N9LQ09lcg9
mHdCmre/syMPb+hV0inBzQc/D1lXEABMDKABwJoAcAqucDJk3o9mHyrul5qJpM6UArDvzQzNONdlCc8oCteEVKNchnA5ywE2roqcN+eU+V2ItDlDpqzcNc3BEiBdWrdx+3c0BWSIk3d3pO5ZN931k+LcfHQ99k37Wnhyhc7aOfIVJQrSE2OCgrrNfYjx1zN75PI5zByveY33J/kFtBG9+amqEg9Fbcjj76WkfREZT2HeLbGp3QRpyT97y4ei8iif
PYFFK0GkdnmU12fbbkaYyzB3FYjU/W3wuWOPH7bBe0fe7spWMDKAtsPgC2w0iMDm7jCcwzYCeSSoAVEoY0LsvLHouvrH5UJpJCpPneBKkAOPOC048IHhW0gfmHPN63cBjAT+LFBPREcdfC3p1wJv6d0Y64dU1FVuXu8hW2MTE5R3O0Csbk4Re9fZ4H5zpihHOT3zujbCoeE65agnfKxIrYZ4kdPKdM0IrmgjV4IBEQUAPXRXKT7EDKoA/0NKA+gQ
9LQ2j0vQKi+oA6L/YAk42LxwC4v0MuwAEvRL0ECZHzZ9kdT7EGZStQZ3T9AA0rRR72eAx98yoTkv9rJS8YvNLzi/yEDL/QqEvQYiy+3b7KzqMTPKj3ABbgxwNIiywMAIQBxzSz4Wn7AGkJF7JzS4PC9I7pG4QQQL6C3VZgqeRnVwxK2Wu6OQUaIX1DJzgnYhYnjm11c8ULfj3tc2rnd1geipLz/VvNzjWx8+11DDXE+OnO2WCOSq706JKBbQK+aJ
AFPtIitQn/01rfIjXJ+QRl37tsU+YjIdiFLB2ktUBmqOUEYgNm+uF1nCAcrTytscvbZ1y9dPzJd2Pdn/L5rV9nDBVUBFvCrxHcn7nK2ftVAFAAcDMgFADNQHA86aJN6vZ2bfVzruOCLaw7ZsTPKCcCHD2uF36kNcBKqEoUXOLH8nU3fXHLd7cc+vDy3692Hzx4G+vHTh0JuXX7hV61f23z//lcspFoJzyrGDUNi9b5ov2WWy7NMvcwF+T1m+rgZK
Lm+F6VQMACPitdIhigfaAKB8kAB0Ajza8nAKB8nK4bOmccAjYMHbAfi7Pqxgf3AJB/VQuQDB+TscHzQCPiSHyh+NnyUy2e1vQo2S3Urzb7lP0rQr0B8gfmHxB/Gw0H6TxI8hH+h/Ef4d2M9+avb99VJUtwJ0A84xAE7GB73+xMhootuWSkbPZ7qY9X3wlGVJlxbkzRtGQX563CGHjj59Bbvjd0VtbXepzc/Wrh7w8+E1Tz2aenv4T+8sD3Et5B5e
tLjre+JqGzJs8e6XjnPc0EfxDBbufE84Rcl5uJWGvcTccKvEIFiL1sXHx/tmh8zsTHxh8+gFALUDF08H0R9VnyH6h+MfdYOB9RfCADF9xfHH4h+JfJH02PPRWR2Svvx585081snZ7y80fxR4K/9nEgOF96soH6l9YfEANF+xfkZ9l96sXH1288fMURLlJx3GI0DKAzAB0Auw8h+XkxbDQmT2g+1yFVJ6z2d7j2VB6m0tCNmzn+qtqfCe5p8Lonj4
gdkLnrxxt89XG0TuC3JOyddhPotxE9WfUT5LdetoLo6i+u49xGiCmFos3uiSI6G9dgryCHUGL+CL6m/iLxF35/CH8IDvxa9cRxIfIv6AHV+RskX6B/w0rX4OftfurJ1+kv6vBD8YfjX8x8w/WXwh8dfuX6y++pbT22PPC9b2V88vsGb2Otv1X+2+1fKXwAhpf0PzKCw/+APF+cfOP11/LnPb8q99vEgAbuJARuy7Am7ZuxbtW7Nu2ydir0rUHtww
ik+JqzT9Jk41R1yx7ecia10Iju5jNj4GRWZ4ni95Rm8fMYdGqX52Ag13aY36hbfFzzt/c3Xr5xt41xp0d+mnJ76d+4H4vcG9U7ob+BPeut30mM/PNoEvycJjNSk9iSrVmRv5aXjS3u+nRF+m8d750GveYD4h3xMSD5ZRb0Ztu97osJ/d4HhvpGBsllGLyRv/W36vxUdnxADueIsavdIB/r8Z/Nbdohv3CfR/cFXa5UQ/yXLi26DL7q+xQ8b71DwD
u0PRS94OR0b3lD454+WvOEbtKDzzPT+S38hCBUbNN9SVL1l80OHtdl+0OvmSQzGHEPv9xIAuXHsG5ceXQxyMefAYx+rORegV8tEAHBf5UOIP2Fcg+jrES9+X54Z7g52BhDnaRWEVwi5bL+OwkNWRWLTFh+uqCX66I/HntfjleDDeV6MsxvMBsploo8SOqVdOfugBr2nVAH0qShIJrq8CUt+p0Fo4hAqBWkmzNdhSNjfdeOnSlviLvkUAmu9OBOzc
+uMb9sBlcddTjyllOnzdwLoE8hekLczPnb9HDl80nfiXt25iaNbrpG810PnkKlo/Vn3oltN0j8BcpBNMedpC9wjmH9Ijtyd6KGH1vOjH8wfhAAUfg18afk18oPrh82PgR8sfgj8Wfkj8VCHICofix9lAYjxVAQl9Zzkl9SPnbd2niV8Oxm8JG3j083bn09ZSAM8GPuh95AYgBafroCtePh8XlPD9UAIj9Gpn242fuM9P5uHMNYHVB8ANv94gJ5gx
PlMdCDC+dHZvMdosGetJprWQqKJtN6hNxoMEDAN5IHrARbEXNfgGeYPBPMcsjPOYrmkBdd3vp993idMO7sZ8nlppkXlsGV7fhTtHfvBcrvtk1SfG1sLOoCBiKL+c0nhmoy4Ii4aEJ5Z85F+9EWpjcY9JKQm2gB9L0rDwcPm4DQ2MHZ4wKx99ARU9D5iBQUqPoEdzNph9fOTFTAQT94VBYCQ0k29enpCV7AZMD5gbB8KnthlfAZI97tgEDJnlelii
hrA3trCBcAIS52gPnYbYKeRmgJ8ASXthtursSZXBHzQcohs9CjJFhcpN35IwG6I/9kJ1zoDMcK4PignvqYM+Eq9xVgQnhC4H/tGUhccnKnpM93qBdygdQD3nCE8Tvr3czvpZ93jsXtPjoVgUgJwFkLjLN/GPk0Pfu45MME+YUJrT43vNbYtzGnIpQq3tQ/v9cqJvAD8XElRJAOaBmQCjFtQC7AYcGZs0THAA5gCbspgB5tJAHMAWgHoYZYJ7ARgL
UBIYDe82Dt5sqTpDdP/MyBacJ7AJgCZZbYEYBPYJIBsABQoO5sChBgM0AkLmjcOJnrsEpFbB9ALbBmgIkAIcBMBmQMcBpclDhacLgAXYGMdZYOGQ1htidjqkDcSiJcBgJLUBpEDjg4ACvoW8swAIEnVBJAEYAWgQ7s0OoId/vhB0ZurbIRlMF9F5gTcbgRIABQUKDoNqKCIgd+oc+OstslPkYSKPrc6Eo6VFVOOV1mK3BZvlNcrsm6M8tkUCd3mQ
DpEpYc27r69KgUdd8Qc896AbBcGgdacbPtk1JADdc3frI873oU0sFgMpSmh3VPaPBINgo4xBgb58xtjKwRgRMgcwVID+TtRcJgdERfyJSUTwSYDSVvZEHbrkcnbvkcXbjW4F9lS0IANqA7gQ8CJgE8DO0K8CoIGKxPgXUdzbmeClzpcClXtcCVXlKCpQbKD5Qc0BFQWwBlQaqDtQOqDbQWL8TznRR7RtsN8DPndjDl0R+oMkB9skSBRIDko/vEqh
AQIwkrVEG4PqCR5E9vvg55I98PTGqoaKB68zfnt8M9tYUs9pBdeNrb9CQXUDIxoJt3nswDyQdyF7Pr611eh4F0FvG8Z7iFZRIdCN7EJnBIwFOUnOt589UrG0MwZH9cbqGcQvgGYt7kOUE1on9s1jx4WKPpcbdkcAyIY30czLX1K4EJRISJv52hq2YpLlX8jPEUlkhkv8SClbAoANxg4ABDhNAPEBbYLew6oP9BZYDwAEAL0BYvh2gtLhqtaEIxpR
5HTQYFghguZoP9r1k+soLMShArmnNTkted2vEwkMFMzZAwveZCHg5C6/iQ90AM+DJAPcC1Xm+DngZ+D3gT+CO/pmEKmLAJF+LthLRGFdYoabNDXoo4jpMlCc8AktqfOxQ1wB+dpViDQ5/kADv1l/83ZllcIUhI9fZjeFAAaMNgASVdQAWBtlHhACIAMTRW0NgBNAPoAvCissEAZlFwFmaZCyJDkzkpWkRdNwIlVOp8K4DxAdMGc01HLdl6IT48sQ
d68cQfc8aAcd9hwRxCGAfgdxwSPEvWqlEqQXLdN+Lj1sjEyCdpMkxIWiRR3PlH8frsIC/rt+8MwZA4fqNA54RvuCU2jIC95vNsmxLj9HqEW5yPu9FOXqV8MplYCKvgcC6PjV9FNGjDWfoBC2jsBDFodqBnIa5D3IZ5DvIb5D/IYFDsAMFDcYvuMeris9nHimMkXO4FwrMCCipID4wQVsd1JoZV+bJao/9oOs69qc9PoIJxT8DIp/nrAhiAXtNSAX
p9yAaVtKAXc8ASl3dqgT3dagW9C4Lh9Crrtk1WXKPcfCtlVaQXODuwBANo0G98dpClRX3nUJ2TAJ4NwTdoeQaaMCJgs1/MlFoxgK00IbjkUJAJKDpQeBCFQdUAlQSqC1Qeyc/YctUGjrqD9QYaDjQaaDzQf0BLQdaDI4eKCkqI6DnQa6D3QZ6CpgN6DfQf6DAwVid0bvaDn1GGCIwVGDEgDGCbrPYAEwUmCUwRSdgwRjcYYTuCANCpDKLkfEQjAW
D0AFuAvYVMAfYRwt8JjFsAOha9aaCEsLYgkDEtjWljIHXc/mHBE1fi8UgQZc0bodykewRQC+wUZ8noTb9oLiLdOIc6s3nqBNonu3MNcl6sviAyZWaFndffnApegRkYrkByCQ/j59FIVuDhNFmD87vq1o/geDwzhWIGRgnkiclU9VCD/D0YdW9J9tjCSWjeCqVgUdXbg+C63E+CaYW5CPIV5DmAD5C/IQFCgoYPDLtpT9oiIAiyYZDFePhz9+PvOp
Y4QaDpEEaCTQWaC91MnCNYFaCbQSg4xHiecAOHtksQvzU4YMT0Q4Ops+IBocNVgGFuyFVps4q99p7BiV6hEXNV3B0RdsFpAsMEwkPRNu9dPrt9fHhb9M9txts9mxCd4eZ8iQedcL3rA025uSCvgT9Du5mgBLBHtEQRmxEPLJqk8cCeM5Ib9cuQdDDn4VIsI1ibJxgQos6LrR4dIXqE+ETJCTjkuY55AksNVjGZxEfpdm4BX9q1qV061rlCf7iQUX
wSVD3wS8DWgG8DvwTojivB102TPgQPTJzRKMCGhDLk1Dywi1D1NgYtyUClCElhUth8LtgIOh7oFugNCq/KutZZvX9YES5D4EfTCkEYzDUESzD0EQkimZvzZIAjjgXko3sWHgN0hukN0inpkjxuluENVhe5pJHSk+MvFc2KMgIpOJeYrRC2EXZh/8gUrxUPZof46Eb/9xobldJoRxUxllxV5ocsiQ5iACFoQQjR6voBwUFMA4ABMBf4e7CYtsaoZr
qUs2ZnxkbEnL9nABVJ9AgVJMJtxEzhuVILhsvDObsUDuwVE0ygQd8rfkojaAexC9YaODuIYfCmge3N9AKfCKfIXBOkc7CQTi2CE3g4w8CBKELsFMpOQY/DcyjC9RSDHpHOvECP4UjChaqPQdwA+l4AMmcLbgOJO4N65N5hSjSAFSjv0jSitQDkBlAAVglgePs8fjW9QEZR9nbjBk+XrR823iKUVCIyjmUbdFWUcEA6Udx8/AXgjKYcciJAJnCXQW
6CPQV6C6cAXDF9LpRzDMx1v1DmMIFoiiDEHVZyIc8iHaGzd7TCxE2BBHt1VngsoHIMoVoiJAiCBvI3qLkFthk5lIHIWROwTIiGIXIj9vpb8BbqCjnoXQDXoZCiD4S3Nnfl60KnmwDfoUJ5gkuhMugc1YZMvXs3PoWQkIP6gsymItcntYj8UQPhI/uQ1VIXmCnTI4jt7kottIYxd8mKYs7UenAHURnAElu9Q3UZQYPUcuBAkcuViZl/dKkcBV11oV
DioY8CyoTEivwR8D4kX5cDuppMLVLJMkICeMPJtFDiwoN1U0bnM4lCU1Bkf0l0HjBYwEDmMrMvf9UgEKYWbDthp0AngJLnMkpZqEi11tUjqYbUi6YYgjkEUzC0EVpcP9FYE9SABwwOmEtZ0RWk4/NTRwYXhV2Hin8oLPcBposGgAOou07egksYlI4wo+D3VHYIu1Url0NhHhldv/uKs8uIMtyYf+sZHtX8lHvsi0MVqAk4ijQn2snRSAPbtNoTci
nRhaMcxkaiHgJCdTUQwjdmoZCwQUbNWwactvkSc9nxjpM/kV2DVYWvD1YRvCMDke8njioiRwQ78oUeGjeIZjodHq0Dkxk4x85OghbYd0DI6miiN+LlF/HKWNM0VC8YTm7CkqIHCwIVbA5QSHCw4bBD4IY3D0bpM1GHISjD9EhZEYXIsyUerxmgDNAmUXABqUV3Q2UTKih9ikVrMRKjwxPZjpURyigEZk4sYWfMcYbsDyvqT8ezuT9I5EcDnMZSjb
MSyj3MeyiCsOcDIoiml/ARglw5mwBars1docIkIFDno8A9I4ht+FAJNBnWDXvntltnFvx8qPPD1JrHAlVgQCtTthCHGlJMUQIZCnRivDImoA0/UQojDvoGjt4T3xd4frCxwYPcYUeSDm3tGi9EQXBGROswPdiCcmzrJixQmJF8ggIsfvlmihgS3CZuvngKMOMD/bP9AAEGgAlAdMC5kE5jsGBtjUAFti8PjMDFtugg5dFC0oApJiZTlsDWzvyjbw
YKjKvgK8QsQysJAOtjEAJtipgUdidsQBDcET181zt3CIAErtsAAzhMABrBWtkPD/wrY1cgvkY3gOCpgQeMoV0ZkpzkhyY8jKdi/iC/wp7FViLAorIHQhzR64P8RpEZc8fUXdD5EcxDFEaxCwUbxiQ0fxiw0SG8hMSkB1YqJi6QQXB+wKD4Q9vFVAYRYkvqIfpYLC7C8US7scqICcZViv0SUeZinTGtj9sdgAosY5jNAe9gJcVLjPMSdj4Fudi3EA
xp2BtdiKPu2MqPhooHscFi75sTC9sW9iWFPLiYsUfs5Ub9iunOHNmABUUtwNGdgUGWDMohAgsgj8AEPHgYAXkscXkZCNd3IJJU4DNFgTip8XRNqV7XpjiK4FKpKpPVjUoeiC/6rdDSgdiDgUQGjycUGjwUeQM94Zacbppd8Jwe3MmMoNiuFhRhyhGuBFMc+8BgWr1FILbI2cUpiRAXk9FsQ9IIOqmURccisLMSoRXsQgA0AJLjaURyjagOZFyqBV
h6Uf/Cm8S3jjcR3jwgF3j1EIrizsT2sVceSYnLMAifMVeC63rjDOxiT8hUVV8nsfR8XsXLi28QgBB8eehOACPjvsfFj5UYlj/seXCYvpXDq4XGC64cmDk7rhsQ9pOg4vI590IVs8XkdjNzkJU0K4MUjeEckB9IUr8PLIu0DXOHBqgo505cCJQDEI1ieejjUCBnHiaFgniOsY/JVESnj+7iSCXDnTiAavacx7hZ0U5lYJUmCCdXvoi5KmnVZmbrzj
5Qvzj8ytIt80R3CMWmWUkHE4iGLmaEU/npCe6t/ijIQUjOTBs8gCfkZg0C2iiZg4t20Q5cT0flCakbTCEEQzCUEczDWYYzMR0buD4JMNQLEKr1p0aw9wrkMiEoa1DckeKFKmgktY4siAbYfwRRNDlDF/nlDl/gVCIkb2iPwf2iKoUOjX2okjx5IQY1CrNN5jDbNh1lUNhlhf9V+olC2oXkiOoe15VnHApISGxdl1uUi5HtBj0rsNCYMaND1kYhiJ
oSMttkUACMMZMMb+mADwNotCAaEyRPgNIgxMPbiGbAKYIdrnhmbH6g/caairBHLoe1mcl+CJCCZWI4gNPtLDmMZHjsdtHi1YbzdOMZVtuMVBdOsXATusQJjacWSDMdPKkZwV4dUAIA5CngXir4YcBrbDWE/gKShsUQ/CFIXzjx8gSiZunjhrEqtjLjHKMYAPIRCEPKlN5mKVYAKsThALNwx9j6kMYX6lLweStzAVrjXIjrjF9ivj9cZsSVieuMdi
bKikMez8FUVId96L4ArYNUAJgPoAPDgRjJTlvIoWpYhNprmhgQTN0MlBVpM+FGYV3uCxVWgxQs+IQC64NVjscWHjOaBHiSFhiDS5nUSDPv49+wVvDTPkniG5vATzvogTL3lk125sstUCXd94yi4x1ZHX1buFq5N0q98j9LNihAcXkpiZlVtQUlRj8ZGDowbGDa4VSR64WnCndpEdjMYe4KLqD8G8bLjDcYdiVARwAt8cPie8YFI+8QdiPsVKSZST
vjOUXsSQrGPiewBPirsReCFascS/MacT7sYTCRUTI0FSZKSFgSqTu8fcSfsaucLcf9jPgKWdgQPLtpEPcBbYJgBjgBwAoIM9pmAJgAUCcxkfgXhQpVBYIqwnLIyUlgTJpoX0AQKfhyhqzRs+MLCn0MNQG4OPJ0UIuY12kxidsocBKbqZcK4IKZ4QdUSU9kTiY8fdDICQdcBwdrCfKqE8qcfUD2iUwDOiSkBmOmwDSDhbDE1HWZF/OtI2IoyTJsTn
JoAt8RoBnNjlMem8cyNz45ApLpfBL3sqLpId7apWgYvvUB+gPoBggSMBpEFMARgMChEgLgBMANl4OmILp1YFQwpVHxAjmnVZiQAjsz9FWRpIIhB3AqDCIScNQk5poTfgAa8AOH/jQCWntwCcdMSyRUDsSUODg0RCjqcYXsNET80tEZjpFnqbCHKFVYRkDJtihPCB1/GuAOya58R5nX1scCiDCCbODiCbmiefO7pUUdFFyCab0t5hpCmLs4jy0cl0
8Fm0kayPeT8LufcOltZCq1q2juCTsjyutLMelt0FVykND9kcxTZSOVRjCMoBKhInFw5txhVoRDhSAO0A2AEBSMsbhtyUjMcrMvcBc1OOBWEWPYPTCCoLkHmYjmvHsKiemSk9vmTvHqvDAUbHj/UVASmicoiWiXxjqyTTjayUfDyQVcjs8fd8BOKmZjpL1s0lGAUyLE2Ygvv2SK8Vi4hyUJElQgJx9EIsT1eF2h+DjJZdsb5TyAPEiDibbddSfbd9
SXPj/MYvjziVS09cZgjk4jkAgqdaT98ebj00otDZYEYB4gJgAZQBMBf8ro9RKdWldwavFCCJHBH8YX0jnhBw/mFcgXTjrItVPPJYSVUSUSVHjNKc1imIY80bDnpSKcQZSqyVxDjKY0CM8eSC8qYzjLYTzZ8UHmTffl51k0XBTFIDvJxqRDDmSXuls0ShSI/p6ZaaJp5vKddsAVLtiUeH6SuUfsTp8ey8+UZriBUT9El8Y9i4qaKikjg8ocESlTbS
WlTFUegAeAHAAeAKRlcAAeV0iZTFFVlBxaUuWYqMSeTcwiVozbFJ4IclXECUDXFroSxjvUbUT2MfUTbnliS8QTrDKyd+SjKb+SeIZ0SIwPCiYELBZOwBqkQTkH9JIbQRcwrvJ34fNT+BsQ0SLoR4SKC/955qKSxcUsSDItcZ1CH6TyAP/DNiUzSvMZjDDqb5jIqYaTTqTFTb5v09nsVgi5RuzSbqawUD8b19w5nABlAP9AIcM0BCAAMcPqVNMr7l
MEa7jSZoKbAtNZuc0AOE15hJOGS6MazdT8BDT1Kf8i2MVpTiyTpTSyR+TEaQSDkab1TUadCiBqR5CdXsBTkKYJDkmECByULZTlboptPaCItFINsFy8VDCFsTYjSLvVC6+iKTpAWKSSuAmgSYJ3BmaZvMhLDIBNqLtT1SUtseUSAjuabdiIEWcTjSRT9LqTHTk6fHTkqeLTUqXbVCMsyAxgNgAldjgBpbiJSwQqi50+O4EZVOAgXBP9S9fgnxtsPn
lSie0QCUPVSOwU+SLDuvC4aZvCEaRWTbacni2iX1TDYVe8QqughMaeGAIAtYgsouqk8iV2SBJCbI9sPfD5IYtSQ6TmiVqa/xK3rs0NqVUBbidLBr4msSOaYcS9ScV8DSSdTr5jYDDgULSIAGfTq2LFjk0qXS7qeXSsGEYBC6K9p3SZ1cxvv+Ejnks42KPnIRIHJNyqaq1lwBjMYLHodAyBaQB6ZDTCcdDTzaSTj2qSxDOqYnjKcXbT94Q7TBMejS
wqhG9foVxp13DeY2Bt9cPpn7SjlmCoLEZDCrEXvTlqeGs9EGqpV0nXikXtHSCoRoAoAMQB+SFGjE6dwzeGRQBFgWnSJsQcT8fjdjjqXdi+aXnTLifFTr0tLAhGWcDTcQ8SEsZLT/sdxgRPo0BsAPQB8YAxlOgBtYOAIMAnqTmBagBtCJjgGTR7DGhkgOhYwQZYxZfCeSp4Q90CwidJyMd40EGVGT9EG0E1mHa9dCjr5NPA9JYEMJRlPk1SaiS1T0
9hATLae+Sx6eZNdYZPTQ0fgyOiaZSPIeKcSDqBSyDuBSmtFeYJdAmjgVp0kPTk1onaLNTt6ZYjcUYBstGMOS9EAwRm9uOTO4V7sVHhjAwROaA6oBrAOAOaAfSdUB4gOBJEgP0BPgE6BvagHwdyYGTMkopMqDHxczYvhd3cUx5bXrph+CFMgnxqnwDmlTQuqHEpyYmoS+EuNACcab9UGa1TIma1iQUdAScSTgz4mT+SrTr1inaWnBcmtlVuOBZ1kq
guZvaUmoHYWh4RFiSY5qcH8d6a5k8PG5SDelUzfzuNBamRQS/OnH8IZsn8qyhfdtfNnEtStxovgMpNkSWCyKKTp4qKVwSZLjwT6KfsjGKXh1WKbETelt0tGWOxSYAJxSRoNxT/sS7AOUZ7BacDjAy9uO8toXstaerCDTSnohNno4zFViEsdsCaQrsKiF7Hg68f6ibTWMbIjicS1jScW1jDmZ+TcSeGM1Eee80ackyEIAvSqhHHVE+DSS0Sj2AhIO
LMkKdtRKmSUJs4HydSUXTT1eNxgIcA5McWqPR9WYaz8WgV82XkV9wMjzT76fsDH6UTD4qSayS6TbVT9g9SnwXuppclml+DhjAfwDcArYKNZG9IlpBmUzBFnIkogBnP4YcfLJHGfCAxdAv4YjlhZ4yWkofmNcVXma5YDjga5IlDDiV5AyCShEH8tmSrD+WUWT0GegdGiWWT/Xs/lWiQkyzmdZ9PoXPT/mhZT4yrmEIMRtI2ImvSqGTQQ0ILg0nkaT
SYVlptvmYqFVqa1ou2ZhTaafYli0ZpDmLmWjaCUsA7HskxADlodB5AqoeqBmzR5DEphFjmyrFtx5eZtPJk2SwTqKJtMaCZJckWdJdP7rRSa/st0GKUl4mKdv0WKdey2KRyACWVxTtilOSO3m5goUCkAtckrTkmGlsISD11m4ESBHGbiFnEEr86CDEdlKdyyObryyoaeEyXyQacHoVrCy2TUCTmSjSq2enia2XGNM4LKyWES4xCNsC9afHwsCmZg0
tJjtg1WdqJKmaXwy1sb1P4TICsAMGAZQMHYaOdYBEhHtS+RhayjibfTrWdIyH6dAjPIoLTV8X7BMALRzEhO/S7tkBDD8So8pgC7B+gA+kgUGupNYJoAoALUADgNIhqGKO8Knl1d2YbuSgBlkEKMJ9RxjMMTNaarJXuLL5pOIJlaqTs4NDoVIYHHnIeTCMQzbGT1UzE14k8ALYCtiQCLWs3dC2YKyMGWTisGTASbvhWzTmWnjSQdKyARsQyhsURRS
tDmNbuH6s1eptIccLFg6GQtTPmZuD96cwyeyoPJPdknFEgBwBOgJoAtwPUBmgEIBMAJ7BmgJ0AWVOoRlAP8BmgHSw2YVY0OYXvpo4HOYVwE20ZVqa8IyeRgqKMaQlnFstawf7jOqKdlLOckwtIAa47Oa2TQoU5ypETp8UGdBy8drtc4OaA1BwTbSXobgzU8ZE8guX1iPIZ3NQuTniqwpW83gBzjKhBJ9EXDCyt0rBESORm9+2RUwhJMpt2GWpD6m
YtCHyC7AM2EIANYGDcxgPqz6ANUBr+GMBPYJ8BmoJY0R7AVTRYdYIgwmzMyqbMdFVMpMAVne5iUe4z1Jn8QjSHhCsMGe4aaE6jHXjCB04CcNVVh4IFrqEyCyTsyIma+SombiDgnotyvyUhz7aShy1uRcyWka7TfjpFVMmarhk1KaoNac+9Mxp5Nj9PbCsLs5Tg6VNDQ6ZTTlmIHSzMfXiT6uHMHMGuorYFyASJnABrqs4AXScQBsHPgAQuZ/tLGa
JT8pIfc+/LbkuqDJSjEFnBk4PyE+KAQYq4gfpEeZkk9odJT02ejyiKDeM60vpdB6dc8gUUTzHoTEzsDl1jK2YFykCejSflhrF0mc2T3aWBxS7rjTWea2yCaZdx8CSzpueQwzkuUwyXRPzzryWQSR2cSyVHstZ+DkIBmQNIhGgC7AIcFuBmgK/tnAKOoCuWwA6dsryNOdLInzIhFvvMhBJSPKcVnqhAiYkNQNmk1yryfDyZJHaYCyM7QffpUSxwJb
zMeZn9becgztmdNzewSPSuMaWzj3scy8SVPTEmSZT1ufEBPVt7yIXAzzRoKqsS+A8yGsZ5MGzAc0ueUySyadC9o+bYiruCQYceSD8o6SLz/saQBiMqbsBvjTz66SecxoCyld5LJByLv3MpmWnJkgFxoZ0DpgA9GBykGZBypuU1iCebBy3ycTzHnqKzx+eKz8ScSCLrpojRNuhzxNrTz4nlkzyzHzC54r7SaCDHEX9LZ0g6ZHyoiUpDzBBjjrRifS
SuFEAoAAsxdsbqAYIKQL8vtyjxGbyis6VIyc6UaS7WSaT6juQKSBX6ThOYq8KYWJzFoRMAIcJq8twJIA7NrUA+8nABtQAcBqgD9sNYEIBsAM4Ag2T6BNOduz3RPPI3vAXcTycaR4kteUXuLngzOXxA8BS6cpINMgDXI7BHEBAE0+IcABlEQQ82W5ySgeiSHefsz48T5yjmd1TluQgSoBf+SYBYVh4gGDiqQaQcbmRXs90XEonKb79QTnQcyLOKQg
/kwcByTbE+2UDMKmMaoz/jdzC0aOzcKdIN4WS4j97lGSDVNITRNKfowBMYKBQnSkdlhYL62n1y9BS/plVCm8ZBlZDEWe/dgkbJc0Wdf0j0Qlwr2bizGhViz1QhxTH2cK5FobbtIIHMBiAFNVOgK3BBgD0BOgP0BtQDzg5gKSSUHEMyrGamZ+IOnI8wuvZ05tWC+IDN1XEAWEK4GZy4gHthTbEJJxiZcMfmPcAsci0kC+NYI7eeb9POcWyOqaPyeM
c4LyeXgzKeR7zpWUXyySSBS3rH4KmcdvgrRKBy2Bizypqf7o8Ltst9ORHyymfr0LuVdwXvAlUheRwyi0SkLIZkjMp2Zfc4gBWZELKfdrRp6MygCBxhvOIiyKM9NW+puylgMmp4tuAglvtsZ0kTx413qbZ05PQgOBBwTqhSEEj2bZCyumezmheizL2Zizb2diz2hZvdOhUSyn2YRkNYEYBjgP9AFyc4B+gJrl4wPJz2gBDhq0fmkAsCryG6Rzg/LC
JAMFme4MIXvhwDtGTLQu1xtED3TEyRAsTZAWFLymmSN5CJosyX4huBKZz++fmzCybYLtKfYLdKbcLmibATDKRTz3eUSTYxp4KqWRG8myeQdkQViF9uSNAk0evTF6eDUtZAlyd+X98+eXgL6loNQMueHM5gOzJotLLAZQZDob2F4oOALbAeAOoYcuXIK6ueFhM4MPIyGYZDLVDAFNRRIp+yumipPHRRnikRTbydCFUXIBxnURcLGIXsyhWQczHBaA
L7hRPy3eatznhTPziDr6L0mZ8K5wXQRDgAJxcmRuQxGQTSWcbbIzYmdzw/qly9sOPIHEfCLQWeRT0hbbNIKavl0PI2KHyYmtvus7tiujZC6haizz2eyKKui0KYMcESgiXiz72YSz8wSo9jgLLBegCuBpEAOpP2YD8aUuwNSYtkoVhXhd5KZgpzzm7iYOO2DjabjyNKf/yYObNygBU7ySeePSluQ8KVuRd8qeWhzPBV8S3hW7TjTOtdAWJGg2IvrT
QxXdwFCjHE+ydvye2aICKabGKUgdqzRcfYl/bIFT/KTLiJAIxLgqcxz06TQLM6bPjs6dy98YYFiW3hcSLqTI1WJU6yP5twLXWYtZOMLpY6oJtzvidLJHZvVxYENRRZ5B3yX+Yng5dOBxAWP2AghbDyn0HVSeuEYcvUX/ywCTNyNYfDSEJbEykachLXBX+TWFsZ14gN8csJb0SsLAr5VVivxKGQTT0LIcAY4JGKKJZXiYxXEKaJYQL8cltTmJSFLr
qVQL9qd5iuadxL6BbxKr5razuObYCtGKFiGjmax2BSoybSVHck4uo9jgJgARLBMBgdkAzl3EWLCPI6VUXD3V26cVEJSK4IRqO9NU+NXEtJhBKXOcrDrBQCjdmYTzHRVbTneQG83RY8KPRdALmtvA0umZhy/9mHwWlm3VknkRKawjAyccFvzu2dCdKJbgLApZAFaJcLz6JfTSYTKLSwpQAiRaeEAr6RIyNcYT958ZYCEpdYCkpU/S+ObtKGaWoBtp
T4C4sZ/TspeHNFKtjoYtIBAlaZ50cZpwkHQprNgfmpKJkEqodaWp5tBTANEGc1KTDl49TaQWz7RRbSupdEyLJS7z/OchyBpe4KhpXPSaEfWzkxt0JYEI+sxIWugJISC810IGFFHCtAsBWCKAzgfSPeqtLgpU+DY6SnTg7EnS46YN8DpbQLYpcdKoqXxKzqbrjeOfrjGZfTKxac6y+Ps8Se4X0yDgOJhqOkrSpVKn4Z0G/x7fNosDOR3TVVhWk7bA
RC9JX3SDJRt9LljaK2pWbSOpYALHefByx+T2LwBZPynhZ6KAKVuNZWUalBlGqtC8Z6M22XBS/9kfpA+eRLFpf5KUuTHzqJdTLcwTGtOGS/TL6btjX6SzKuJRFSeJQ28zpQTCmBfnSZGkHKBZWJL1GSo9BgMoBWgGRkKABhz8qQ3SVgUbInQhijxZuWKVnhAhoGcpNC5WNBcZWCwwZb8jf+QPzoJaZKGiTcLraYhKyeb2KAuf2LzZR4KPIdLdMZUz
jnrkHpBMg8ynGEdyionPJbZa7K03u7K9+WHSVxX8AaZQoyeGXwyGZYIz55eeDCvmxyrWWHLifpzL+aTxy7Ac/TZ5UozRJVcDxJcLKagDwBRZJIBPYJoAlOfUBzQCMBGgOM5uDlQj4gKN8JZIqLv9iwikkYlDW+T2t/qUqdOucRRIRvqKEBHRZw9jCzJMTZznFDsc9nBs9E+FOtEOJNzq5SZKh+YZ8R+Q3LLJRPTm5cjLW5YNKadnPTgqY2SfeY3U
ZFIsYCCXPFKfA5lMCTzYzuTEKSCRUwfgKfcExSSzasrLBMAICA/STfypjn8B/gUGEJPvHxp5ZrScot+cFoFvwM/jrIK5YZLWxb6i2qdcLMGc6L9Ka6Keqf1KsFajKcFehy4UQJDjTKLMFejpK8ZXgYlWQ71g2lQrGWGRy6FfkzEhb7LdWafFTyN2IzWNfErFT2Jg5TPjQ5XFLw5dR9ZGUJL6jhjA7FTYq45YfKE5YtCDgP9BtXsQAvISTAhAPftM
AM4BacC9p4gPUA6oEQzi+bVyqGICBz2KZcI+PlpeoP9T6bi95B5DfdBCDAMHOhaKJPj4driroUJFFZl4FMIt1PugCq5baL8eTBKzJaPSEZb1KFFShLCSdgr7JVGieiXddNtP8dcDJkZlmP8LAXjtlnOQ7KYFNuYgBrTFFxavc8BWxcHGT7KQtqfyVHqI1ZYBrBpEFuAFeErThTIcNShHhC6FXs0Vnl9R9ZKapyYggsE2XNBwJZXLIJVDK7RTDSMS
Qe8UFT1Ly2X1LWlW4K7JW4d4gCJitufd8loJ207bEGKfPDDzRlTnJwEKlsZMe8zSmSyTwRbELwrLjgwVQCzsKcgV52C7SWad3okVQ4qYpU4r2ZbzSuORKNYqTzL4qXJoXaRwLu3moy/sSo9tGp0B6ABQBpgJcAYAI0BHrIMACxNIgYAPDFiTv9z8Yrhtkld+cA2ux40AWoK4tm4I/DBMgHGj3SClZiV9nMUq9KprLeALrzXEJBSLznlQjJQgrnyb
XLh+SWzUFYjLnlTZKpWTPyBsV0rqQX8dOljgQUmMSFJqUMr4IFohIWvMYZoqItQRZCqKZalyoOMngGFSo83tn0BzQL0BuMEVL6mnhQtldtgt+K4I+oWoLo2Zs8CyCx485pVFctuDKrBVz0blWgyrhdYcZFRqrmlS4KCSa8rqdvZKGcV8q2gb2BcJVKrzVexQw3Oq0dOb5K3ZUtSZiahTaFbCq1pbCKNpbNtzWDGUzbvvsG1eirLWdTlnFRvKI5fx
LhUdHL6jnJpG1c0cLgVlKXWcfLxhRFoDNhrAYALTgRgDZp6gJIAxgMcAZYOfKs1WsNZhZyq9Akt98/pkZoHieT5jIRRBBIf99Sv7jWGP+JdecEk7+StcginArIZXyy41XrLYJQbL5ueWS0FUhKMFe6KlFW8qoyk/Krmf4xRxYmpQWrki/pcQYxoEWqSDOfptFZEKXKV8yjFe5SZldWq1xcCz41hOyqhUn8d7rzMz1ShAL1Zp5MlKaFD2bUK7BvUK
LxY0KMWUBseRUoIcWTeL7xXyKnxYtChAIMAWSPdZGgA5ssYL0BJALLA4AJgBuMEYBkpHad/SSXyrGUaRJtlJw+wLRQ6av9S0JKfdh8NWj5Zf7iDRYXK4/JA4LgIxtgaJmTxVRyhcyec9XObGq6laqrkFeqrHlYhy31YorUJQOKLmczT9VX6LF+TIpvTIAdhlD1yARTnIDZNOER5QtKx5eWrjFcqpZ4jCLbuUnFmQHAABQfoB/oIMAUNvEB2NZYB8
AAeVzQM4AMqfmKqGA2DyUlITd5E1zDoQXKvqept64KXFjDosz6xXuLSKc2LIKJsz4FbUrB+cPS9NfXKDNXEyjNS8rbJRmr3ld0T45O8LBHH+rBIQSFDpAyY7NUGL0yrNM1mNCLR5b98lpQFLEunnIENVQSS0VpCUNVuLtfDlqSKZzQyKVDMEWYyL8NSuVCNWyLiNRyLSNVyLcuCsilkXezqNYsrFofUBCAOaAMYOaAOAAcBr+cVLd9MGg8QlaoZJ
Ci5FZO3TTgH38qEtKs7xpGr1vp3y1KVcrb1TpqkFZiTGlSALSeWKzGFu+qTNW3K0ZehzphV3LLYYXBgkkKYHmZENEXAMo/9jeMplVRLaFZ5qo1gnzQpqPQRJQFTEqUxLHoqFSV5TfS15R2q8YV2quZYJL8VQXT0AHjq98Y9KR1c+yV/pZIRTp7A4AHADrkeLhINPDt/0THAwOpbJ26QShksH2AglGmSwWPpK15J9rjDjGrPxpIr2xV5zhWV2KgdW
AKQdcZq2lcor7JWO9s1QU0rzAYgyJeary4HZ1qgnECJiR8yEWlHyK1ZTLawsNr5lfjcLFVdSE6f/Cdqa2rV5e2qsVTazzpbiqBaTvKrpS7qfFaJy/Fa6zCAAcBBgAYzPgBPoPqaXF0HhgsM1lZlJroXEi0tNEczFWQN3Gcr1emDSmpZcqWpZccdZdDLblXYKOxQ4LZFV1T5FamrIBTVqI0XPSGyfqqSGbKpU0f8rnuNQc+tur1qbpmy0dctKhtV5
qzFQsq61d/C9pU7rzbgyM7pWazqBQdS21YGkOZZTqt5clL2WkPqB9QfLA9WSrFoZ8AKAJ0AfsJcBacN4LeQeLg8qPaMDfi4IPBIscuiJGTmaPwQ8qJ9RvvgbSyCGzcf+d9qoOTXK/tfcr9NU0qnlS0rtVY7T0JR5CgKdDqHPtJCXTucdffoRtcCVlCw+B3rBtTbru9cfyqOX7K+ZcXSyBXTL4DZFKWORnTHFexz15RTrXFVHK5GbTraZUXTmZQHq
uBUHrj5Wj0twCkAtwNUAOACuqd9W0Q1mEqt4JKAowBqpKT9Yu0CQIhZoHPUII1fnBJdQ1StZTUq89XeqABQ+q4ZcAKTPt2Ky9dZK01ZXqhMfEBzKbXqhsVYJHSmMSpMQdySaUCrauDEd8qMLjXNf1rx5VbrHVZjqaZbHKdpcYaidUfNUDRir0DeTqF8ZvK3FTTqY5QHKGdYLL8EcfLcQBQBpEP9BldrE85JbvoZVBuZJdPrzpPv9SYNBYw1Ctdwe
hLpLDabwavtTnrUSe5yYZUWzE1d5yS9dgzjZWrrqtTqqLmUNSddd3KTxmJpw+b78i+q1Y8DLpghKOAaPZfvzIDVjqT+X3rP0ooyl5TtK95Q0azDeayLDRPqOnlPqsDRdL7WbgamjcIzF9UQbl9a6z51f9BSAJny5lpoANYPTj3IexqtwLbBOgBl92VUHVYjDstbLOMowOBCRbQmpLMyUJArOVaoXNar91JkAr6rN0IHaAwhdCpArMFMpNADkwkJF
QKypFUkaldSkbfOTAYTZX2Kwde0q3DnDAf1Yaq/7N6t88bscVDenhtFSHyP+PB4zdRCrd6ZbqPNXK5qjTAb9ta6z+whDgXYEYAxgN9CaDb4bVHL6g2WFqUMjPsqi0uigfBJnx4JJltRFbfro1UVqBDb9rStf9qHla/rDNW8aW5R8bNdV8bkVfIbtucqog1rarffrhdijRKRgkm8zINTzyn4RUaw6ZENbdd5qkheWN1eJ4rbovYrA5V4rIpjbdzDZ
xK0DWTqPdZxzEpd7rt5SlLn6bKbrFUqaRni0dVGRLShjcfKDgP0BUTdqBBgJvRqgJWMxgI0A0TZdZtrC7B5RS/L+NWs0FfP/13bEVJZfG7iWDex4sghjjxNKZjr9dwt+KOYsilVQZ81apTkmAkBpVM3ACFiSY7jR5yHjfzcnRcmq39eXr1EZkav9XcAfjfTzelRphBTMnwo9ixoE9eobF6RUsAtiUz6GeTLtbpWqu9XCadWXM1/sRMBegHBs4AI0
BcuR9TPLBaNFTuswE+E+MWDdkpHEK5YlwOnAlKU+dGpYxj2UimaEjQmr0zd1L6TZVrGTZgrmTZ+roSn8RZWUYgh8D3VG9aNAwVQTT88lWZeTWTL7VQ2brdflpBPDTLrifBBKSj/D7zcvLWOaTr3dTsDsVVqayftTrfdVcTHzUSrMpbdSnpf9jcucJBbYNUB6gBjAO8GwAYAGMKdcmibacLcAljQeNcCA2Dk8Bs8nRus4AJeoLOqGRhhTDJDaqScB
ClVxpozflrrSLKqCyHSYkQIqr5zQXqHRUXqMzRVqrJVVqP9QQzkmcZACzfddF+aXdmdGkDWefZlPJtYlADjNFyjRPLKaeKaoDcOyajYnzFobTgYAEIAhheaBEgJSCMTWs1+/BHABvDGZvTO6dnkfkZp5EeSBlM3SQmZEaQrJnrZze8VtZdpqStRxi1VeVqVzUxa1zaDqNdZuaPCsGhZWWUJLir1rzVbZrBFmyxLBEOyhTdgLpicYrzLpfDoDS2bp
Tf3qbpVsSB1ZU959VFaViTFb2JWIzx9W7rJ9R+avdV+a8VT+b4qXeaYrcSruvl/To7s+o59LThOcM4BoUJoBZYJIB6gCMAyDaCg5gGyQHpsAE11f3I+rjmMREitEXuNXyi0iztogeRRaKKuKYBieqCRBhrtEID9sNVJAaLfGq0zVQD4JYDrG5cDqPmo5b01VXq4xrxAOLYAhF+StFEjOrJcOfC4YzbOK60nGiRLfobPZRjrYTSNrWSXhSaCYSLxt
fvdRrVhqP+FJBOCcezq/iRrsWe9bBoZtqJBGRq/OntrWzSo99ADNBGgOrl2gATpacPQBZYAlk4AG8BBgCY066QqKPTWCEd5MLqPTKtc+WP34TyZfoMlGRhYlI7MrycXxDRQprUycpqMycXdzFupq6apprWpZZbH9TSbn9bZb5rS+qm5Q5b1dStahMRLA0mQvyizQuh2PP+ojzeAop7JulvaFQZSZXaqoTSKbRLXgK5NjssXVYtD8ALlkYAP+ZKMl
uB/oPoAjAH3keADbBEgGwBIcLFrhmTOyy7pObfztdzE9eCEkIPGbnroQQ+KKrKsoNNq7ybNrSLWgxCtTeqH9Ygr6bXNyEmkzbNVe/qpDbmajYWta62RZqRxeQdBMshACjeaqQZqELOkdJCITXWaLzedzoVVodovPy4C0eYrkhYhrqCYeKkRVNqbyblrHbQeybFrYNlteeLVtR9b1taezfrXDRttXv58WY+KETcfKt1EvhjgIQAvntSyYtlKpZZJQ
lorhBxj8iwbx7DTQ5fO4IppYcacth9rVKTLrKTbTb3bdZaytUmrGLegrWbRkbP9QHbCsMSAdzaRL3RBHadFSPaQ+WNboXC7KdDfNjoTbBqKmDLaQRT3r7dbUaWJQTq8FZvN6dS0ax9dFL2jScTPdZHLujcwLApA/abFKM8zcYVak4vUBpELThpEAMBENpLKKMLgE8zP+iNmPnKi0pGgcZjeMdRbbJaqerKpdRPalVcVq6bbPbaTS/rvbSmrJDRXr
/bbPS1raZ12Td8qiQENQgNeAp1Noi4WcedjADUfaohe5rT7aRR2aBfawrXRKIrY7r5tulLXda+a0rW/bu1cvj3FairQpfdKP6c4aniczq3QMQBuMKQB27P0A5+e3bdyX/tCiYgN+bLzYsbZcg5zBAEJPN5bZNTObwOafkprfeqGlXSa8HVmaCHTmaV7cQ617TL0yHfGVAHEGEo+Cxp2HZWaC4CUMzVeCr47RLagrSw7k7bLa7dROSZAWzT9pbtjQ
nanTvUigbVTZYb1Te+bBHVTqsrbqarpRE6BjZHcmdYRlmgJoBFydxgzGjFb2Fd+o44Le4PdOiUcjGCr+7agtCDNuYGKLQgyTUbTs9RDLtvpg6Z7bDS57ckbMzQyb0jSxakmetyeAE0d4BewDZ5Lpb2yaQr8OQ5qoQWbEtlqWq3NYwzTrZUbz7anasKYeD/bHAaCDY0bEDWs7H7VFLOaS/a76ZqaMrUFjvzck7eZRs6Mpb/aTTWXSirWiYKAFbtCA
CHqDgNvquddLIzfOiFX+DmMLzkH8KndHsWcenJHAlwa1ZYJq0HXOaLLXLr7jQrrpFe06F7a+ql7d07p+U7SeAErynJQgKksJbINmkCbWbs3rzRCswc8AxQTrWRyFnUYbHDUayZTUS7R9ds7r6eFSrDRqaGBTIzsDSI64EqS7B1Q9LJHUfLpHRABmgNIgLNjoyAQJ+yH9IDKDZJ1QxIuU698FTE8RWzYoBP+o6ndEbJ7a7bjJSqqn9Z7bbXBY7OnU
ta2bdIbOiTwBxjgM6Y0RxRvJYhSUBQjDxnXNBMSmxd/LTiiE7UuKzraw6U7TPLF5f0ayBXa6RGVE6OJSlb+HR0b0re/btTbPrB2FdK+jcozzncOqhZWy6a8ggAMYGJUKALThNctqAIcIMAbccmCsUqTc9cq/KpjjeMToQbIU4OmipcIdJ91aUsKvLOy8jBchCKPPIypEkl9LtkDFVEi4yMczZ3dgBdZXcqqh6dg6GbfPa7LYvaunX7abHcSS17XA
L8FdzajVdQh0Son4pJuqlrUQRyLVRUwcyZG1Jib46rrUPV2DnptZSmNVjgNgBbYPThR8seL8XWw7Fndjruha6zmQIu7l3au6M5Sed4LLBok8FGZlvilqQ4FhZubIQYHaKaUstSo5zmtK6MHVSarLa06cHYzaxDSrq0jaq7l7axbenY87f9e7SqLc9dSQCvwvHbOKGSQXlpnbobXKTBqfmQE63HfCrlnaPQu6cHY0Pc+a2jala0ph6759l67PCCG6
w3e3JI3UIBo3bG6MYPG72gIm76CrgaMPU4b45Waa2XdxgHNg+kxWM4An2q1cPapIBCXErbiALILtycGzpZLBZKguKRFWvRQMKV0R0LAShwalhZK4CDLj1dgEAfEeSPTApShTCY6hDWY7cHV+6Frarrf3bC7+qXmbXhQM7fBeQdYuQCAtMOB7UBSPMSMcgI3HQFb6zZHIN3Ta6gnXUyvEqNrx2fhSc7YUwkkpIopFqp6vgC9bmRSEiy7VtqmhdIJr
xXeK2hd9a/+P9bpLa6y1bRQBjgLgANYORlxKvUAfFI4A5gCLhvudVzmrYJ6rGchDtnDlFi0sfrSpNm6DmvEKJQoMrR7aUYN5Os44+HBZmdoMTYjc1SsHe+6m3ZC6W3dC623YQ6O3V6L3YD6KfBSHatrVstikfhK26m7iQ+V3tqggcb7PQnbqFY2bEPVu6pLdG0x2ddbs7bdbkNa2UvzhstGvc94VwIF6zxaezPrRUirxZyLWhdyLovX9aH2fyKd3
cfLW8J8BqgCMAZoEo7wcYGT88OpbPUbYJ7zEernkehYYsFRbnTjfcUAqI4UXEY7PoM17GnSb9mnfK6PbXBLDZXcKJDcxb23f+74XUOLdETnicwgBxNpNDkMLiuCmfAbJDFbKQnPYE7JTenauHfX4uQH+RIxKYoAZNgAxAFWBQKJIBNwCaxCAAoBeFCIB9WNlyGRuEBblGGx1ACz7yqMTA4xMHYFqMTAGxLT6xQAz6qFAL6qFCMA2fRz7zWPXRNib
z6dWLL7UAEL6oACL7MPTE7dnRxyaXTirMrT7rjnfFSxfdT7JffT7fQEz6WffL72faYolfdz65Rqr7+fcz6qFJr7tffR7fFYx7CMqwAEAMaMMYBQBuMLbA4AG1legFbBNAIYgoAAIhMJXxrEldLJTkvoF6YpPZZphJbJPSaQwNBNcQlry4P8fy7xNNXI9ouArV0F47ZdZiDUzeC7HjZ2LnjU4KkfTC6UfT074XTH6e3TBMebWtJKEgh4HmXmFEXDt
htCWCq5vdO7WDqmCgaidUUgNIgrYJJyYACkAh8umCIDQS6XPeR4k4iP6x/f0AJ/Y86CnSigeOlOtgOQEy5JiSATVBBwrBPr43tUqgIWEC7metTbc9dPbYfY27FXUOllXauaevdY7UfXmbHJdq6FDVD4tUpMy43iBq6DttgpvnHbEuRbrJbXM6w6bP6yfb3qKfdERuPbZ4seN5l9oMr6RANVg0AIMAtAC6lhLNnRKSlAGwgAS89INkB4A4pgDoEgG
UA8EAxrGorkDS67n7dh7HboyU37Xh6jfTttfff77A/cH7Q/eH7I/dH7fwf6JMAzAGcAwgA8A4gGJyEQG0A6QHxHSJzBjXaSVHvnZbYBjA2ANxgsdJLKK0jNN/9hVoBtlLgdVHtk9LlxpqaCg7AXc+71PfUq65c267/fZaH/ZKy+vQBSeALxqgPZZlQFDKtqvS98aOMebmnqzRJ3ebqY2n46EPaAHL7cE6/ZbAHsgMHZfA2qTnXclaKA267X7fs7P
XXQHvXTR7TSTwG0nY8TWXYRkOAEFqjAIMB8ABwAWitqA5jZ9zqgKQAOANUBacP9ATRupy4/Xo9aUnrAc+IqcY4PVCpcEvx0HlqUNgrCAj/QmTQfRSkSUKnBBlKTa+ideqmna+62vXcqb/YL0oXSzaTA4wCDPavb3YBjLg7b26/jYkxO2p/7BbZ2T3HfqoBTO69zzf37B6hqD1hidVcAA7BtQBwA6oI4A13dMqz7Zu65ba6ydg58A9gwcH+Ico74/
UPI0jIn5cgt7RFClxByUMkAVrpOabNU0HXgBcrxFSC7S/QuaZrZrCn1Qhz7/Xp66/XC68zdOCGtdhLjVWXxk1MVJbuM5k1ermF2gwnw8Xf47PAxw71pRAGdqLUAmmLticgPiHcOFs7ona67KXXE71tgb6splAj8PSbAkg4MAUg2kGMg1kG4dLkH8g4UGOA+rwiQwSHPfUvrxA4tC4bFuBiALLBtQNIhm3mv6i4oWQXzuchUXGBj8TdQxzkP/0bjW
shxSFK679S16wmX0HC9YrrK/R06wQ+Ttlreq62LZ3KHHcmMUoavF5g7T42MiDCk8GVoXA5CakuUAGSfUh68bt4GHdRIBuMFSAhANEA5ScazvQ76G+HRSG3ze2dO1V0a6Q5/b/Q53AfQwri+Q2IH7qcfLtGdUB0+Ul65gKNZVrE6BAlXVAXYPOTV/YjaSg9fim2ppMpOAr5cpN1bqGGUGsorqpjpFYg8jC0HN6R0QOgwa5i/VPbQXWX7OpfRblzUY
HW3eCHevU/7xg3DoNrVrE+3fbQY4MzptDXjKV3MUbfiPeZazQAG3AzO7Ngw7Fn1P0AoAAhbSAGMBOQ9P7RTZTSsQ5Jb4TQDbFoauH1w5uGig5drr8XJsp0EeSn9Og0/vc4hGEm49WtQbqavecqo1Q06S/WiTaLbDLOw/DLuw917ew4/76/XmbvDUi7BnTN073SCbwFBVojuSbJzkH9K+/U6H3AxCKlvTTKRgD4A2AFlxtqehHMI2QHggzs7KA9eD
qA+EHaA4c7HwUmGUw7gA0w2rkFjdqAswzmG28FyHGCthGhOQBbGdUG7CMtR16gLbA19CMBiABQBLAKHqRLFbAUaGibhKfJgWrSec9ooDLJMXni6sQqHF0IqpklYWRoQPihQJdkgHEGxkmuV9RzzKBFpdf/j7fLtp8wmJr/g5+HpreX6lzb+HtPczbFrYaG1XUQ7O3e7A27TkbLYVA5NnpLpock8yxQnqJjXjB7j7TgKZ/acG5/dhS1vakLNxQRTp
fMVEPBGqppkOXEO+a1R9I1rIjQkZGUqCoNZZPgRswehZiYl71ERXhrK/kd6gASd7yNYVGjgoETP1jeyLvR0KbvTRrXWXMBpKs4BPYLupzQLUBtGSvpuMIFDbYBQAMYOx6kLQWLc5IqpyMGcldEHblNaTKttVJe5zLp7Y6xUmSjRYpqvPIntzRWpqcyVTa9A7pqP3YYGrIz7bszaYH+w7Y73YOG8hvdMH4ylnwqzDEpbuM6rBFkG5HZtvaEI4AGkI
0na9w8h7JyYRlgJORMu0LbBBgKxqcw3IgEXf9A8gN1GBPfILFDrxBi4C/9E8EVJtJVjbFVj8qLzNcU2bHWK87TNqmxY+STI/Eavw4kaLI6IaqgTp6f3bZG/3UBGBw3pjQIyZ6trXNK1VEUykQ9ybppeFYAOC461g4hGiCcAHdw4FGwA1fbLtCFGERdxcdxcRSHbUjHs7blGgkQRrS7eF7LxQ0LK7Vd7q7RRrIvVow67V0Ku4So8kQJIBjCJWN4lS
paG6aJQMlCRR8CJ1RqlTpaVWqcB/UKVEo6BAFv+RSa63TD6G3e16Bgyadq/X5ytVRCGxg7tHhCjua9ENOgqDDSS3mQTSJdOyYQVhiGPA8zGvA657MWt/a/4V/bb7UGGzAXs7qQwc6BJUk659bjqw44Qb0nexGsGJ8BGgJG7uMPEB5ll+LszJ512uPaHhvFjbOFRwJJnbSkGHS+He6ToGNQ1D6tNW2HAQ+ZHZrQj6XRbbHfbX2H8Y47G/OYC0SGVu
l6amXHRJJ+9PJuFZcleIFzXesHLzalyHo26HA4yU9/dTtKZ46SHyA/hHQg5HH4peGHIg5dL9cXPGf7cabA3S4a2XYkBCADAAV9DmKVY087R7EGEyery5XLAUFhXSs9x7HOF+QjqlpzaZbwfY1TNQ3jy33f0H4fSCGjZTX6Rg+9DzmXmbXfjCHeidpgGTBvykQ0+8jXbQRyYiNQYzTdGFw1CqaFda7SfQHHAWYB9pCMPqwnTtLUnTr7yQxHH9fSvH
tcXYbsrbgacE3GGk47vHno60ASdCQwFlh9K3gEckUQRiU2gtPcKnczQckTCyG0v86ojVXGPw6jGzIx2HdQ8Xr9Q8YGAI9tG24w5GeAKwCzQ0zji3U6MpxWQQzSlAnc5AJwm2r5GmHbM6XQ8t6Dw7iHVnYPrR6Honw49sDQw5gaiE3S77DSwLTnXEHSVQKHXWcwBeGWwBloB+LJZc1pMFOpsFXGNa3HRU7pypYIFegi58lag7dAyjGbBWjHFzQ3Hv
44j7m41tHRgzPTJEw3DQI79DtMBMYpPGxFYlP79uyGVpJmfAnCxonakEyhGgoyh6SXXcTA5Yy6QqSqa8E8YmifqYnc6eYmSEw4bik+Qn4g8Qa2XQgBBgDDbBgGwB6ip+yh5LBYpJuihIVrA7wQiEbCpOdDA1t8Gb9fU6/g/wbL/RbHP44+qvbRtH8Hcj7W45CGBw8pbX/TnjyovWD5ogca97R5RbBL36R4/THEE4t6J42nbwAzjr1eH66F5fUb7X
bhGyPrE6Qw1UmbDdPriEyb7ejY67rE6abbE8fLs0hVzWgLVVsjT4bcNo0H91XLInEJwD05lhY/LE156oZMoISTwai5vbK+EyEmBE/rKRDXNbFk5Y7lk4BHVk47Ga9cAnkXV7gHpHoM2IoICiJdvxPKHtC5w1GLByfB7kI2cmlnV/D3sFDhkAPXRrQb7U2UxwBpENIhkAP4HWU+ymRgJyn66Dym+U7gmQg8GGBHeEGhHedSLE/KSBUxwAOUxjAuU6
Kmvk5c6k4hjADWZ4pdbX5lRQPUAnNi7AhRfUACqjcHvgUja35YJq1iiHtxSLNNBk52Bt8pPdbcvdIwVdlrpo8TaTRZ0GFoxTalo9aLpk7XHQk0CHzJX+Hhg2ImYkwAmBwz/qpg836Rw8DQWEfF18aZbYoNDFztjPmFZvUcnbowzGtE2cHj5TABXwFJzMAMyBmQLJVZgEYBcAKkU05VuBLgN6rAoBJGJVp/j3PlaoC/jCTIYwShHaGShODX9LstQj
GeYweKKIStGFXV/GFk1jHrI7p7cY/p7Yk/16eAHIbCUwarjGIQqloBpBfUA8zvqGG4FoKUtaY+Lbjkw6qrXfkmWY+6GM7e571vZOzNvdeTdxYjHe0xNqjxZRSltW2jjvRXbQvcVGDwqVHP/uVHKNbtqqow3a2XbgA9QS0ARQxdqfVVdqGwSJp2BApq8wnamVWukZ/QkoHUkSbH3w62GAQwGn648CGh0wtzsY7/HQ0//Hq2QOGgUwkmhseKE4akiG
7A4TLEkuMklE4w6oNSfa/Y856901PG83sHHYrfHG/KWxLRGQ8m9fRgaXk6vHSI8b644z5SE440mbEwmG2XTABtQBjB/oFo05gOj7VY7EZhqDPJAfiMjq0V4mRXddk0EJXBpFOnrEU6bGegzMn7eXRahEwxauvSGmx0/bGJ0wBSloLKzOkfnJEQ6QqKzSHy5M/PJKY9475wzknLXfM7/Y9iHa1biHN4yHHm1ZE6nok/bF45Kn3XQk6Z9evGCVbw7E
400nvfVgxGgBQBAdkYAYAJZso9TjgMlET1VrqghLkABLyMLBogqKUIeIM3sGpc/HeE/BnTI6Y6DA517g0zZGzruIm8Uw5HC4LKyDXmRh3kmdHp7qCbKDBe41DdknyaZ3rd06gmEVZtLGaVgniXZFatpYNmyXWSGJU/gn2M6dLOMzHHuMz67fzQvqIswJnv6UFp6AM0AYAG0zrdh9SJzeosqgjTRT7mDyqYkvYWIgwhho/7ixFdKqZXVpn/U2inhD
T+HMY6hmR0zjGqs2GmsM7tHELeor6NGhVnvA8zC+kCbzRGxRSxR1n00wgnt065nqM71nCk6isrEwgb8Db5nidS+bAs2EGo4xEGuMzqaeM9Dm4c2qn/7eHNBgNUAKOiH7egE5HgU/3IIcofdxSAf6xreWHOwAD4PBCbIXGOF1tA/3TNM9D7egy065kxinG43Iqok1Y7qsw7HasyfGrAzgRZwopAh2cQZv5Wr14JMpMJSL7GGU25n9w+FbLk6fFSky
iqGXQ0n543hGKXZNnrDdNmzEx/be1YFJTDVvGh1YBaMnVgwKAJgBqgHMBacJkNAGQBm1mn4a5Vjvx5zBDGRo6gt0zBcAtVj3SLs9LqX3dpnLhYGmAdVimVXUZmVk/zn+vUuBZWe5ZjEu5HxsfNL3HSCs3Xvq7N0xmmTk9brGU9u6ZtqitPkw67bk066/M+S7DpUdTqXYQmak/rmcDTI1rk0tnvk4JnCMtgBWgPzh7NutQFjdml2rsQAOUTG7PDT1
Hd9UeNI0FOtpVNMEs3QhF9EB9R1/J5by44umjlVEcBCKPhK7oRar1NPnMkv2m4ffMmlXcHmDQy9nMM6hzxgxchRpamp3klQ68OdvaCaZhqBLuPnOs9PMAbrpsTqiDoDgFTZsAHAAgINuGpbScGIc+5mfNeHNb8/fnH89tnOFVWYpIOYIM1i8Gr3ZYJ9ZM4J88U6N4GfnBYdeosX4yFYXbddmEM7dnNPZ+7h05tHec69nt8+9mg7TOmdXZLoHuhOG
3TlZ7wVkPgCtLjKL872z6U/dH5c49GZAX660AJGIWxFuBNwPTBqxJtAuQPoBUAJLUGCy2JEiMxYeC5dF0g2srRM80AeCzcm55cIyBCxwBmC8wBWC1vp2C5JguC+bUOAFIW+C6tQpC/XRFyTbiOsmIXxUwFntc+gAqQ6Xm1arSG143lUG87qCjGYQAW8wrb8AO3mEAJ3mvefNn5GY66pCzIW5CwBAFC5wXuCw2JeC+EB+C74XBC1oWRC7oX+MzXmV
swlJzQKNZcAP0AIcFAAzYKQBC4KQBHrO6C2wMcBCYzML8vdfjosNb4OaOXFPKGDzctHrBIhpA45ZK2ywWMNbnbcvnr/YOm182gWlk7X6w8yZn25YcAhw2BSW/Q985VnqQouXwCaKNLgJw9KEoojkmFvdbrPemIzaC0gp2YxuL5tZNrPPfzHqKSiy702d61tcsWxYxVGfreLGcKbF6BRVgwRgMoBZA83lO4B3N9APEAxgBDh6AGwBaqj5hUmWamCw
w3SGzGyYtIOh5J7JD6WDWRQbyVkYjlgcaElPK5f0Q71vpUgMCRE3AjSDkTq8esFtFSin2pRp6ys08aREz2HQ87inw8xbKtXULnxkI7MWkofadFfbKCaWe4ZVM3Bh44Q0hi11mIDTZSIVNmm2XVMBsAFjFAUBQBmgFbBmirWgoAM3YEAC7AfQ1cjigwDyG6aLpUs32BLsDrGzbUiUPi1aoIOCcMqtM48VI3vJjBmCqjVMCW+/B5Q2aOCXug6zn/c2
2LBExC7YS0MHKs688p+UiWWi5zrUSxphF0FYxMS6JJcpCMTPPgQKxFkSXd+YzG8BTZTBlOSXCMhcig/ZoB6AMoBGgFGDOgNvhSRG9SKAGNZu80J6kgBuZoQuz0WdjDk2ue8XV8lkZHAkvZ09Y4IJS/8WZ4YCXnFLKXQSwqXsjEqWa40gXSszZb1o/UXsU40XES80WIdZ4LTWbhmuFvu5lRYQXkPOCNR3Z8GjEAMW4HNaXoxTuG7S1koy4xMXP04k
GDQaxrJAHwLagKyoQHVWn1LDPomNQGW9HsKqAri8z0FtaIDOVb5ZfBRhcLmX0YBpVIJ7I+9cwjKonbWexacxUHklXngpkNUXLY7UXb/evnREwiW+c8WWVFZ4Kmrc5HarGShMlA5nRJCRtR3a9x9LjOsfvs2W6U8T7/HcXwHSwUmno1gwxKg/m6Zp0BmgKQBPDWtnBgOaB6gPUBWQJ9z9baPZcLuu9XLOUMiooui2uUUXNZMGgDQlbYhrcjG/U9mX
oS7mXys6eX4S5vmDYeGndo2EC2i+6gOi3kFaYkusCJZ5HuyZT4muY2XCSymlnM8cHR5Hs5xi5PG0EzhTM7WNqtvWFGvPYXax8rYs8o4LGli6LGH0/enpoVXb9/JsWZY7d65Y4tC4ANRlcAO1cpE9LywdEIBIbTwBjLBDgTAOOXr8ePY8zCVF2aFPdHGUp6/mGCNxSNwCwzVeph5ObYfGbvI/GTsKU4HJsg1n34G7mbG2c1f6jy6vmTy/mWQ8+RWe
sW9mHI/EAQI8Z6CFYvyDLUt8mueqleLVAml3naZqvYMXOK8SXWy4FLQFPHyVvXd62Xe+ziAFbB/oMyBO8CkBnAIkBsAOBJQtR/ArYPgATYULha09ZYgy+wMtSUaFI1o4yZmS/xripJTnipCyVmc68zUfhX79XK7ZkzqH1S3qHNS6OnwqzWTdSyWWPIcTmiY8N6Oi7RYnRq4Jh3f9mHGIJ126r8KPy1lWbS2RzIAg9JLrSL4OY+CzlmDlIhqzCyRq
3zGi7aeLpKwVH5K0VGXqyVHFKwD0yo++n67YeHXWb0BZqpcB6AO0B8spsqAfGumjQjbs3EMyy+IKyzUAhzQKRWGa4tlpA4CzEbq4zTabszmW2nRqWDM1qWg3vNXLy/ZL9o+WX7vkaFU0cqoCJZ1q0BRCQVrl47Mq6gkuK+jqPenlWaZY6zdsazX7k+rji8/E7pU4k65s9EH6juzWRA5wKKE1I7CMpgAMYMyBOgEyB0inVBvkCQBM49XlAtTn0EK6
JSk4FdwVmP0XwkmNi2uQxoY2cUiQfGp6nztuzXJiw492UfzVKcuzzkpG41juBw/cxjWiK1jXpqzjXZq9qWzZZ8av1RkWDS7VxAhdxFV+TZniMwrJ4zFkmmy4dWWyy/mma6dX/y7GshKx56brUhqZ2ReSxiTHAKvK91La1my12bbXuLsbXnaKbXRKEfzRK/MXkWSeznq6sW5K6XWFK5sXPqy+nvq7LG7uXYnCABDg/fb0AUIPIHubAeqYHOMorzAB
z+KPigg3ANdxk5JBfg5dm7a4RX9A8RXsaxVmXa3jXp6ZRWoq3Z9hqf+r1pMtFhVS2y8fb458QniLgcxxX6a9lXw61kpma1HW/ZQxy6OYSGBOYxyjE5IyS8y4q9cxGGDc6PRj6yxGA3abnk47oIZ9KawCdK0yRTmq90wNForNswBoK6ZW1Y7rz7YVOULZpiUf5QIk40eHUMKRLrzOS6UHQoNzRIZXciIaNzHOVhYJuf5WVS/Lq1SxX7hEzNXns67W
UZc5bhpR3HZbkNjZHOfof2s+89VDBHVrq0HeNJ+W9DcdXdwU+NOy79Xj5Wd4YALjoIOs0A5YJwUYAFo04ANM9gtYA3v9mHAlVufC203xcIG6fhUIPlp00aKq4G34FlVtZzhuSg30IWg2NmoeWOc/dnMU6FWN84Q2P1bVqv1UAnO42FyrYVMgUqwWrnvoTKfDvtlmwQw3Q6wNqcqxHXWG/xWBTpbimo0YAMYPQAgtdaaZBZgAOTKQBr0hMBZJRYzz
U1MdmdFTRUAumYwOqFaX+YKY9eWRYWG/yXy4xCQEeeh5Tee3zUeSMQM2RjyB8zbzza5CXdZQ7W1oyRX9G2eW5qzPXIq/166E/Pzo0zMG4INYk00SvW26hJbjzZUHU1P/6j+jvWjq/46Tq243zk6zGdi7oI0igthmQGwBJ1fgBlADdUDg60BnAFbBMAMILq05voIm2Fg6ahkoD+a/x88QqGdeRDyTlfaYEBkbyMm63zkeeby+Enk2reVjzh8Pjjis
/wnMa2U2J66RX/w+eXMC2hLxg6rkaK77zLMmmj1PpMq26v7X3vrrEhKDGYHQ8jlGG8w6EPQM38qzomRm47EIcAVVgQNIgvVUyjCxBQBBgBjBrADFngqRyWOVWDtp5IdI/HIJ1zLpe6x7LXy4/ECcVmIRK0m83yTeW3yUeRbyIFlc3e+UU27m6imHmx16nmxU2yK4Y2NzcY3oSrtYvm+QcrsN5NcZS99VJQTTF0+CR+q1aWnG0w3+myw2YW4rnCq4
RkMYDwAIcHzgBnGJH7c2CFo0IhFsjGVpv2oVITyRN93+fOYY0APWDDijWrs8qX7a2PXHa3g3nawQ3p6zqWCa+8rTUxj77vrJBCDCumQTir8cSy4wQMWC3E0BC3NEwq2D6zRmBKys7iBZQKhs1ekY2/DnykxNnKkydK9gdHGe1RXmWBQm3sc0BaVHv9hmAI7B4tKHD6AGlICgzLs4bPMN/0zWmsi0A3dBZF11gYnxta7rH1BUGFXXgNRuE2OAdnGU
KVnJCMPRGaLioqapCheYKwQdo3Jq7g39M5PXnW2e83m6Zqv9fEB0TbFWPhUzsNDnnEDzUuBKa2h5qbsqpumwMNArZmnw25HXI28FH1xWhq0heFHeZpkKX9NkLRKLWWU/vkLB22YLviF2AShV22KmPoKKhULMcow9WmRflHpoY+mugm9Wn0x9Wa7dtQVK9VHj5b3Y75TIQ4AGDhvMgvwhgFBAXYEIgVa0A3kgAWFzLlAJtlqS3VheiFfqSXcR7bA3
PK6SL9hQjXPtSfhjhXNltII7RMy+jXR66tHOW07XJ2+hnXm1vn3m1RWTYU37Aas1r/7CIsDmmRmdFTItR3eEKA9DB7Q25RnkI9C2zqz4lQozMXz2/vc0JKiKA9D9QJPlZdsRaAgNmHiKdzASKkNcSLdhUX0aKAcK9FpOhqRRaIMJDZSnZjklv2zemaKSXXZK6d67OwETgO5LGvq9LGHxbXWk4pgApgDABcANqBZYIMBTyJcAXYFLWRgM4ASsoA7X
xaI2WOlHQLRt7RtILEpx8wGadjcZUt+PyEryccbTyS0l6EGXGjVJcbdrTArbjcEmoS/a3Hm4x3nm4Zmqm663Z65On9S1GnGdlta5G7y4BbXhyy8aO6rqyRCMqyHXem2HXbS+O60+K2y2G3F7EwzWh6AAcBhstq3Abv3Iv9BDtjbaD51Pia20QnLhM+GBnAVeXLyTXBnMG3a36O1bHrfjbHXjX/GKKzU3zA2WWNk/d9FHIuYpykiHSO+47xlIYjyC
512922nnUuYiiAOkYbFTVnjN5vqb5TRzWwqQYXuayjmZU9zK6kx4q3uzm2zc7oJagKsqOXaVaXYNIgF1HJUxgN6yH8yMB9QZF2NKgRR8AqaUJPjDjMlZpBBPNhXRIgPWxVZGbiLfkYty14gdhQmbiQEmbUm8U389cgWYS6V3uWy82Ku27WWTVGUeADeWDow02LOumjQfGLmoI7G9iMwuml+CnBHG113nG3vXnu/133G/xMeKXMBbYLWpPYOnEo9d
pBMgUx5BPC/9qWyOb7g8hBoPfdJ9RYY6isxt26OwOngq4MGnW8x2We0Q3+Wy5awmyd2LOuZ6PkYRntq9Z7LEPwQt67QYxO86H/HVL3mzZw6lc1CZ4rU+bsE3+aL60dK/u8YXaXeXn6XaKVQ+9Xn1U+HMXSa+xuU4QAkxdwd9AEKCJBQcBbYI0AF1Kj2VkGhIMe7lFPnXvhsLZAE2KMpGCO9kgie1UESeyUrUauRb1/Aqrg1oV2Sm8V2GO462mOzz
mcUxeWqu+YGaeZx3zYeQcI6T8ArQ0DCfccLblg3MqDq+L35Wwh7fe46WsGJcAqYDAADgOaAI9Sr3uoIDLyzNe7yMJAyOKEcKypDECM7k3zCsyzmsyyVnSmx32J22V3ca9O3WO7O2Bw04Xby4JCDAslU1DeLnIfQTTfE5KQ7Pfd2HPS5mw6Qv3D6x6HhaUH2YrarnY+8sTeAGH2uayYmOMzfWzC5GGoB+APQey/WEpP9Ap6iDjmADBXx6mMAxQJoA
rYDABsAO8T+4Sh3pM+dCStPyFkmBOjwM71azYuRReuld2Ki7oUHreNanrS2Hje5f32+9t32sbt2ptD32Z2+Dqry+7BXvVz2uO/6KQWigg7NXtaLEvTVAQREL/+xa7uK4IJMo1J302qe3RK5t6QumwPHAhwPcNVZ2pKyXaZK0Rry7eXXHO5XWQO9qIwO12WsGNkBTGsnCXQFbiDgMoApgLbs4AFSRMAFoZ8+0ZBVjdur05KtdTbCa2UQJIojORTa2
GcZbhsUW7k8GA2XuO9MN5EPJK3eSkVnIvxR27pmpq533b+1PX7+wd2sC5ImPWytXDo7rrrEiebV+Vd2cSwXk67mmnt6w92Ng4P6tg0DdlADIRZaYMBoQEcHGa/eYNmu3DM83XXXDc0OY3W0Oj3VF24QHiF1mIGE6LLXiBSxY9yg0zR0ba03/cV/Uje4gXuB1t3jy+b2u+3t2MM7kO2O5ImF217XO28wMM0c+8F00jrJ7Llmd28fsGa91nxud0OCq
1nmqgHR64284N7fLAO6BYYW8jijmSI7NmdtvYPeCrjoyIBUVXB+4PPB94OMcw8OXh/H2cc/9jLgG4OvyO4bagLw3hMBjBJAKQB6gHiRKqnmH4cC1WNyIu0ArgyYl+AKYtjSObdeflQ2MjTQDXjrJKi048lPZNt402wIlYRf7Nu6b3OcxEmm45sOWO9sPH+47GOO7V3rmaZ6FKSX012796iJYOtXBCGLHMz03ah2PGd0zcP1B/H9NB7J2xK69gfPc
p66R0KZDvU9W/24B2AO+YP3q5YPnO9XXXO9sWVW1gxpEIQBBgJ8BWgBzrtQOVaSoCMLCdMzhtQKQBEGnl7AY4BnM5uswGSdvgiR3vhiUu3V36qjq8K3wl6vbt64/E17z/XEb2W1f3eByKzv3Zb3eW05abe/A0eAHgreR7+rG6tCEUbZBHhQo5XppS4gyMYoOahwAOVB7KOQBwemrrTJ3ERdoOzBjt7Y4tUF9vYWYFtaGFHq8YPbO6YOy6w529R+s
XyNYpWbB+w22XZ7Ak2FbAwJJ7Blq6fHPTYnx4zf0rOEuuD+FSfhaUuCpJtmXL1I6D6McdgEIx6172c2O2MY3o3Hs+gXBBw/3hB8Z1r+DuaNJOJorG3jKBka13Gg9+13y31qve3dG8k6WOj21Dm4KFT6JfbQopfVb71fbb7FfVz6VfVQo1fa76NfVT6PfU8P0AGb6Px2Yovx4z6fxwr77ff+OefYBOXfYL7QJ68O2ZRH3r62Xnb65m3ApJBOafZ+P
LfbBPgJ7+OEJ8r6kJ3z7rfW760J5CPc24tD6AOaAParMBqoM4AVyewYwLbUBacM6DOgJz3wm3cXYjGoUmROiVCnlziAJQQZ+IDpz129a91VkRCcwnn6MFOZdmwzR3GRyb2V8yyOUM8+r9x4WXe+4d325afKhW1taIVrI4E09aHwYe46SifQghiDP2pR9pt6h8uG0TJcAbcXMBUTZIAhVM/meu/LJ0G7cPYWyaPdBI5OMYM5OxgK5OPqRncPgBecc
Xc4JgC2PZR5BJPYsFJO3mV4IT/dEbIfbT3BDTwO1h9bHxDd33tJ0IP3a1ubPlZ634yoiBF5GLagDYJ3lE+/wZIb6n7x3K3IW8hHnx5DnmU9IQuA9gG4A9lyEAwQGBA5oBUAyQGMA2wBoA61PcA+1P8A7kBCA91PiA+gG9C1rntgUYWsJyYX7wThOGAIxPiAMxOEAKxOb9v0AOJ1xOSubxPqpik6WpwEG+A51PkA+NOhA2gPKE1gx+nPEBzQMJArY
M/2ScwJO+/GLpqpCziwrGoKoyaF5DQjWFRVYEmlh7a3VJzUWze5lO4x9lP9uxFW8h5Om9VbgWFDetdaKFC1hlDOLiM4pBc0HljrJ8WOOhw1P381KaA+y9jYg7tiAg+hPMVZhOww4gO0c1EGMEbgaCZ7ROwewlJbYFuAkYhrBao84hmgNUAlbVAAeAKNY4ANgAY/bi3ljVF2CQjjNINFJNuIsOa98DkYLAkUii+Kba0m/WHD3I2H8QkpO0h9+G9M1
2Gsh1O2LPkWW++3pPqDYu3ue8mNZ2RmYPY4Lbv/a13FWm1o6CGL2bJyfwlw+fwEpIQBT5WMBwmFxH2h9cP0G0q3/e75O7Zw7OnZ/dOpM/zP7g1JBBBFchpB5rTFThLOapUi5SsWPaVKcC6CKysPmR7o2uc6XrQZ1sPwZzsPJ01niZE3OCJ0GxQzzc+9STezz3Plk9g25KP0Z67ONmu7OcQzjO/YNKTeQ+BO8Q3XOxswvHpp5fX/4h8PI+yyUFp0g
OJAHTOGZ0zOHgCzO2ZxzPlAFzOY/alKeQySHjc8y6GPT8m2XcwBSAHAB6AL0AR526aJu49PpQ6aolxz2VJmSwaQx+RRxri1z1Q+f3aO/HO1J4nPWR9zn2R1b2jG6ta17eZroZ9tzE/A6Ex+xmow4F37KpDE2aU7u2y5xAbxuZXOPM9XOIAF6How4GG2awGHYwxrnWMwRGCE3NOo+zhOY+yoRgF2NZQF2EWE+/9j/q5q8BVE7F1khBMeABQA4AC7B
iAPUA/gLtPeZ8haH9DlI95KPJiYrs26KMs4cxiLP7NZEOtEJkCGw+0GFZ3wlOB8sP7m9GOMpzt2sp1fOEx+zaNXfVrJNnFW6K/p3Kmui7pCi72xQuX35jF/PLh/zttQTfzprJU1YAHoAXZ7/O3Z4v39duoviBwVO/Z8HAXEBkpdEGPJCAqHOi4wwuVTpa2h677mlZ+jHwkxpPQQ5U2hF8aHenVDqs5/+rFBuEKDzVRawCkx42WB12ix8oOMZzouy
x55nmI/Nsol1NOi828O25+AiO5zSGu52TOhzBQBMF9UBsF70BcF/gvCF8Qu5gLtPUpWhHOQDhGhaySrwi1c6kqJ8AhAGwAJgFmldbQiBeqC7A6oNVWiqu0BbYJiPq226PPTcJJD7hiiLzpMld1QgJsjNJT1ghaoUAmlHlI7uDMo1bDr3AlHT7mb4zTLmO0aypPT54DP1J3UW9xw0WwZ/jWtZ4tWyRDuaCCJKQ9uSvwLx1N6yUpuYCS573ap2G2EP
X/O5RyCyFR1WOkNUGXXLDPCK4NA5i+Jb5b6olHFlzeNtO3RcNI+lHplzpHsoxqPWx1qPdRxLH/210s305d7ux9d6fq4N2iq9UBeMKQBbYB1Hts/lRlmZtJfaNWjeEm1yFIOUHADsAoWkkzmNZZ9rkU2y2iu6sOgZ/wuQZ4IuXW6z3iGyFUNIFHn2PFaIFEyaZcmfPcqDEa3FF2z8rhzP6e1piWBu4AvZadqAuU0qmVU7yn+U5KvBU8KnuU7KvYl6
zKiZ/APdc9hPu57hPR6BKupV0KnlUyKnlV6guoRyo9qgi7Ag/CqD2gEYzlcibtOgFo9EgCN2A+Iihd8Ws0JzSroW+ZG551miDm2yOU1CnY0g3CgEiIZq4HiuUIANLoUAZfY1lI07DVg3HOeF+lO6V3wOBFwIOcp4eO8px4VtEFHmGKCfdZB5UJg+cRndEEvYtSZbOHPSMXx41JM+K0M3904nzwAIVBKQHABRBcQL6wDWBoALEHINlVhXrAwB1COi
2OW8KB/4h1PyBHuB9ALqB63Qeg+1yNO0vIOvBgD2vtgGOvqsKuGsgIdqnFzlN+1xOusgMOvWIbOuBmIOv112hmsWJuuB11kAvMOZ9916uuKSJCiT1/OuUYsm3igBevB19wcggxZBb11kBlCFKnReCuvL1+QK0ri52Z1/Mxx15eurMQaPzgmI8n1/oAMuE3iVEFjRe17+u513eumkF5hXQEZgTQA+kOQPgB4dN7o9Am9UaKDqpZy5ZBkN1qBCSLsx
I3GgtF2ljk32zOujAP1O4USQIGAAQAVYIsxSUEqQQN0evAWiaAb0h/taOCQAEcxxvVvHuB5CTevJQCQA0etVArMbgBUA19xuN+KgjYB0m7C2lplAKKBIxPzZ/pIpvwWCCBdUEaQwJ+UB5YGNZMBOEhSAHJvcAApuNUtco6QMZv/pMzQRfYxvoNwdAd1w4XbMSOBZwcJt5YIWB8YHoTSBD/QxN8ftsABsBj9j/Q/A2z8diTuS2fvoB210wBWgLcRj
9sFuBjkwARNx5v+9Ixu7AFMAt9Hf4f6IDg2AMJv3N8EBxN2KAazv9B+p4d4jYELgwgMEAQxMM9nPDLBAtb2hlWxFR0wAYAhLMVuZgU6Y4+gWdhzrluOQGHMnqm8hKAvtLf4KBBGwEAA=
```
%%

View file

@ -0,0 +1,185 @@
---
title: Endpoints
lastUpdated: 2025-10-28
---
# The Auth Server is getting merged with the Omega
---
## User Endpoints
If any errors occur a `logMessage` key in the data container will contain the error message
##### GET `/api/get/id/<username>`
```json
{
"type": "success",
"data": {
"user_id": "<id>"
}
}
```
##### GET `/api/get/<id>`
```json
{
"type": "success",
"data": {
"username": "<username>",
"display": "<display name>",
"avatar": "<base64 avatar>",
"about": "<base64 about>",
"status": "<status>",
"public_key": "<base64 public key>",
"sub_level": int,
"sub_end": int
}
}
```
##### POST `/api/change/<id>`
`REQ`
```json
{
[ "username" | "display" | "avatar" | "about" | "status" ]: [ "<username>" | "<display>" | "<avatar>" | "<about>" | "<status>" ],
"private_key_hash": "<sha256 private key hash>"
}
```
`RES`
```json
{
"type": "success"
}
```
##### POST `/api/change/iota-id/<id>`
`REQ`
```json
{
"iota_id": "<id>",
"reset_token": "<base64 random bytes>",
"new_token": "<base64 random bytes>"
}
```
`RES`
```json
{
"type": "success"
}
```
##### POST `/api/change/keys/<id>`
`REQ`
```json
{
"private_key_hash": "<sha256 private key hash>",
"public_key": "<base64 public key>",
"reset_token": "<base64 random bytes>",
"new_token": "<base64 random bytes>"
}
```
`RES`
```json
{
"type": "success"
}
```
## Iota Endpoints
##### GET `/api/register/init`
The user creation process timeouts after 1 hour.
```json
{
"type": "success",
"data": {
"user_id": "<id>"
}
}
```
##### POST `/api/register/complete`
`REQ`
```json
{
"id": int,
"username": "",
"public_key": "",
"private_key_hash": "",
"iota_id": "",
"reset_token": ""
}
```
`RES`
```json
{
"type": "success"
}
```
##### POST `/api/delete/<id>`
`REQ`
```json
{
"reset_token": ""
}
```
`RES`
```json
{
"type": "success"
}
```
## Omikron Endpoints
##### GET `/api/get/private-key-hash/<id>`
**Header:** `Authorization <omikron id>`
**Header:** `PrivateKeyHash <sha256 private key hash>`
```json
{
"type": "success",
"data": {
"matches": boolean
}
}
```
##### GET `/api/get/iota-id/<id>`
**Header:** `Authorization <omikron id>`
```json
{
"type": "success",
"data": {
"iota_id": "<id>"
}
}
```

View file

@ -0,0 +1,383 @@
---
title: Communities
---
There are two types of communities, but one is not yet in planning so it will be ignored for now.
## Direct communities
Direct communities do not communicate to the user through an `Omikron`, this make direct communities cheaper to run (for us). As no bandwidth is used.
With direct communities the community owner can read all messages as they are stored on the community server.
On the Iota of other users everything about a community is encrypted. This could be used to keep users private from their Iota host.
### Sharing a direct community
A community stores it's joined users UUID's and a shared secret for each of them.
When joining a community an invite has to be created.
This invite can be send to any user. It contains the communities IP & a shared secret.
By removing a user from a community you are removing the shared secret.
## Connecting
Connect to a community on a websocket or websocket-secure on `ws[s]://[ip]:[port]/ws/community/[community name]`.
Standard port of a community is 1984.
##### `REQ (C2S):`
```json
{
"type": "identification",
"data": {
"user_id": "<uuid>"
}
}
```
###### `RES/REQ (S2C):`
```json
{
"type": "challenge",
"data": {
"challenge": "<Encrypted Base64 string>",
"public_key": "<Base64 publicKey>"
}
}
```
The Client should solve the challenge.
###### `RES/REQ (C2S):`
```json
{
"type": "challenge_response",
"data": {
"challenge": "<Solved Challenge | Decrypted Base64 string>"
}
}
```
Upon solving the challenge the client will be provided with comunity information.
###### `RES (S2C):
```json
{
"type": "identification_response",
"data": {
"accepted": boolean,
"interactables": {
"<interactable_name>":{
"codec": "<decoder_type>",
"data": {
// Standart are Category, Textchat & VoiceChat
}
},
// Examples
"Rules":{
"codec": "text",
"data": {
// Useless I guess
}
},
"General":{
"codec": "category",
"data": {
"General":{
"codec": "text",
"data": {}
},
"VC-1":{
"codec": "voice",
"data": {
"active_users": {
"user_id": {
"state": "<call_status>",
"streaming": boolean
},
"user_id": {
"state": "<call_status>",
"streaming": boolean
},
"user_id": {
"state": "<call_status>",
"streaming": boolean
}
}
}
},
"VC-2":{
"codec": "voice",
"data": {
"active_users": {}
}
}
}
}
}
}
}
```
## Using Channels
As mods can create their own channel codecs browser-extensions could implement their own codec handling.
### Send something to a channel
Send on the communities websocket.
##### `REQ:`
```json
{
"type": "function",
"id": "<uuid>",
"data": {
"codec": "<channel_codec>", // optional
"name": "<channel_name>",
"path": "<overlord_category_name>/<overlord_category_name>...",
"function": "<function_to_execute>",
"payload": {
"<ARG_1>": "<VAL_1>",
...
}
}
}
```
##### `RES:`
```json
{
"type": "function",
"id": "<uuid>",
"data": {
"codec": "<channel_codec>", // optional
"name": "<channel_name>",
"path": "<overlord_category_name>/<overlord_category_name>...",
"result": "<a_function_result>",
"payload": {
"<ARG_1>": "<VAL_1>",
...
}
}
}
```
#### Receiving Updates
##### `RES:`
```json
{
"type": "update",
"id": "<uuid>",
"data": {
"codec": "<channel_codec>", // optional
"name": "<channel_name>",
"path": "<overlord_category_name>/<overlord_category_name>...",
"result": "<a_function_result>",
"payload": {
"<ARG_1>": "<VAL_1>"
}
}
}
```
### Text channels
#### Sending
An example for using the `General` text Channel in the `General` category from the example login.
##### `REQ:`
```json
{
"type": "function",
"id": "<uuid>",
"data": {
"codec": "text",
"name": "General",
"path": "General",
"function": "send_message",
"payload": {
"message": "<message>"
}
}
}
```
##### `RES:`
```json
{
"type": "function",
"id": "<uuid>",
"data": {
"codec": "text", // optional
"name": "General",
"path": "General",
"result": "message_received",
"payload": {}
}
}
```
#### Loading
An example for using the `General` text Channel in the `General` category from the example login.
##### `REQ:`
```json
{
"type": "function",
"id": "<uuid>",
"data": {
"codec": "text",
"name": "General",
"path": "General",
"function": "get_messages",
"payload": {
"loaded_messages": int,
"amount": int
}
}
}
```
##### `RES:`
```json
{
"type": "function",
"id": "<uuid>",
"data": {
"codec": "text", // optional
"name": "General",
"path": "General",
"result": "message_chunk",
"payload": {
"messages": [
{
"message": "message",
"send_time": unix,
"sender_id": "<uuid>"
}
]
}
}
}
```
#### Live messages
##### `RES:`
```json
{
"type": "update",
"id": "<uuid>",
"data": {
"codec": "text", // optional
"name": "General",
"path": "General",
"result": "message_live",
"payload": {
"sender_id": "<uuid>",
"message": "<uuid>",
"send_time": "<uuid>"
}
}
}
```
### Voice channels
#### Updates
An example for VC-1 in the General category.
##### `RES:`
```json
{
"type": "update",
"id": "<uuid>",
"data": {
"codec": "voice", // optional
"name": "VC-1",
"path": "General",
"result": "user_changed",
"payload": {
"user_id": "<uuid>",
"state": "<user_state>",
"streaming": boolean
}
}
}
```
###### User States can be
```json
active,
muted,
deafed,
inactive
```
#### Connecting
Connect to the STUN.
Connect to the community again on: `ws[s]://<ip>:<port>/ws/calls/`
Log in on works by providing the `Call websocket` with the `path/name` & the `secret` of the call.
##### Getting the secret & name from the call
An example for VC-1 in the General category.
###### `REQ:`
```json
{
"type": "function",
"id": "<uuid>",
"data": {
"codec": "voice", // optional
"name": "VC-1",
"path": "General",
"function": "",
"payload": {
"sender_id": "<uuid>",
"message": "<uuid>",
"send_time": "<uuid>"
}
}
}
```
###### `RES:`
```json
{
"type": "function",
"id": "<uuid>",
"data": {
"codec": "voice", // optional
"name": "VC-1",
"path": "General",
"function": "",
"payload": {
"sender_id": "<uuid>",
"message": "<uuid>",
"send_time": "<uuid>"
}
}
}
```

View file

@ -0,0 +1,339 @@
---
title: Endpoints
---
All messages to the `Iota` are either from the `Omikron` directly, from a `Client` or another `Iota` trying to message a `User` on the `Iota`.
All messages will be marked with a `sender_id` this will be added on the `Omikron`.
It is important to note that the `Iota ID` is not shared with others as it is what verifies the `Iota` users to Tensamin.
In the response the `sender_id` & `receiver_id` must be swapped as sender.
When a message comes from an iota without a `sender-id` that the iota has access to or is designated for the client (`33333333-3333-3333-3333-333333333333`) the message will not be send.
## Messages
### Client adds someone to their contacts
When adding via name, the omikron will intercept and fill the chat_partner_id.
The iota will never read, or handle the chat_partner_name.
##### `REQ:`
```json
{
"sender_id": "<user-id>",
"receiver_id": "<user-id>",
"type": "add_conversation",
"id": "<uuid>",
"data": {
"chat_partner_id": id,
"chat_partner_name": "name"
}
}
```
##### `RES:`
```json
{
"sender_id": "<user-id>",
"receiver_id": "<user-id>",
"type": "add_conversation",
"id": "<uuid>",
"data": {}
}
```
### Client messages someone
##### `REQ:`
```json
{
"sender_id": "<user-id>",
"receiver_id": "<user-id>",
"type": "message_send",
"id": "<uuid>",
"data": {
"receiver_id": "<uuid>",
"content": "<markdown (encrypted)>",
"files": [
{
"name": "<cool name>",
"id": "<uuid>",
"type": "[ image | image_top_right | file ]"
}
]
}
}
```
##### `RES:`
```json
{
"sender_id": "<user-id>",
"receiver_id": "<user-id>",
"type": "message_send",
"id": "<uuid>",
"data": {}
}
```
### Client loads messages
##### `REQ:`
```json
{
"sender_id": "<user-id>",
"type":"messages_get",
"id": "<uuid>",
"data": {
"user_id": "<user-id>",
"amount": int,
"offset": int
}
}
```
##### `RES:`
```json
{
"sender_id": "<iota-id>",
"type": "messages_get",
"id": "<uuid>",
"data": {
"messages": [
{
"sent_by_self": true,
"timestamp": 0, // UNIX Timestamp for time sent
"content": "<markdown (encrypted)>",
"files": [
{
"name": "<cool name>",
"id": "<uuid>",
"type": "[ image | image_top_right | file ]"
}
],
"tint": "<hex color>",
"avatar": false, // unless false key is removed
"display": false // unless false key is removed
}
]
}
}
```
### Send a message to other Iota
##### `REQ:`
```json
{
"type": "message_send",
"id": "<message_id>",
"data": {
"receiver_id": "99999999-8888-7777-6666-555555555555",
"content": "Hello, how are you?"
}
}
```
##### `RES:`
```json
{
"type": "message",
"id": "<message_id>",
"receiver": "<user_id>"
}
```
### Receive live message (`message_other_iota`)
##### `UPDATE:`
```json
{
"type": "message_live",
"id": "<message_id>",
"receiver": "<user_id>",
"data": {
"send_time": unixstamp,
"message": "<content>",
"sender_id": "99999999-8888-7777-6666-555555555555"
}
}
```
## Communities
### Client storing a community on their Iota
##### `REQ:`
```json
{
"type": "add_community",
"id": "<message_id>",
"receiver": "<user_id>",
"data": {
"community_address": "community_address",
"community_title": "community_title",
"position": "x.y.z"
}
}
```
##### `RES:`
```json
{
"type": "add_community",
"id": "<message_id>",
"receiver": "<user_id>",
"data": {}
}
```
### Client loading communities from their Iota
##### `REQ:`
```json
{
"type": "get_communities",
"id": "<message_id>",
"data": {}
}
```
##### `RES:`
```json
{
"type": "get_community",
"id": "<message_id>",
"receiver": "<user_id>",
"data": {
"communities": [
{
"community_address": "enc_community_address",
"community_title": "enc_community_title",
"position": "x.y.z" // Frontend defines folders etc
},
{
"community_address": "enc_community_address",
"community_title": "enc_community_title",
"position": "x.y.z"
}
]
}
}
```
### Remove a community
##### `REQ:`
```json
{
"type": "remove_community",
"id": "<message_id>",
"data": {
"community_address": "community-uuid-or-address"
}
}
```
##### `RES`:
```json
{
"type": "remove_community",
"id": "<message_id>",
"receiver": "<user_id>"
}
```
## User Settings
### Save user Settings on Iota
##### `REQ:`
```json
{
"type": "settings_save",
"id": "<message_id>",
"data": {
"setting_name": "<name of category>",
"payload": {
"this": "will",
"be": "saved",
"on": "the",
"iota": "!"
}
}
}
```
##### `RES:`
```json
{
"type": "settings_save",
"id": "<message_id>",
"receiver": "<user_id>",
"data": {}
}
```
### Load user Settings
##### `REQ:`
```json
{
"type": "settings_load",
"id": "<message_id>",
"data": {
"setting_name": "<name of category>"
}
}
```
##### `RES:`
```json
{
"type": "settings_load",
"id": "<message_id>",
"receiver": "<user_id>",
"data": {
"setting_name": "<name of category>",
"payload": {
"this": "will",
"be": "saved",
"on": "the",
"iota": "!"
}
}
}
```

View file

@ -0,0 +1,132 @@
---
title: Iota Frontend
---
# API
#### `/api/appstate/`
##### Header:
**size**, default is 50
##### `RES:`
```json
{
"cpu": [0],
"ram": [0],
"ping": [0],
"net_down": [0],
"net_up": [0]
}
```
#### `/api/users/add/`
##### Header:
**username**, no default, may not be taken on Auth prior
##### `RES:`
```json
{
"uuid": "",
"username": "",
"public_key": "",
"private_key_hash": "",
"displayname": ""
}
```
**displayname**, is only send if different from username
or
```json
{ "type": "error" }
```
#### `/api/users/get/`
##### `RES:`
```json
[
{
"uuid": "",
"username": "",
"public_key": "",
"private_key_hash": "",
"displayname": ""
}
]
```
#### `/api/users/remove/`
##### Header:
**username**, no default
##### `RES:`
```json
{}
```
#### `/api/communities/add/`
##### Header:
**name**, no default
##### `RES:`
```json
{ "type": "success" }
```
or
```json
{ "type": "error" }
```
#### `/api/communities/remove/`
##### Header:
**name**, no default
##### `RES:`
```json
{ "type": "success" }
```
or
```json
{ "type": "error" }
```
#### `/api/communities/get/`
##### Header:
**name**, no default
##### `RES:`
```json
[
{
"name": "",
"owner_id": "",
"members": "",
"public_key": "",
"connections": 0
}
]
```

View file

@ -0,0 +1,7 @@
---
title: Mods
---
> **Mods can expose sensitive data, look trough the source code and build them from source to minimize risk!**
Mods are used to add or change the functions of the Iota.

View file

@ -0,0 +1,57 @@
---
title: WSS Endpoints
---
The `Omega` can be reached by HTTPS request from `Client` and `Iota`.
`Omikron` servers establish a Secure Websocket when booting.
This documentation is split into `Omikron` (WSS) and `HTTPS`.
## Omikron
### Identification
Any message to the `Omega` will be ignored until Identification.
##### `REQ:`
```json
{
"type": "identification",
"data": {
"omikron": "<omikron-id>",
}
}
```
##### `REQ & RES:`
```json
{
"type": "challenge",
"data": {
"public_key": "<omegas public key>",
"challenge": "<random encrypted b64 string>"
}
}
```
##### `REQ & RES:`
```json
{
"type": "challenge_response",
"data": {
"challenge": "<decrypted b64 string>",
}
}
```
##### `RES:`
```json
{
"type": "identification_response",
"data": {
"accepted": boolean,
}
}
```

View file

@ -0,0 +1,22 @@
---
title: HTTPS Endpoints
---
#### GET `/api/get/omikron/`
Get an Omikron to connect to.
#### GET `/api/get/omikron/<omikron-id>`
Get an Omikron to connect to, when needing a certain omikron.
#### GET `/api/get/omikron/<user-id>`
Get an Omikron to connect to, when needing the Omikron a certain User / a certains user's Iota is connected to.
#### GET `/api/get/omikron/<iota-id>`
Get an Omikron to connect to, when needing the Omikron a certain Iota is connected to.
```json
{
"type": "omikron",
"data": {
"omikron_id": id,
"domain": "omikron.tensamin.net"
}
}
```

View file

@ -0,0 +1,219 @@
---
title: User Management
---
### Getting a user
Either username or user_id is required when getting a user profile, user_id is preferred.
##### `REQ:`
```json
{
"type": "get_user_data",
"id": "<uuid>",
"data": {
"username": "<username>",
"user_id": "<user id>"
}
}
```
##### `RES:`
```json
{
"type": "get_user_data",
"id": "<uuid>",
"data": {
"user_id": user id,
"iota_id": iota id,
"created_at": int, // UNIX Timestamp
"username": "<username>",
"display": "<display name>",
"avatar": "<base64 avatar>",
"about": "<base64 about>",
"status": "<status>",
"public_key": "<base64 public key>",
"sub_level": int,
"sub_end": int
}
}
```
### Change Data about user
##### `REQ:`
```json
{
"type": "change_user_data",
"id": "<uuid>",
"data": {
"user_id": int,
"public_key": "",
"username": "",
"display": "",
"avatar": "",
"about": "",
"status": ""
}
}
```
##### `RES:`
```json
{
"type": "success",
"id": "<uuid>"
}
```
### Changing the iota
Provide the users current and new Reset-Token.
##### `REQ:`
```json
{
"type": "change_user_data",
"id": "<uuid>",
"data": {
"iota_id": "<uuid>",
"reset_token": "<base64 random bytes>",
"new_token": "<base64 random bytes>"
}
}
```
##### `RES:`
```json
{
"type": "success",
"id": "<uuid>"
}
```
### Get a Register-ID
You can use this to register a User or Iota. The User-creation process timeouts after 1 hour.
##### `REQ:`
```json
{
"type": "get_register",
"id": "<uuid>"
}
```
##### `RES:`
```json
{
"type": "get_register",
"id": "<uuid>",
"data": {
"register_id": id (unix timestamp)
}
}
```
### Complete a Registration
Complete a registration, both for Iota's and User's.
#### User:
##### `REQ:`
```json
{
"type": "complete_register_user",
"id": "<uuid>",
"data": {
"user_id": id (must be provided by get_register),
"username": "",
"public_key": "",
"username": "",
"iota_id": id,
"reset_token": ""
}
}
```
##### `RES:`
```json
{
"type": "success"
}
```
#### Iota:
##### `REQ:`
```json
{
"type": "complete_register_iota",
"id": "<uuid>",
"data": {
"iota_id": id,
"public_key": "<base64 public key>"
}
}
```
##### `RES:`
```json
{
"type": "success"
}
```
### Delete a User
##### `REQ:`
```json
{
"type": "delete_profile",
"id": "<uuid>",
"data": {
"user_id": id
}
}
```
##### `RES:`
```json
{
"type": "success"
}
```
### Delete an Iota
##### `REQ:`
```json
{
"type": "delet_profile",
"id": "<uuid>",
"data": {
"iota_id": id
}
}
```
##### `RES:`
```json
{
"type": "success"
}
```

View file

@ -0,0 +1,68 @@
---
title: Calling
---
Calling authentication happens on the Omikron and the actual traffic goes trough a self hosted instance of LiveKit. The self hosted LiveKit instance also acts as the signaling server for the calls. The Omikron only authenticates users to join calls.
## Getting a `Call-Token`
To get a `Call-Token` provide a `Call-ID`, when the `Call-ID` provided is currently in use and the user is not invited an error will be returned.
Else:
##### `REQ:`
```json
{
"type": "call_token",
"data": {
"call_id": "<uuid>"
}
}
```
##### `RES:`
```json
{
"type": "call_token",
"data": {
"call_token": "<token>"
}
}
```
## Inviting someone
Inviting someone to a call that does not exist or you're not invited to will result in an error.
##### `REQ:`
```json
{
"type": "call_invite",
"data": {
"call_id": "<uuid>",
"receiver_id": "<uuid>"
}
}
```
##### `RES:`
```json
{
"type": "success"
}
```
##### `FORWARD:`
```json
{
"type": "call_invite",
"data": {
"call_id": "<uuid>",
"sender_id": "<uuid>"
}
}
```

View file

@ -0,0 +1,177 @@
---
title: Endpoints
---
To use the `Omikrons` functions a Secure Websocket connection must be established.
Where to connect is provided by the `Omega` Server.
All entries are split into `Iota` & `Client`.
As the `Omikron` connects the `Iota` and `Client` by passing messages from one to the other all Communication from `Iota` to `Client` has to contain a `receiver_id`
The `Omikron` will add a `sender_id` to Messages from `Client` to the `Iota`.
The `receiver_id` and `sender_id` of the `Omikron` server are `22222222-2222-2222-2222-222222222222`.
## Identification
Any message to the `Omikron` will be ignored until Identification.
### Iota
##### `REQ:`
```json
{
"type": "identification",
"data": {
"iota_id": "<iota-id>",
}
}
```
##### `REQ & RES:`
```json
{
"type": "challenge",
"data": {
"public_key": "<omikrons public key>",
"challenge": "<random encrypted b64 string>"
}
}
```
##### `REQ & RES:`
```json
{
"type": "challenge_response",
"data": {
"challenge": "<decrypted b64 string>",
}
}
```
##### `RES:`
```json
{
"type": "identification_response",
"data": {
"accepted": boolean,
}
}
```
---
### Client
This is a two step process.
Get a challenge:
#### `REQ:`
```json
{
"id": "<uuid>",
"type": "identification",
"data": {
"user_id": "<user-id>"
}
}
```
#### `RES:`
```json
{
"id": "<uuid>",
"type": "challenge",
"data": {
"challenge": "<base64 string>",
"public_key": "<base64 string>"
}
}
```
Send back the solved challenge:
#### `REQ:`
```json
{
"id": "<uuid>",
"type": "challenge_response",
"data": {
"challenge": "<decrypted challenge>"
}
}
```
#### `RES:`
```json
{
"id": "<uuid>",
"type": "identification_response",
"data": {}
}
```
## Ping & Pong
A ping request comes from the Client or Iota and the Omikron returns a pong answer.
The ping request should contain the last Client or Iota ping and the pong answer will contain the last ping of the Omikron.****
### Iota
#### REQ:
```json
{
"id": "<uuid>",
"type": "ping",
"data": {
"last_ping": long
}
}
```
#### RES:
```json
{
"id": "<uuid>",
"type": "pong",
"data": {
"user_ping": {
"<user-id>": long,
"<user-id>": long
}
}
}
```
### Client
#### `REQ:`
```json
{
"id": "<uuid>",
"type": "ping",
"data": {
"last_ping": long
}
}
```
#### `RES:`
```json
{
"id": "<uuid>",
"type": "pong",
"data": {
"last_ping": long
}
}
```

View file

@ -0,0 +1,220 @@
---
title: User Management
---
# THESE MESSAGES ARE FORWARDED FROM THE OMEGA
There are additional security checks when Changing data, Changing the Iota, Deleting a User, Deleting an Iota. These messages can only be run when the affected User / Iota is identified.
### Getting a user
Either username or user_id is required when getting a user profile, user_id is preferred.
##### `REQ:`
```json
{
"type": "get_user_data",
"id": "<uuid>",
"data": {
"username": "<username>",
"user_id": "<user id>"
}
}
```
##### `RES:`
```json
{
"type": "get_user",
"id": "<uuid>",
"data": {
"user_id": user id,
"iota_id": iota id,
"created_at": int, // UNIX Timestamp
"username": "<username>",
"display": "<display name>",
"avatar": "<base64 avatar>",
"about": "<base64 about>",
"status": "<status>",
"public_key": "<base64 public key>",
"sub_level": int,
"sub_end": int
}
}
```
### Change Data about user
##### `REQ:`
```json
{
"type": "change_user_data",
"id": "<uuid>",
"data": {
"user_id": "",
"public_key": "",
"username": "",
"display": "",
"avatar": "",
"about": "",
"status": ""
}
}
```
##### `RES:`
```json
{
"type": "success",
"id": "<uuid>"
}
```
### Changing the iota
Provide the users current and new Reset-Token.
##### `REQ:`
```json
{
"type": "change_user_data",
"id": "<uuid>",
"data": {
"iota_id": "<uuid>",
"reset_token": "<base64 random bytes>",
"new_token": "<base64 random bytes>"
}
}
```
##### `RES:`
```json
{
"type": "success",
"id": "<uuid>"
}
```
### Get a Register-ID
You can use this to register a User or Iota. The User-creation process timeouts after 1 hour.
##### `REQ:`
```json
{
"type": "get_register",
"id": "<uuid>"
}
```
##### `RES:`
```json
{
"type": "get_register",
"id": "<uuid>",
"data": {
"user_id": id (unix timestamp)
}
}
```
### Complete a Registration
Complete a registration, both for Iota's and User's.
#### User:
##### `REQ:`
```json
{
"type": "complete_register_user",
"id": "<uuid>",
"data": {
"user_id": id (must be provided by get_register),
"username": "",
"public_key": "",
"username": "",
"iota_id": id,
"reset_token": ""
}
}
```
##### `RES:`
```json
{
"type": "success"
}
```
#### Iota:
##### `REQ:`
```json
{
"type": "complete_register_iota",
"id": "<uuid>",
"data": {
"iota_id": id,
"public_key": "<base64 public key>"
}
}
```
##### `RES:`
```json
{
"type": "success"
}
```
### Delete a User
##### `REQ:`
```json
{
"type": "delete_profile",
"id": "<uuid>",
"data": {
"user_id": id
}
}
```
##### `RES:`
```json
{
"type": "success"
}
```
### Delete an Iota
##### `REQ:`
```json
{
"type": "delet_profile",
"id": "<uuid>",
"data": {
"iota_id": id
}
}
```
##### `RES:`
```json
{
"type": "success"
}
```

11
src/content/docs/index.md Normal file
View file

@ -0,0 +1,11 @@
---
title: Introduction
---
https://www.youtube.com/watch?v=dQw4w9WgXcQ
Tensamin is built with love in Germany (Lower Saxony aka. the best state ever). I was explicitly asked to mention that Tensamin was created in Lower Saxony, so just so you know: Tensamin was created in Lower Saxony
:::note
> **Fun fact:** Tensamin was created and is being developed in Lower Saxony, Germany.

View file

@ -0,0 +1,105 @@
---
title: Installation
---
# Client
You can download the client from [GitHub](https://github.com/Tensamin/Client/releases) or directly from the [Homepage](https://tensamin.net).
For linux we have `.deb` and `.rpm` files on github, two AUR packages and a Nix Flake.
### Arch Linux
This includes [these distros](https://wiki.archlinux.org/title/Arch-based_distributions)
##### Easy Install
- `paru -S tensamin-bin`
- `paru -S tensamin-git`
##### Manual Install
```sh
git clone https://aur.archlinux.org/tensamin-bin
cd tensamin-bin
makepkg -si
```
```sh
git clone https://aur.archlinux.org/tensamin-git
cd tensamin-git
makepkg -si
```
### Nix Flake
**flake.nix**
1. Add it to the inputs
```nix
{
# ...
inputs = {
tensamin.url = "github:Tensamin/Client";
# ...
};
# ...
}
```
2. Add it to the system packages
**configuration.nix**
```nix
{
inputs,
pkgs,
...
}: {
# ...
environment.systemPackages = [
inputs.tensamin.packages.${pkgs.stdenv.hostPlatform.system}.default
];
# ...
}
```
# Iota
We provide a docker container and binary download on [GitHub](https://github.com/Tensamin/Iota/releases).
### Docker
Using `docker run`
```bash
docker run tensamin/iota:latest
```
or using Docker-Compose
```yaml
services:
app:
container_name: iota
image: tensamin/iota:latest
ports:
- "1984:1984" # Needed for communties and web ui
volumes:
- data:/app
- ./users.json:/app/users.json
- ./config.json:/app/config.json
volumes:
data:
```
### Build from source
```bash
git clone https://github.com/Tensamin/Iota
cd Iota
cargo build --release
./target/release/iota
```

View file

@ -0,0 +1,5 @@
---
title: Regenerate Private Key
---
Guide will be available in the not-so-near future.

16
src/logo/dark.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 297 KiB

16
src/logo/light.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 297 KiB

28
src/theme.css Normal file
View file

@ -0,0 +1,28 @@
@layer base, starlight, theme, components, utilities;
@import "tailwindcss";
@import "@astrojs/starlight-tailwind";
@import "tailwindcss/theme.css" layer(theme);
@import "tailwindcss/utilities.css" layer(utilities);
@theme {
--font-sans:
"Inter", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
Helvetica, Arial, sans-serif;
--font-mono:
"JetBrains Mono", SF Mono, SF Mono Regular, Consolas, "Liberation Mono",
Menlo, Courier, monospace;
--color-accent-200: #b7cecc;
--color-accent-600: #287771;
--color-accent-900: #193936;
--color-accent-950: #152826;
--color-gray-100: #f3f7f8;
--color-gray-200: #e8eff1;
--color-gray-300: #bbc4c6;
--color-gray-400: #7e8f93;
--color-gray-500: #4b5b5f;
--color-gray-700: #2c3b3f;
--color-gray-800: #1b2a2d;
--color-gray-900: #13191b;
}