From d00513ed277f83d37ff6fd2f293e0a7dd47b568b Mon Sep 17 00:00:00 2001
From: "Evgeny @ SimpleX Chat"
<259188159+evgeny-simplex@users.noreply.github.com>
Date: Wed, 4 Nov 2026 09:07:06 +0000
Subject: [PATCH] docs: user guide matches the 7.1 apps (#7997)
* docs: user guide for the 7.1 apps
* docs, website: guide order, badge benefits, message expiry; soft line breaks on the site
* docs: guide videos for the first profile, invitations, joining and the address
* docs: guide screens with the iPhone status bar
* docs: guide shows full and cut screens only
* docs: guide pages corrected in place, keeping master's structure
* docs: group chat and SimpleX address pictures in the iPhone frame
* docs: plainer wording in the guide
* docs: guide checked against how SimpleX explains its features
* docs: guide answers on profiles, channel privacy, SOCKS and names
* docs: android guide picture from the emulator in the pixel 7 frame
---
...5.8-private-message-routing-chat-themes.md | 2 +-
...-v6-private-routing-new-user-experience.md | 2 +-
...eak-law-lead-to-mass-scale-surveillance.md | 4 +-
docs/FAQ.md | 10 +-
docs/contributing/CODE.md | 1 +
docs/guide/README.md | 82 ++-
docs/guide/app-settings.md | 196 ++++--
docs/guide/audio-video-calls.md | 55 +-
docs/guide/channel-webpage.md | 38 +-
docs/guide/channels.md | 245 +++++++
docs/guide/chat-profiles.md | 92 ++-
...app-settings-advanced-network-settings.png | Bin 0 -> 144656 bytes
docs/guide/images/app-settings-settings.png | Bin 0 -> 112899 bytes
.../images/audio-video-calls-settings.png | Bin 0 -> 123164 bytes
docs/guide/images/channels-create.png | Bin 0 -> 96292 bytes
.../images/chat-profiles-create-profile.png | Bin 0 -> 87275 bytes
.../images/chat-profiles-hide-profile.png | Bin 0 -> 106696 bytes
docs/guide/images/groups-chat.png | Bin 0 -> 261767 bytes
docs/guide/images/groups-create.png | Bin 0 -> 92069 bytes
docs/guide/images/groups-info.png | Bin 0 -> 109491 bytes
docs/guide/images/groups-member-info.png | Bin 0 -> 92294 bytes
docs/guide/images/groups-preferences.png | Bin 0 -> 140329 bytes
docs/guide/images/groups-profile.png | Bin 0 -> 89078 bytes
.../linked-devices-connect-to-desktop.png | Bin 0 -> 80202 bytes
.../images/making-connections-address.png | Bin 0 -> 139162 bytes
.../making-connections-contact-info.png | Bin 0 -> 109764 bytes
.../making-connections-video-address.jpg | Bin 0 -> 45812 bytes
.../making-connections-video-invite.jpg | Bin 0 -> 38816 bytes
.../images/making-connections-video-join.jpg | Bin 0 -> 41444 bytes
docs/guide/images/managing-data-chat-data.png | Bin 0 -> 94587 bytes
.../images/managing-data-migrate-here.png | Bin 0 -> 87236 bytes
.../guide/images/managing-data-passphrase.png | Bin 0 -> 110934 bytes
.../images/notifications-android-modes.png | Bin 0 -> 159868 bytes
docs/guide/images/notifications-ios-modes.png | Bin 0 -> 102778 bytes
.../images/privacy-security-verify-code.png | Bin 0 -> 117616 bytes
docs/guide/images/readme-get-started.png | Bin 0 -> 124960 bytes
.../guide/images/readme-video-get-started.jpg | Bin 0 -> 47863 bytes
docs/guide/images/send-messages-chat.png | Bin 0 -> 331605 bytes
.../send-messages-contact-preferences.png | Bin 0 -> 152468 bytes
.../images/supporter-badges-redeem-code.png | Bin 0 -> 88482 bytes
.../supporter-badges-support-simplex.png | Bin 0 -> 122930 bytes
docs/guide/linked-devices.md | 152 +++++
docs/guide/making-connections.md | 68 +-
docs/guide/managing-data.md | 76 ++-
docs/guide/notifications.md | 154 +++++
docs/guide/privacy-security.md | 72 ++-
docs/guide/register-simplex-name.md | 39 +-
docs/guide/secret-groups.md | 66 +-
docs/guide/send-messages.md | 93 ++-
docs/guide/supporter-badges.md | 182 ++++++
scripts/docs/frame-guide-images.py | 599 ++++++++++++++++++
website/.eleventy.js | 2 +-
website/langs/ar.json | 3 -
website/langs/az.json | 3 -
website/langs/bg.json | 3 -
website/langs/cs.json | 3 -
website/langs/de.json | 3 -
website/langs/en.json | 12 +-
website/langs/es.json | 3 -
website/langs/fa.json | 3 -
website/langs/fi.json | 3 -
website/langs/fr.json | 3 -
website/langs/he.json | 3 -
website/langs/hu.json | 3 -
website/langs/id.json | 3 -
website/langs/it.json | 3 -
website/langs/ja.json | 3 -
website/langs/nl.json | 3 -
website/langs/pl.json | 3 -
website/langs/pt_BR.json | 3 -
website/langs/ro.json | 3 -
website/langs/ru.json | 3 -
website/langs/tr.json | 3 -
website/langs/uk.json | 3 -
website/langs/zh_Hans.json | 3 -
website/langs/zh_Hant.json | 3 -
website/src/_data/docs_sidebar.json | 7 +-
website/src/_data/guide_dropdown.json | 28 +-
78 files changed, 2036 insertions(+), 310 deletions(-)
create mode 100644 docs/guide/channels.md
create mode 100644 docs/guide/images/app-settings-advanced-network-settings.png
create mode 100644 docs/guide/images/app-settings-settings.png
create mode 100644 docs/guide/images/audio-video-calls-settings.png
create mode 100644 docs/guide/images/channels-create.png
create mode 100644 docs/guide/images/chat-profiles-create-profile.png
create mode 100644 docs/guide/images/chat-profiles-hide-profile.png
create mode 100644 docs/guide/images/groups-chat.png
create mode 100644 docs/guide/images/groups-create.png
create mode 100644 docs/guide/images/groups-info.png
create mode 100644 docs/guide/images/groups-member-info.png
create mode 100644 docs/guide/images/groups-preferences.png
create mode 100644 docs/guide/images/groups-profile.png
create mode 100644 docs/guide/images/linked-devices-connect-to-desktop.png
create mode 100644 docs/guide/images/making-connections-address.png
create mode 100644 docs/guide/images/making-connections-contact-info.png
create mode 100644 docs/guide/images/making-connections-video-address.jpg
create mode 100644 docs/guide/images/making-connections-video-invite.jpg
create mode 100644 docs/guide/images/making-connections-video-join.jpg
create mode 100644 docs/guide/images/managing-data-chat-data.png
create mode 100644 docs/guide/images/managing-data-migrate-here.png
create mode 100644 docs/guide/images/managing-data-passphrase.png
create mode 100644 docs/guide/images/notifications-android-modes.png
create mode 100644 docs/guide/images/notifications-ios-modes.png
create mode 100644 docs/guide/images/privacy-security-verify-code.png
create mode 100644 docs/guide/images/readme-get-started.png
create mode 100644 docs/guide/images/readme-video-get-started.jpg
create mode 100644 docs/guide/images/send-messages-chat.png
create mode 100644 docs/guide/images/send-messages-contact-preferences.png
create mode 100644 docs/guide/images/supporter-badges-redeem-code.png
create mode 100644 docs/guide/images/supporter-badges-support-simplex.png
create mode 100644 docs/guide/linked-devices.md
create mode 100644 docs/guide/notifications.md
create mode 100644 docs/guide/supporter-badges.md
create mode 100644 scripts/docs/frame-guide-images.py
diff --git a/blog/20240604-simplex-chat-v5.8-private-message-routing-chat-themes.md b/blog/20240604-simplex-chat-v5.8-private-message-routing-chat-themes.md
index 9bd342a146..207d1b842b 100644
--- a/blog/20240604-simplex-chat-v5.8-private-message-routing-chat-themes.md
+++ b/blog/20240604-simplex-chat-v5.8-private-message-routing-chat-themes.md
@@ -95,7 +95,7 @@ The diagram below shows all the encryption layers used in private message routin
For private routing to work, both the forwardig and the destination relays should support the updated messaging protocol - it is supported from v5.8 of the messaging relays. It is already released to all relays preset in the app, and available as a self-hosted server. We updated [the guide](../docs/SERVER.md) about how to host your own messaging relays.
-Because many self-hosted relays did not upgrade yet, private routing is not enabled by default. To enable it, you can open *Network & servers* settings in the app and change the settings in *Private message routing* section. We recommend setting *Private routing* option to *Unprotected* (to use it only with unknown relays and when not connecting via Tor) and *Allow downgrade* to *Yes* (so messages can still be delivered to the messaging relays that didn't upgrade yet) or to *When IP hidden* (in which case the messages will fail to deliver to unknown relays that didn't upgrade yet unless you connect to them via Tor).
+Because many self-hosted relays did not upgrade yet, private routing is not enabled by default. To enable it, you can open *Network & servers* settings in the app and change the settings in *Private message routing* section. We recommend setting *Private routing* option to *Unprotected* (to use it only with unknown relays and when not connecting via Tor) and *Allow downgrade* to *Yes* (so messages can still be delivered to the messaging relays that didn't upgrade yet) or to *When IP hidden* (in which case the messages will fail to deliver to unknown relays that didn't upgrade yet unless you connect to them via Tor).\
See [F.A.Q. section](../docs/FAQ.md#does-simplex-protect-my-ip-address) for answers about private message routing.
Read more about the technical design of the private message routing in [this document](https://github.com/simplex-chat/simplexmq/blob/stable/rfcs/done/2023-09-12-second-relays.md) and in [the messaging protocol specification](https://github.com/simplex-chat/simplexmq/blob/stable/protocol/simplex-messaging.md#proxying-sender-commands).
diff --git a/blog/20240814-simplex-chat-vision-funding-v6-private-routing-new-user-experience.md b/blog/20240814-simplex-chat-vision-funding-v6-private-routing-new-user-experience.md
index de9e33a87e..d6aba6ef62 100644
--- a/blog/20240814-simplex-chat-vision-funding-v6-private-routing-new-user-experience.md
+++ b/blog/20240814-simplex-chat-vision-funding-v6-private-routing-new-user-experience.md
@@ -60,7 +60,7 @@ We are very happy to announce that we now have funds to move faster – we raise
When Jack discovered SimpleX Chat last year, he [posted on Twitter](https://x.com/jack/status/1661681076983529479):
-> Better than Signal? Looks promising.
+> Better than Signal? Looks promising.\
> A few bugs and UX issues but great foundation. Love that it’s public domain.
And [on Nostr](https://primal.net/e/note1txz9xmmc456kwcg7zrsrtqrhn7as29ptuz0qulu452k8n85hsshqq6uh6q):
diff --git a/blog/20241218-oppose-digital-ids-they-break-law-lead-to-mass-scale-surveillance.md b/blog/20241218-oppose-digital-ids-they-break-law-lead-to-mass-scale-surveillance.md
index 8a8fffffb4..add075e40a 100644
--- a/blog/20241218-oppose-digital-ids-they-break-law-lead-to-mass-scale-surveillance.md
+++ b/blog/20241218-oppose-digital-ids-they-break-law-lead-to-mass-scale-surveillance.md
@@ -34,14 +34,14 @@ To make your voice heard, email your MP expressing your rejection of digital IDs
*I object to the introduction of digital IDs in pubs or any other public places for these reasons:*
-1. *It violates the European Convention of Human Rights, article 8: “Everyone has the right to respect for his private and family life” (https://fra.europa.eu/en/law-reference/european-convention-human-rights-article-8-0).*
+1. *It violates the European Convention of Human Rights, article 8: “Everyone has the right to respect for his private and family life” (https://fra.europa.eu/en/law-reference/european-convention-human-rights-article-8-0).*\
*Asking to present digital IDs when proof of identity is not legally required, even if it is optional, disrespects our privacy, and is therefore illegal.*
2. *It will not be an effective measure in reducing the violations of the law. People who want to circumvent it, will find a way.*
3. *It will increase crime, because combining a large amount of private information in a single system increases the risks of this information becoming available to criminals, who will exploit it for financial crimes and identity theft.*
*I kindly ask you to oppose this plan, both publicly and during any discussions in the UK Parliament.*
-*Sincerely yours,*
+*Sincerely yours,*\
*…*
2. [**Find the email address of your MP**](https://members.parliament.uk/members/Commons) and copy it to the email.
diff --git a/docs/FAQ.md b/docs/FAQ.md
index 21cb08417f..eb86d13c2e 100644
--- a/docs/FAQ.md
+++ b/docs/FAQ.md
@@ -82,7 +82,7 @@ When "Incognito Mode” is turned on, your currently chosen profile name and ima
It is quite a complex process, but fortunately all of this happens in the background, so it's simple to use.
-Whenever somebody connects to you via your address, they basically ask your client whether they want to establish connection. After that, you can either agree or disagree.
+Whenever somebody connects to you via your address, they basically ask your client whether they want to establish connection. After that, you can either agree or disagree.\
If interested, please read more: [Addresses and invitations](./guide/making-connections.md).
### How to configure and delete groups?
@@ -97,7 +97,7 @@ Yes! Currently, there are six emojis available. What's more, you can respond to
It's quite simple:
- one checkmark - message is delivered to the relay (the server).
-- two checkmarks - message is delivered to the recipient's device.
+- two checkmarks - message is delivered to the recipient's device.\
"sent" means accepted by the relay for delivery, "delivered" - stored on the recipient device.
Also see: [I do not see the second tick on the messages I sent](#i-do-not-see-the-second-tick-on-the-messages-i-sent)
@@ -178,12 +178,12 @@ becomes: `simplex:/i#E74vSxMwDnEx6DAvRCZmzBeZwwAseJUD/yVTHjaaH_EzL19DG7fvd46Mjry
### How to change servers to my own?
-Add your server in Settings -> Network & servers -> Your servers. If you have multiple profiles, you need to add your server in every profile.
+Add your server in Settings -> Network & servers -> Your servers. If you have multiple profiles, you need to add your server in every profile.\
After that, disable all preset servers. If you have multiple profiles, you must first add your server to all profiles for this option to be available.
To resolve SimpleX public names, if your server does not support it, you may leave preset servers enabled only for resolving the public names.
-Please note: configured servers only determine which servers will be used for the new connections (members/contacts). Previously created connections don't switch automatically. You can manually switch all existing contacts and small/important groups (each member needs to be switched), and then leave and re-join all large groups.
+Please note: configured servers only determine which servers will be used for the new connections (members/contacts). Previously created connections don't switch automatically. You can manually switch all existing contacts and small/important groups (each member needs to be switched), and then leave and re-join all large groups.\
You can switch contacts/members manually to another server by going to their profile and clicking on "Change receiving address", note that the current server must be online for the address change to work.
## Troubleshooting
@@ -420,7 +420,7 @@ SimpleX Chat Ltd is funded by private investors and venture capital. As an open-
Here are some reflections on VC funding being a necessity for a project at this scale, as well as sustainability and profitability for longtime operations: https://www.poberezkin.com/posts/2023-10-31-why-privacy-impossible-without-venture-funding.html
-And another perspective from a team member on the delicate balance of venture-backed and nonprofit structures, and the plans for the SimpleX network protocols to evolve under the stewardship of nonprofit entities in various jurisdictions, so that its continued evolution aligns more closely with the vision of community-driven, independent and transparent governance:
+And another perspective from a team member on the delicate balance of venture-backed and nonprofit structures, and the plans for the SimpleX network protocols to evolve under the stewardship of nonprofit entities in various jurisdictions, so that its continued evolution aligns more closely with the vision of community-driven, independent and transparent governance:\
[https://simplex.chat/blog/20240404-why-i-joined-simplex-chat-esraa-al-shafei.html](../blog/20240404-why-i-joined-simplex-chat-esraa-al-shafei.md).
### What will be the business model?
diff --git a/docs/contributing/CODE.md b/docs/contributing/CODE.md
index fcdbeb4081..7c67fb4a4f 100644
--- a/docs/contributing/CODE.md
+++ b/docs/contributing/CODE.md
@@ -64,6 +64,7 @@ Some files that use CPP language extension cannot be formatted as a whole, so in
- **Never move existing code or sections around** - add new content at appropriate locations without reorganizing existing structure.
- When adding new sections to documents, continue the existing numbering scheme.
- Minimize diff size - prefer small, targeted changes over reorganization.
+- When you change what users see or do in the apps, update the user guide (docs/guide) in the same pull request.
**Code analysis and review:**
- Trace data flows end-to-end: from origin, through storage/parameters, to consumption. Flag values that are discarded and reconstructed from partial data (e.g. extracted from a URI missing original fields) — this is usually a bug.
diff --git a/docs/guide/README.md b/docs/guide/README.md
index fe1546af0a..cb39d81102 100644
--- a/docs/guide/README.md
+++ b/docs/guide/README.md
@@ -3,20 +3,25 @@ title: Quick start
---
# SimpleX Chat User Guide
-The first messaging platform that has no user identifiers of any kind — 100% private by design.
+The first messaging network that has no user identifiers of any kind.
## Contents
- [Quick start](#quick-start) - scroll down this page
+- [Making connections](./making-connections.md)
- [Sending messages](./send-messages.md)
-- [Secret groups](./secret-groups.md)
+- [Groups](./secret-groups.md)
+- [Channels](./channels.md)
- [Channel webpage](./channel-webpage.md)
- [Chat profiles](./chat-profiles.md)
- [Registering a SimpleX name](./register-simplex-name.md)
- [Managing data](./managing-data.md)
+- [Linked devices](./linked-devices.md)
- [Audio & video calls](./audio-video-calls.md)
+- [Notifications](./notifications.md)
- [Privacy & security](./privacy-security.md)
- [App settings](./app-settings.md)
+- [Supporter badges](./supporter-badges.md)
## Quick start
@@ -24,61 +29,98 @@ The first messaging platform that has no user identifiers of any kind — 100% p
After downloading SimpleX Chat via the links at https://simplex.chat:
-- Open the app.
-- Create a new profile by inputting your display name and full name (optional).
-- Tap on "Create".
+- Open the app and tap "Get started". On desktop, click "Create your profile".
+- Create a new profile by inputting your profile name.
+- Tap on "Create profile".
-This profile is local to the device, it is not stored anywhere else
+This profile is stored on your device and shared only with your contacts.
+SimpleX servers cannot see it.
+
+On desktop, the app then asks you to set a database passphrase or to use a
+random one, see [Database passphrase](./managing-data.md#database-passphrase).
+You can also click "Link a mobile" instead of "Create your profile" to use the
+chat profiles of your phone from the computer, see [Linked
+devices](./linked-devices.md).
### Choose notifications mode
-After you have created the chat profile the app will ask you to choose notifications mode.
+After you have created the chat profile, the app shows "Your network". On iOS
+and Android, tap "Setup notifications" there to choose notifications mode.
-
+
Please read their description, as on iOS it is trade-off between convenience and privacy, with instant notifications sharing more meta-data with the servers, and on Android it is a trade-off between notification delays and battery life.
You can read more about [the differences between notifications work on Android and iOS](../../blog/20220404-simplex-chat-instant-notifications.md).
+You can also tap "Setup routers" to choose server operators. Then tap
+"Continue", and "Accept" on the "Network commitments" screen to start using the
+app.
+
+To change notifications mode later, see [Notifications](./notifications.md).
+
### Connect to developers
-When you just start using the app, you can tap "chat with the developers" to ask any questions or just to test the app - feel free to send any test messages.
+When you just start using the app, you can connect to "Ask SimpleX Team" to ask
+any questions or just to test the app - feel free to send any test messages.
-This button will disappear once you make the first connection. To connect to the developers later:
+Each new chat profile has this contact. To connect, tap the pencil button, tap
+"Ask SimpleX Team" in the list of your contacts and choose "Use current profile"
+or "Use new incognito profile". You can also connect to the developers via the
+app settings:
- [Open the app settings](./app-settings.md#opening-the-app-settings).
-- Tap on "Send questions and ideas".
+- Tap on "Help & support", then "Send questions and ideas".
### Join some user groups
There are links to join several [user groups](../../README.md#join-user-groups) on our GitHub page - join them to ask any questions and discuss ideas.
-You can also find some other user-managed groups via online search.
+You can also find groups and channels in [SimpleX
+Directory](https://simplex.chat/directory/), and some other user-managed groups
+via online search.
To join a group via a link:
- Get a link to a SimpleX user group, which you can get from your existing SimpleX conversations or by finding it online.
- Tap on a button in the lower right-hand of the screen.
-- Tap on "Connect via link / QR code" button.
+- Tap on "Scan / Paste link" (iOS), "Paste link / Scan" (Android) or "Paste
+ link" (desktop), and paste the link, or scan its QR code on iOS and Android.
+- Tap on "Open group", then "Join group".
### Connect to friends
- Tell your friends to download SimpleX Chat app via one of the links here: https://simplex.chat
-- Create a one-time link for each of you friends by tapping new chat button (Android: a floating pencil button in the bottom right corner, iOS: a pencil button in the top right corner)
-- Tap _Create one-time invitation link_.
+- Create a one-time link for each of your friends by tapping the pencil button
+ (in the bottom right corner, or in the top right corner on iOS when the
+ toolbar is at the top).
+- Tap "Create 1-time link".
- Share each link with a different friend, or alternatively let them scan a QR code.
-- You can optionally assign a different alias to each link, to know when they connect who is who, if they use incognito mode, for example.
-- To use your link or QR code, tell your friends to tap new chat button and then tap on "Connect via link / QR code".
-- They can either scan QR code or paste the link. If they opened the link in the browser, they need to tap "Open in mobile app" button on the page.
+- You can optionally set a different contact name for each link, to know when
+ they connect who is who, if they use incognito mode, for example: swipe the
+ pending connection in the chat list and tap "Name" (iOS), or long-press it
+ (Android) or right-click it (desktop) and choose "Set contact name".
+- To use your link or QR code, tell your friends to tap the pencil button and
+ then tap on "Scan / Paste link" (iOS), "Paste link / Scan" (Android) or "Paste
+ link" (desktop).
+- They can either scan QR code (iOS and Android) or paste the link, then tap
+ "Open new chat" and "Connect", see [Connect via a link or a
+ name](./making-connections.md#connect-via-a-link-or-a-name). If they opened
+ the link in the browser, they need to tap "Open SimpleX app" button on the
+ page.
-Watch the video on [the website](https://simplex.chat) that shows how it works.
+Watch the [video](https://youtu.be/2iIibhaoMhI) that shows how it works.
You can also create a [long-term contact address](./app-settings.md#your-simplex-contact-address).
### Explore the app
+Tap your profile image in the chat list toolbar to open the menu with your chat
+profiles, your SimpleX address, chat preferences and the app settings.
+
Most app settings are shared for all profiles, but some settings are specific to chat profile.
Read more in [App settings](./app-settings.md) page.
-Many conversation actions are available via long-press or swipe – try them!
+Many conversation actions are available via long-press or swipe (right-click on
+desktop) – try them!
diff --git a/docs/guide/app-settings.md b/docs/guide/app-settings.md
index 3a966e18e1..99e2caf7b6 100644
--- a/docs/guide/app-settings.md
+++ b/docs/guide/app-settings.md
@@ -8,18 +8,23 @@ title: App settings
To open app settings:
- Open the app.
-- Tap on your user profile image in the upper left-hand of the screen.
-- If you have more than one profile, tap the current profile again or choose Settings.
+- Tap on your user profile image in the lower left-hand of the screen (in the
+ upper left-hand, if the reachable toolbar is off in [Appearance](#appearance)).
+- Tap **Settings**.
## Your profile settings
-This section is labelled **"You"** in the app settings.
+These settings are in the menu that opens when you tap your user profile image.
+The menu also has **Use from desktop** (iOS and Android) or **Link a mobile**
+(desktop), see [Linked devices](./linked-devices.md).
### Your active profile
Tap on your avatar/name to update your current profile names and avatar.
-Display name cannot have any spaces and it is recommended to use latin characters and numbers to make it easier to type these names to the users who use [SimpleX Chat for the terminal](../CLI.md) (CLI).
+Display name can have spaces, but it is recommended to use latin characters and
+numbers to make it easier to type these names to the users who use [SimpleX Chat
+for the terminal](../CLI.md) (CLI).
**Please note**: When you save your profile, the update will be sent to all your contacts (excluding the contacts with whom your incognito profiles were shared). If you have a large number of contacts it can take several seconds.
@@ -31,13 +36,17 @@ This page allows adding and configuring your chat profiles. Please see [Your cha
This feature is unique to SimpleX Chat – it is independent from chat profiles.
-When "Incognito” is turned on, your current profile name and image are NOT shared with your new contacts. It allows connections with other people without any shared data – when you make new connections or join groups via a link a new random profile name will be generated for each contact or group.
+When you choose "Incognito" for a new connection, your current profile name and
+image are not shared with this contact or group. It allows connections with
+other people without any shared data – when you make new connections or join
+groups via a link a new random profile name will be generated for each contact
+or group.
-Please read more in [this post](../../blog/20220901-simplex-chat-v3.2-incognito-mode.md#incognito-mode).
+Please read more in [Incognito mode](./chat-profiles.md#incognito-mode).
### Your SimpleX contact address
-
+
This page allows you to create a long term address that can be used by other people to connect with you. Unlike 1-time invitation links, these addresses can be used many times, that makes them good to share online, e.g. on other social media platforms.
@@ -47,8 +56,6 @@ If you start receiving too many requests via this address it is always safe to r
See the comparison with [1-time invitation links](./making-connections.md#comparison-of-1-time-invitation-links-and-simplex-contact-addresses).
-Read more in [this post](../../blog/20221108-simplex-chat-v4.2-security-audit-new-website.md#auto-accept-contact-requests).
-
### Chat preferences
This page allows to configure the chat preferences that would apply to all contacts - they can be changed separately for each contact:
@@ -56,52 +63,78 @@ This page allows to configure the chat preferences that would apply to all conta
- _disappearing messages_ - to allow disappearing messages in the conversations with you, only if your contacts allow them.
- _delete for everyone_ - to allow irreversible message deletion (by default messages are marked as deleted, not fully deleted). "Yes" setting would allow it only if they allow it for you, and "Always" - even if they don't allow.
- _voice messages_ - to allow sending voice messages.
+- _message reactions_ - to allow message reactions.
+- _audio/video calls_ - to allow calls.
-To set chat preferences in each contact, tap contact name on top of the conversation and then choose "Contact preferences".
+To set chat preferences in each contact, tap contact name in the chat toolbar
+and then choose "Contact preferences".
-Group owners can set similar preferences for their groups, when the group is created or later: tap group name on top of the conversation and then choose "Group preferences".
+Group owners can set similar preferences for their groups, when the group is
+created or later: tap group name in the chat toolbar and then choose "Group
+preferences".
## Your app settings
-This section is labelled **"Settings"** in the app settings.
+Tap **Settings** in the menu to open these settings, see [Opening the app
+settings](#opening-the-app-settings).
+
+
+
+**Migrate to another device** is described in [Managing
+data](./managing-data.md#migrate-to-another-device), and **Audio & video calls**
+in [Audio & video calls](./audio-video-calls.md).
### Notifications
-This page allows to configure the notifications mode: instant, periodic or only when the app is running. There are some differences in how these options work on iOS and Android. Please read more in [this post](../../blog/20220404-simplex-chat-instant-notifications.md) about how notifications work.
+This page (iOS and Android) allows to configure the notifications mode: instant,
+periodic or only when the app is running. On iOS, the third mode is **No push
+server**: the app checks messages in the background when iOS allows it. There
+are some differences in how these options work on iOS and Android, see
+[Notifications](./notifications.md). Please read more in [this
+post](../../blog/20220404-simplex-chat-instant-notifications.md) about how
+notifications work.
-You can also configure whether the message preview is shown when the message arrives.
+You can also configure whether the message preview is shown when the message
+arrives. To do it, tap **Your privacy**, then **More privacy** and **Show
+preview**.
-**Please note**: For instant and periodic notifications to work on Android, you need to disable power optimization when prompted by the app, or later via the settings. Also, some variants of Android system require additional settings, for example MIU system on Xiaomi phones requires to enable "Auto start" for the app for the notification service to work. Please read [Don't kill my app](https://dontkillmyapp.com/) guide for any settings that may be required on your device.
+**Please note**: For instant and periodic notifications to work on Android, you need to disable power optimization when prompted by the app, or later via the settings. Also, some variants of Android system require additional settings, for example MIU system on Xiaomi phones requires to enable "Autostart" for the app for the notification service to work. Please read [Don't kill my app](https://dontkillmyapp.com/) guide for any settings that may be required on your device.
-Also, currently instant notifications have the highest battery consumption - we are working to reduce it to be less or the same as for periodic notifications.
+Also, on Android instant notifications have the highest battery consumption.
### Network & servers
-This page allows to configure your own SMP relays and change other network settings.
-
-
+This page allows to configure server operators and your own servers, and to
+change other network settings.
#### SMP servers
-
-
-By default, the app has preset relays configured – you can change them to your own.
+By default, the app uses the servers of two preset operators, SimpleX Chat and
+Flux. You can disable them and add your own servers in **Your servers**. When
+more than one operator is enabled, the app uses different operators in each
+conversation to protect your privacy.
This page also allows testing the connection with the servers.
-Read more in [this post](../../blog/20221206-simplex-chat-v4.3-voice-messages.md#smp-servers-configuration-and-password).
+Read how to host your own servers in [this guide](../SERVER.md).
-#### Use SOCKS proxy (Android only)
+#### Use SOCKS proxy
This option makes the app connect via a SOCKS proxy that should be provided by some other app running on your device.
The most typical use for this is to run Orbot app that provides a SOCKS proxy to connect via Tor network, but it can be some other app and it can proxy connections via some other overlay network.
+The option is available on all platforms. On Android and desktop, it is in
+**Network & servers**, and the default port is 9050. On iOS, it is in **Advanced
+network settings**, where you enter the IP address and the port of the proxy.
+
#### Use .onion hosts
##### Android
-**Use .onion hosts** option is only available when **Use SOCKS proxy** is enabled. You can choose:
+On Android and desktop, **Use .onion hosts** option is in **SOCKS proxy
+settings**, and it is only available when **Use SOCKS proxy** is enabled. You
+can choose:
- _no_: never use .onion hosts. Choose this option if your SOCKS proxy does not connect via Tor network.
- _when available_ (default): when SOCKS proxy is enabled the app assumes that it provides connections via Tor network and use .onion host addresses when SMP relays include them in their configuration.
@@ -109,107 +142,154 @@ The most typical use for this is to run Orbot app that provides a SOCKS proxy to
##### iOS
-
-
-While iOS does not support SOCKS proxies, you can install Orbot app that works as VPN provider. You can choose:
+On iOS, this option is in **Advanced network settings**. You can install Orbot
+app that works as VPN provider. You can choose:
- _no_ (default): do not use .onion hosts. Choose this option if you do not use Orbot or if you use VPN that proxies connections via some other overlay network.
- _when available_: use .onion host addresses when SMP relays include them in their configuration. Orbot VPN must be enabled for this option to work.
- _required_: always use .onion hosts. Choose this option if you use Orbot VPN and you want to avoid connections without Tor. In this case, if the SMP relay address does not include .onion host, the connection will fail. If you use this option, you can enable "Disable Orbot for non-onion traffic" option in Orbot settings making the rest of your device traffic to not use Tor.
-**Please note** VPN on iOS can send some traffic to the usual network, if, for example, VPN app crashes. You can configure enable always-on VPN mode on managed iOS devices, but this is not applicable to most individual devices.
+**Please note** VPN on iOS can send some traffic to the usual network, if, for
+example, VPN app crashes. You can enable always-on VPN mode on managed iOS
+devices, but this is not applicable to most individual devices.
#### Transport isolation (BETA)
-This option is only available if you have enabled developer tools.
+This option sets how the app isolates your traffic. With **Chat profile**, **App
+session** (default) and **Server**, the app uses a separate TCP connection for
+each chat profile. On Android and desktop, **App session** also uses new SOCKS
+credentials every time you start the app, and **Server** uses them for each
+server. With **Connection**, the app uses a separate TCP connection for each
+contact and group member.
-Please read the details in [this post](../../blog/20230204-simplex-chat-v4-5-user-chat-profiles.md#transport-isolation).
+The option is in **Advanced network settings**. On iOS, it is available after
+you enable [developer options](#show-developer-options). On Android and desktop,
+the **Connection** mode is available with developer options.
#### Advanced network settings
-
+
-If your network is slow, and connections to the servers keep failing (you would see a spinner on your contacts), please increase TCP and protocol timeouts in this page.
+If your network is slow, and connections to the servers keep failing (the server
+status icon in the chat list toolbar shows it), please increase TCP and protocol
+timeouts in this page.
+
+This page also has the settings of private message routing: "To protect your IP
+address, private routing uses your SMP servers to deliver messages." By default,
+**Private routing** is set to always.
### Privacy and security
+This page is labelled **Your privacy** in the app settings.
+
#### SimpleX Lock
-SimpleX Lock when enabled requires to pass the device authentication when you open the app or use some security- or privacy-sensitive features.
+SimpleX Lock when enabled requires to pass the device authentication or to enter
+the app passcode when you open the app or use some security- or
+privacy-sensitive features. You choose it in **Lock mode** (iOS and Android);
+the desktop app uses the app passcode.
-You will be offered to enable it after you open the app a few times.
+You will be offered to enable it once, when you have more than 2 chats (iOS) or
+more than 3 chats (Android and desktop).
To enable it later:
- [Open the app settings](#opening-the-app-settings).
-- Tap on "Privacy & security".
-- Toggle on "SimpleX Lock" slider.
-- Confirm your phone credentials.
+- Tap on "Your privacy".
+- Tap on "SimpleX Lock" and toggle on "Enable lock".
+- Confirm your phone credentials, or set the app passcode.
-Done! Now you will be required to authenticate when you start or resume the app after 30 seconds in background.
+Done! Now you will be required to authenticate when you start or resume the app
+after 30 seconds in background. You can change this time in **Lock after**.
#### Protect app screen
-
-
-This option hides the app screen in recent apps - it is enabled by default. On Android it also prevents screenshots.
+This option hides the app screen in recent apps on iOS and Android - it is
+enabled by default on Android. On Android it also prevents screenshots.
#### Auto Accept Images
-Auto-accepting images may reduce privacy – your contacts will know you are online.
+With this option, the app receives images, small videos and voice messages
+without asking – it is enabled by default.
- [Open the app settings](#opening-the-app-settings).
-- Tap on "Privacy & security".
-- Toggle on "Auto-accept images".
+- Tap on "Your privacy".
+- Toggle "Auto-accept images".
#### Send Link Previews
-Enabling sending link previews may reduce privacy – your app will be loading link preview from the website.
+Enabling sending link previews may reduce privacy – your app will be loading
+link preview from the website. The first time you type a link, the app asks
+**Enable link previews?**
- [Open the app settings](#opening-the-app-settings).
-- Tap on "Privacy & security".
+- Tap on "Your privacy".
- Toggle on "Send link previews".
#### SimpleX Links
+This option is in [Developer tools](#developer-tools), in the section
+**Deprecated options**.
+
This option affects how the links to connect to other SimpleX users or to join groups are shown in the conversations. You can choose between:
- _description_ (default): only the link description and server host name are shown. The link won't be opened in the browser.
- _full link_: the full link is shown. The link will still not be opened in the browser.
-- _via browser_: the full link is shown, and it will be opened in the browser. In this case, if the link domain is different from simplex.chat, the link will be shown in red color, as it might be malicious.
-
-Read more about [SimpleX Links security](../../blog/20221206-simplex-chat-v4.3-voice-messages.md#privacy-and-security-of-simplex-invitation-links).
### Appearance
This page allows configuring:
- interface language
-- app icon
+- app icon (iOS and Android)
- accent color
+- light or dark mode, dark mode colors, wallpaper and other theme colors
+- reachable toolbars at the bottom of the screen
+- chat layout, message shape and profile image shape
+- font size (Android and desktop) and zoom (desktop)
+- **Close to tray** (desktop): the app keeps running in the system tray to
+ receive messages after you close its window.
### Database passphrase & export
-This page allows to change the database passphrase, export and import the database and configure the message retention period.
+This page is labelled **Chat data** in the app settings. It allows to change the
+database passphrase, export and import the database and configure the message
+retention period.
-Read more in [Managing Your Data](./managing-data.md) page.
+Read more in [Managing data](./managing-data.md) page.
## Help & feedback
+In the app settings, it is labelled **Help & support**.
+
This section has information on how to use the app and the links to connect to the team. Please use [Send questions and ideas](https://simplex.chat/contact#/?v=1&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FK1rslx-m5bpXVIdMZg9NLUZ_8JBm8xTt%23%2F%3Fv%3D1%26dh%3DMCowBQYDK2VuAyEALDeVe-sG8mRY22LsXlPgiwTNs9dbiLrNuA7f3ZMAJ2w%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion) to connect to us via the chat to ask any questions, make any suggestions and report any issues.
## Support SimpleX Chat
+Tap **Support SimpleX** in the app settings to get a supporter badge, see
+[Supporter badges](./supporter-badges.md).
+
+These links are in **Help & support**, in the section **Support the project**:
+
- contribute - the link to the information about how to contribute and to donate to the project.
- rate the app - rate and review it on the App Store or Play Store - your feedback helps a lot.
- star on GitHub - that also helps us grow very much.
+The app settings also have **Crowdfunding on Wefunder**, in the section **Own a
+part of SimpleX Chat**: it opens **Invest in SimpleX Chat**, with a link to the
+SimpleX Chat crowdfunding on Wefunder. It is shown in the iOS app and in the
+Android app from Google Play when the store country is the United States or is
+not known, and in the desktop app and other Android builds in every country.
+
Thank you for your support!
## Developer tools
This page has options that normally are only needed for app developers and can be used to debug the app in case something is not working.
+To open it, tap the app version at the end of **Advanced settings** in the app
+settings, then **Developer** (iOS) or **Developer tools** (Android and desktop).
+
### Chat console
Here you can see and use console command with the chat core. None of this information is sent over the network, this is an internal communication between different parts of the app.
@@ -220,8 +300,16 @@ Please be careful - some of the commands can disrupt app functioning, only use t
### Confirm database upgrades
+This option is shown when [Show developer options](#show-developer-options) is
+enabled.
+
This option is off by default - the app database is migrated to the new version without any confirmations. Starting from v4.6.2 these migrations are reversible - you can rollback to the previous version(s) of the app (not earlier than v4.6.1). If you want to be asked a confirmation every time database is upgraded you may enable this option - this is not recommended, as it happens almost on every app update, and should not cause any concerns.
### Show developer options
-This option currently enables [Transport isolation mode](#transport-isolation-beta) option and also enables showing database IDs in contacts, groups and group members to simplify debugging via console commands.
+This option currently enables [Transport isolation
+mode](#transport-isolation-beta) option (on Android and desktop, its
+**Connection** mode) and also enables showing database IDs in contacts, groups
+and group members to simplify debugging via console commands. It also shows the
+section **Developer options**, with [Confirm database
+upgrades](#confirm-database-upgrades) and other options.
diff --git a/docs/guide/audio-video-calls.md b/docs/guide/audio-video-calls.md
index 8fc2bf95b2..914b563cee 100644
--- a/docs/guide/audio-video-calls.md
+++ b/docs/guide/audio-video-calls.md
@@ -1,21 +1,29 @@
---
-title: Audio & video Calls
+title: Audio & video calls
---
# Audio and Video Calls
SimpleX Chat allows you to make end-to-end encrypted audio and video calls with your contacts via WebRTC. Note: Group calls are not supported at this time.
+A call is end-to-end encrypted when both devices support it, and the call
+screen shows its encryption status.
+
## Making and accepting the calls
### How to make an audio call
1. Tap on a contact.
-2. Tap on the phone icon to the right of your contact's name at the top of the screen.
+2. Tap on the phone icon to the right of your contact's name in the chat toolbar,
+ and choose **Audio call**. The chat toolbar is at the top of the screen on
+ iOS, and at the bottom on Android and desktop by default.
+
+The phone icon is shown when the contact is connected and the **Audio/video
+calls** preference allows calls with this contact. Calls are allowed by default.
### How to make a video call
1. Tap on a contact.
-2. Tap on the three vertical dots on the top right-hand corner of the screen to access more options.
+2. Tap on the phone icon to the right of your contact's name.
3. Choose **Video call**.
### Accepting the calls
@@ -24,7 +32,9 @@ When there is an incoming call you have three options:
- accept: to connect the call
- reject: to reject the call, _without_ notifying the caller.
-- ignore: to temporarily dismiss the call, but in a way that it can be accepted later, if the caller is still waiting, via the **Accept call** message in the conversation with this contact.
+- ignore: to temporarily dismiss the call, but in a way that it can be accepted
+ later, if the caller is still waiting, via the **Answer call** message in the
+ conversation with this contact.
There is no time limit that the call invitation can remain active - as long as the caller is still waiting, you can accept the call any time later.
@@ -35,7 +45,7 @@ The call can be accepted from the lock screen, both on Android (it needs to be e
SimpleX Chat shows an incoming call on your device's lock screen by default. However, you can change this behavior in the app settings menu.
1. Open the app settings menu.
-2. Tap **Audio and Video calls**.
+2. Tap **Audio & video calls**.
3. On the **Calls on lock screen** drop-down list, choose from the following three options:
- Disable - the call will show as a notification.
- Show - the call will show on the lock screen, you need to unlock the device and the app to accept it.
@@ -45,41 +55,56 @@ SimpleX Chat shows an incoming call on your device's lock screen by default. How
### Calls on lock screen on iOS
-
-
By default, SimpleX Chat uses native iOS call interface, where allowed, to show incoming calls on the lock screen. You can disable it:
1. Open the app settings menu.
-2. Tap **Audio and Video calls**.
+2. Tap **Audio & video calls**.
3. Toggle the **Use iOS call interface** switch off.
**Please note**: iOS call interface allows accepting the calls without unlocking the device and the app. If this is undesirable, please disable it – the calls will show as notifications in this case.
-Read more in [this post](../../blog/20230328-simplex-chat-v4-6-hidden-profiles.md#improved-audiovideo-calls).
+### During a call
+
+On iOS and Android, the buttons on the call screen turn the microphone and the
+camera on and off, switch the speaker, flip the camera and end the call. To use
+the app during a call, tap the back button on the call screen. Tap the green bar
+at the top of the app to return to the call.
+
+On desktop, the call opens in a tab of your default web browser. Closing the tab
+ends the call.
## Advanced call settings
### WebRTC ICE servers
-
-
SimpleX Chat uses a preset relay server to hide your IP address from your contacts by default, but it can also observe the duration of your calls. If you don't want that, you can configure and use your self-hosted WebRTC relay servers instead for further control of your calls.
1. Open the app settings menu.
-2. Tap **Audio and Video calls**.
+2. Tap **Audio & video calls**.
3. Tap **WebRTC ICE servers**.
4. Toggle the **Configure ICE servers** switch on.
5. Enter your ICE server addresses (one per line).
6. Tap **Save**.
-**Please note**: unlike messaging relays (SMP servers), the configuration of WebRTC ICE servers is stored on the current device, not in the chat database. if you transfer the chat database to another device you need to update this configuration.
+**Please note**: the configuration of WebRTC ICE servers is saved with the other
+app settings in the exported chat database, and it is restored when you import
+the database or migrate to another device.
### Always use relay
Audio and video calls on SimpleX Chat are routed via a TURN relay server by default. Optionally you can disable this and use peer-to-peer (P2P) instead, when it is supported by your network. However, your IP address will be known to your contacts.
1. Open the app settings menu.
-2. Tap **Audio and Video calls**.
+2. Tap **Audio & video calls**.
3. Toggle the **Always use relay** switch on to use a relay server or off for P2P.
-**Please note**: disabling this option allows P2P calls, but it does not prohibit the use of TURN relays – in case your network providers block P2P connections, the call will still use relays if the are available. To prohibit the use of relays you need to change WebRTC ICE server configuration to only include STUN servers, for example:
+**Please note**: disabling this option allows P2P calls, but it does not prohibit
+the use of TURN relays – in case your network providers block P2P connections,
+the call will still use relays if they are available. To prohibit the use of
+relays you need to change WebRTC ICE server configuration to only include STUN
+servers, for example:
+
+```
+stuns:stun.simplex.im:443
+stun:stun.simplex.im:443
+```
diff --git a/docs/guide/channel-webpage.md b/docs/guide/channel-webpage.md
index 8cb0f4fbe5..df6c1bb077 100644
--- a/docs/guide/channel-webpage.md
+++ b/docs/guide/channel-webpage.md
@@ -5,21 +5,31 @@ title: Channel webpage
A channel webpage shows a preview of your channel on the web: its name, description, recent messages and subscriber count. Visitors can see what the channel is about before they subscribe, and the page gives them a "Join" button along with links to download the app.
-You don't have to build the preview yourself. The chat relays that host your channel publish its content as a small file, and a ready-made script renders it on your page. All it takes is to copy the code the app generates and paste it into a web page you host.
+The chat relays of your channel publish its content as a small file, and a
+ready-made script renders it on your page. To set it up, copy the code the app
+generates and paste it into a web page you host.
## What you need
-A channel webpage can be set up by the **owner** of the channel, as long as the channel is hosted on chat relays that support webpages. If they don't, the app shows "Used chat relays do not support webpages." and no code is generated.
+A channel webpage can be set up by the **owner** of the channel, as long as the
+channel's chat relays support webpages. If they don't, the app shows "Used chat
+relays do not support webpages." and no code is generated.
-You'll also need somewhere to publish an HTML page. Your own site works, but any static hosting will do.
+You'll also need somewhere to publish an HTML page: your own site or any static
+hosting.
## Step 1. Open the channel webpage settings
-Open the channel and tap its name at the top to open the channel information. Scroll down to **Advanced options** and tap **Channel webpage**. This button is only shown to channel owners.
+Open the channel and tap its name in the chat toolbar to open the channel
+information. The chat toolbar is at the top on iOS, and at the bottom on Android
+and desktop by default. Scroll down to **Advanced options** and tap **Channel
+webpage**. This button is only shown to channel owners.
## Step 2. Allow embedding while you build the page
-Turn on **Allow anyone to embed** and tap **Save**.
+Turn on **Allow anyone to embed** and tap **Save and notify subscribers** (iOS)
+or **Save** (Android and desktop). On Android and desktop, the app closes the
+screen after **Save**: tap **Channel webpage** again for the next step.
With this on, the relay serves your channel preview to any page, so you can build and test from wherever the page lives without it being tied to one domain yet. Leave the webpage URL empty for now; nothing is shown to your subscribers until you set it.
@@ -77,7 +87,7 @@ Once the page works, go back to **Channel webpage** in the app:
- Under **Enter webpage URL**, type the address where the page is published, for example `https://example.com/my-channel`.
- Turn **Allow anyone to embed** off if you don't want other sites to be able to show your channel preview. Leave it on if you're happy for anyone to embed it.
-- Tap **Save**.
+- Tap **Save and notify subscribers** (iOS) or **Save** (Android and desktop).
The URL now appears as a link in your channel info that every subscriber can see. If you turned embedding off, the relay also restricts the preview to your own domain.
@@ -95,6 +105,7 @@ You can add optional `data-*` attributes to the `
+
+1. Tap the pencil button in the chat list, then tap **Create public channel**.
+2. Tap the picture to add a channel image, and enter the channel name.
+3. Tap **Create public channel**.
+
+**Configure relays** opens **Network & servers**, where you choose the chat
+relays that the app can use. If no chat relay is enabled, **Configure relays**
+is shown in orange, and the app asks you to enable at least one chat relay.
+
+The channel is created with your current chat profile, which is shared with the
+chat relays and subscribers. The app picks up to 3 of your enabled chat relays
+at random, preferring one of your own relays and relays of different server
+operators.
+
+On the **Creating channel** screen, the app shows how many relays are active,
+for example "2/3 relays active", and moves on when all of them are active. To
+move on earlier, tap **Continue** when at least one relay is active. To delete
+the new channel, tap **Cancel and delete channel**.
+
+Then the app shows the channel link and its QR code on the **Channel link**
+screen. Share the link now or later, and tap **Continue** to open the channel.
+On desktop, the app opens the channel and shows the channel link next to it.
+
+New channels have **Visible history** on and **Chat with admins** off. See
+[Channel preferences](#channel-preferences).
+
+## Subscribe to a channel
+
+1. Open the channel link: tap it in a chat, paste it into the search field of
+ the chat list, or scan its QR code. To use the channel's SimpleX name, type
+ it into the search field and tap **Connect to …**. See [Connect via a link or
+ a name](./making-connections.md#connect-via-a-link-or-a-name).
+2. The app shows the channel's name, image and number of subscribers. Tap **Open
+ channel**.
+3. The app opens the channel with its welcome message, if it has one. The chat
+ relays, the owner and moderators see the profile you join with. To join with
+ another chat profile or incognito, choose it in **Your profile** above the
+ button. See [Incognito mode](./chat-profiles.md#incognito-mode).
+4. Tap **Join channel**.
+
+The app connects to each of the channel's relays through messaging servers, and
+you are subscribed when at least one relay connects. Until all relays connect,
+the app shows the progress in a bar above the message field, for example "1/2
+relays connected".
+
+A channel card shared by the owner is marked "Channel link (from owner)". When
+you open such a card, the app shows "Link signature verified." in the channel
+preview.
+
+When a channel has no active relays, the app shows "Channel has no active
+relays. Please try to join later."
+
+As a subscriber, you read the channel, and "you are subscriber" is shown in the
+message field. You can react to messages when **Message reactions** is on, and
+use **Chat with admins** when the owner turns it on.
+
+## Post in a channel
+
+As the owner, you post as the channel, and **Broadcast** is shown in the empty
+message field. Subscribers see your posts with the channel's name and image,
+marked "channel".
+
+Contributors and moderators post with their own chat profiles, and subscribers
+see their names.
+
+Writing and sending messages is described in [Sending
+messages](./send-messages.md#sending-messages).
+
+The owner and moderators have **Delete from history** (iOS) or **From history**
+(Android and desktop) in place of **Delete for me**. It deletes the message on
+your device. For a message that you posted, the chat relays also delete it from
+the channel history that they keep: new subscribers do not receive it, and the
+channel webpage does not show it. Subscribers who received the message earlier
+keep it.
+
+## Channel link and name
+
+Anyone with the channel link can join the channel.
+
+- As the owner, tap **Channel link** in the chat info. The app shows the QR
+ code, **Share link** and **Share via chat**. Everyone who joins by the link
+ becomes a subscriber, and the link cannot be deleted.
+- Other members see the QR code, **Share link** and **Share via chat** in the
+ chat info.
+
+With **Share via chat**, you choose a chat, and the app adds a channel card to
+your message there. Recipients tap the card to open the channel.
+
+To let people find the channel by a name, the owner taps **Get SimpleX name
+(BETA)** in the chat info, below the channel link. See [Registering a SimpleX
+name](./register-simplex-name.md).
+
+To show a preview of the channel on a website, see [Channel
+webpage](./channel-webpage.md).
+
+## Chat relays
+
+Chat relays forward channel messages to subscribers. The SimpleX Chat server
+operator provides preset relays, and you can add your own.
+
+Tap **Chat relays** in the channel's chat info to see the relays and their
+status. The owner sees each relay's state in the channel, for example
+**active**. Other members see their connection to each relay, for example
+**connected** or **connecting**.
+
+The owner can change the relays:
+
+- To add relays, tap **Add relay**, select relays, and tap **Add** (iOS) or
+ **Add relays** (Android and desktop). You can select from your enabled chat
+ relays that are not in the channel yet.
+- To remove a relay, swipe it left (iOS), long-press it (Android) or right-click
+ it (desktop), and tap **Remove relay**. **Remove relay** is also in the
+ relay's info. For the last active relay, the app warns: "This is the last
+ active relay. Removing it will prevent message delivery to subscribers."
+
+When some relays are not active, the app shows their number in a bar above the
+message field, for example "2/3 relays active, 1 failed" to the owner or "1/2
+relays connected" to subscribers. Tap the bar to see each relay. When no relay
+works, the app shows "Add relays to restore message delivery." to the owner and
+"Waiting for channel owner to add relays." to other members in the opened bar,
+and "can't broadcast" in the message field of members who can post.
+
+The relays that the app can use are in **Network & servers**: in the **Chat
+relays** section of a server operator, and in **Your servers**. To add your own
+relay, open **Your servers**, tap **Add server**, then **Chat relay**, paste the
+relay address, tap **Test relay**, and save with **Save servers**. A relay is
+turned on or off with **Use for new channels**. See [Network &
+servers](./app-settings.md#smp-servers).
+
+## Subscribers and roles
+
+| Role | What the member can do |
+|---|---|
+| Subscriber | Reads posts. Reacts when **Message reactions** is on. Uses **Chat with admins** when it is on. |
+| Contributor | Also posts messages with their own name. |
+| Moderator | Also deletes messages of contributors, blocks subscribers and contributors for all, and answers subscribers in **Chats with members**. |
+| Owner | Posts as the channel. Edits the channel profile, welcome message and preferences. Manages relays and roles. Removes subscribers. Deletes the channel. |
+
+The owner and moderators see the members in **Subscribers** in the chat info.
+Other members see **Owners & contributors**.
+
+The owner can change a member's role to subscriber, contributor or moderator:
+
+1. In the chat info, tap **Subscribers**, then tap the member.
+2. Choose the new role in **Change role**.
+3. Tap **Change** to confirm. All subscribers are notified.
+
+A channel has one owner, the member who created it. The owner role cannot be
+given to other members. A channel can have up to 256 contributors and
+moderators.
+
+In the member's info, moderators and the owner can **Block for all**, and the
+owner can **Remove subscriber**.
+
+## Message signing
+
+When the owner turns on **Sign messages** in [Channel
+preferences](#channel-preferences), the apps of all members who post sign every
+message, and subscribers' apps verify the signatures. New subscribers see
+earlier messages as unsigned.
+
+A seal icon is shown next to the time of a signed and verified message. Its
+**Info** has the line "Signed & verified", or "Signed" for your own messages.
+
+While signing is on, a red seal icon is shown on a message without a signature.
+Such a message was sent before the channel started signing, or it may be fake.
+
+A message with an invalid signature, or an unsigned edit or deletion of a signed
+message, is rejected, and "message rejected: bad signature" is shown in the
+chat.
+
+## Channel preferences
+
+The owner changes channel preferences. Tap **Channel preferences** in the
+chat info, change them, and tap **Save and notify subscribers** (iOS) or **Save
+and notify channel subscribers** (Android and desktop). Other members see the
+preferences without the switches.
+
+| Preference | When it is on | New channels |
+|---|---|---|
+| **Sign messages** | Messages are signed: see [Message signing](#message-signing). | off |
+| **Disappearing messages** | New messages are deleted after the time set in **Delete after**. | off |
+| **Delete for everyone** | Messages deleted by their senders are deleted for all subscribers. | off |
+| **Message reactions** | All members, including subscribers, can react to messages. | on |
+| **Visible history** | Up to 100 last messages are sent to new subscribers. | on |
+| **Chat with admins** | Subscribers and contributors can chat with the owner and moderators. | off |
+
+Chats with admins in channels are not end-to-end encrypted, so turn them on only
+with chat relays you trust.
+
+The owner also edits the channel's name, image and short description with
+**Edit channel profile**, and the message for new subscribers with **Add welcome
+message** (**Welcome message** once it is added). Profile changes are sent to
+subscribers.
+
+## Leave or delete a channel
+
+- As a subscriber, contributor or moderator, tap **Leave channel** in the chat
+ info to leave. You stop receiving messages from the channel, and the chat
+ history stays on your device. After that, tap **Delete channel** to delete it
+ for you.
+- The owner can delete the channel for all subscribers with **Delete channel**.
+ This cannot be undone.
+
+See also [Leaving a group](./secret-groups.md#leaving-a-group).
diff --git a/docs/guide/chat-profiles.md b/docs/guide/chat-profiles.md
index d20790037a..5f405c76d8 100644
--- a/docs/guide/chat-profiles.md
+++ b/docs/guide/chat-profiles.md
@@ -1,79 +1,103 @@
---
title: Chat profiles
---
-# Your chat profiles
+# Chat profiles
## Creating additional chat profiles
-SimpleX Chat allows creating as many chat profiles as you like. Same as the first profile, they are only stored locally on your device.
-
-
+SimpleX Chat allows creating as many chat profiles as you like. Same as the first
+profile, they are stored on your device and shared only with your contacts. You
+can use different profiles, for example for family and work, or one with a
+pseudonym. All of them receive messages at the same time.
To create an additional SimpleX Chat profile:
-- [Open the app settings](./app-settings.md#opening-the-app-settings).
+- Tap your profile image in the chat list toolbar to open the profile menu.
- Select "Your chat profiles".
-- Unlock option via fingerprint or PIN.
-- Tap on "+ Add profile”.
-- Create a new profile by inputting your display name and full name (optional).
-- Tap on "Create".
+- Tap on "Add profile".
+- Unlock via fingerprint or PIN, if you have [SimpleX
+ Lock](./app-settings.md#simplex-lock) enabled.
+- Create a new profile by inputting your display name, and optionally a bio and
+ a profile image.
+- Tap on "Create profile".
## Hiding and muting chat profiles
v4.6 added the ability to mute and to hide chat profiles.
-
+
-These actions are available via long-press (Android) or swipe (iOS) on the profile in the list.
+These actions are available via long-press (Android), swipe right (iOS) or
+right-click (desktop) on the profile in the list.
-To unhide hidden profiles, enter the full password in the search bar.
+To show hidden profiles, enter the full password in the search bar of "Your chat
+profiles". Tap the profile to use it, or choose "Unhide" to unhide it.
## Switching between profiles
-
-
-- Tap on your user profile image in the upper right-hand of the screen.
+- Tap on your user profile image in the lower left-hand of the screen (upper
+ left, when the toolbar is at the top).
- Select which profile you want to use.
-You can also switch profile via Your chat profiles in the settings.
+You can also switch profile via "Your chat profiles" in the same menu.
## Incognito mode
-
-
This feature is unique to SimpleX Chat – it is independent from chat profiles.
-When "Incognito Mode” is turned on, your currently chosen profile name and image are hidden from your new contacts. It allows anonymous connections with other people without any shared data – when you make new connections or join groups via a link a new random profile name will be generated for each connection.
+When you choose "Incognito" for a new connection, your currently chosen profile
+name and image are hidden from this contact, group or channel. It allows
+anonymous connections with other people without any shared data – a new random
+profile name will be generated for each connection. When you share an incognito
+profile with somebody, this profile will also be used for the groups they invite
+you to.
-To toggle the incognito mode on/off:
+To choose incognito mode:
-- [Open the app settings](./app-settings.md#opening-the-app-settings).
-- Turn on/off incognito mode by tapping on the switch on "Incognito".
+- When you create a 1-time link, tap your profile under "Share profile" and
+ choose "Incognito".
+- When you connect via a link, tap your profile under "Your profile" in the new
+ chat and choose "Incognito", before you tap "Connect", "Join group" or "Join
+ channel". For some links, the app asks you to choose "Use current profile" or
+ "Use new incognito profile" instead.
+- When you create a group, turn on "Incognito".
-Please read more in [this post](../../blog/20220901-simplex-chat-v3.2-incognito-mode.md#incognito-mode).
+The app remembers your last choice for the next connection.
## Edit your profile
To edit your profile:
-- [Open the app settings](./app-settings.md#opening-the-app-settings).
+- Tap your profile image in the chat list toolbar to open the profile menu.
- Select your profile.
-- Tap on "Edit".
-- Input your desired profile name and/or update your full name.
+- Input your desired profile name and/or update your bio. You can also add or
+ edit a description.
- You can also set and change profile image.
-- Tap on "Save and notify contacts".
+- Tap on "Save (and notify contacts)" (iOS) or "Save and notify contacts"
+ (Android and desktop).
## Move your chat profiles to another device
-SimpleX Chat stores all user data only on client devices using a portable encrypted database format that can be exported and transferred to any supported device.
+SimpleX Chat stores all user data on client devices using a portable encrypted
+database format that can be exported and transferred to any supported device.
+
+You can move all profiles with "Migrate to another device" in the app settings:
+the app uploads the encrypted database, and the new device downloads it after
+you scan a QR code or paste a link, see [Migrate to another
+device](./managing-data.md#migrate-to-another-device). You can also export the
+database to a file and import it on the new device.
To export your SimpleX Chat data:
- [Open the app settings](./app-settings.md#opening-the-app-settings).
-- Select "Database passphrase & export".
+- Select "Chat data", then "Database passphrase & export".
- Stop chat by toggling "Chat is running" (tap "Stop” in the confirmation dialog).
- Confirm it with fingerprint or PIN, in case you have [SimpleX Lock](./app-settings.md#simplex-lock) enabled.
-- If you didn't set it before, [set a passphrase](./managing-data.md#database-passphrase) in "Database passphrase". Initially, the database is encrypted with a random passphrase that is stored in KeyChain (iOS) or with KeyStore (Android).
+- If you didn't set it before, [set a
+ passphrase](./managing-data.md#database-passphrase) in "Database passphrase".
+ Initially, the database is encrypted with a random passphrase that is stored
+ in Keychain (iOS), with Keystore (Android) or in the app settings as plaintext
+ (desktop).
- Tap on "Export database" - it won't allow exporting unless you have set a passphrase.
- Save the file on your device or share it via any available option.
@@ -81,9 +105,11 @@ To import your SimpleX Chat data in the app on another device:
- Transfer the database file to the new device.
- Install SimpleX Chat app.
-- Create chat profile with any name by following the steps in [Create your first chat profile](#create-yout-first-chat-profile) – you will replace it soon.
+- Create chat profile with any name by following the steps in [Create your first
+ chat profile](./README.md#create-your-first-chat-profile) – you will replace
+ it soon.
- Open the app settings
-- Select "Database passphrase & export".
+- Select "Chat data", then "Database passphrase & export".
- Stop chat by tapping the switch on "Chat is running".
- Tap "Import database".
- Select the .zip file of the exported chat data.
@@ -94,6 +120,6 @@ To import your SimpleX Chat data in the app on another device:
1. Currently you cannot move some of the profiles, only the whole database containing all profiles can be moved.
-2. You must NOT use the exported database on more than one device at a time, as it may disrupt some of the connections. You also must always use the latest version of the chat database - using the old one is also likely to disrupt your connections.
+2. You must not use the exported database on more than one device at a time, as it may disrupt some of the connections. You also must always use the latest version of the chat database - using the old one is also likely to disrupt your connections.
3. There is no way to recover lost passphrase - make sure to store it securely.
diff --git a/docs/guide/images/app-settings-advanced-network-settings.png b/docs/guide/images/app-settings-advanced-network-settings.png
new file mode 100644
index 0000000000000000000000000000000000000000..54865644b0af4339a4ed387257e47f6ea241339f
GIT binary patch
literal 144656
zcmX_{byQSsw8o`}lA*hXP6-hZ>FyBe?vhqIgaL-`?h=sh25FE+y1SI_zUOn@d*8oU
zvsfqIc=q1E{hUx0C234F60}#ZUSZ10NT|Jf1=s!R6+#LK8Tdsi?&9ec{M$KM2~lq#Am=SB7tHJuS=C?iyc@H-1uM4JLDAq9Br6`C@R)$ID z>T)I@MW1E7LGHWve{NB-J(k2Yh=f`DSC|#b%aM z*{>E9rp>9uJ6D?A#O$7{#FcAVxrA07P^Si570+{W`6;7w+WNWROH)Qm^ U4>hE2O^gKW1~4H>Wf0eq^NdlhbbGv$(6(Usek9o6Ig+Ep^_XjX|kA<6-pA!iAa zfGKoJ;kD=;dWCTL693P-Xd!EX`G?M!zu-d$#u*Aa2%;&}ag52Dm01S&;!c5|dP9f+ zyqInWM@KHJTX$m{8^>&MqxW~0bbRO0hS>or|Dx(kG`yVhH|wGE?6lO> vO?SA;+gd65Z@g+u02+5%WuzI3!T~WwMSp)Vfw$GgJLT&Q z90*POW?G@2_fEKY`%qj bbkLRj ^g43qC6g67E z=QY1-zCu}-o2M|IUr?iKkq#5UbKdKR1F0VXP!0d9Dl{g{`!9hS$f^mQ1SAq*`hK&w z`3MoWeDbN&Z-$lPp)HulQi%#Y+8%?M1HFiOJBRgM+6jP8i!AH+KF%{`Zx_rsQl z5`I$X*CE7uRVsn7o+S735^k3H;k 50wV;yC{G7{MtB@P>10a9T||G8Z}@jO$IGfraTo!zrL{04P+(Y&w>KkW%kDQ zM5R1o>>4J%0n=cgm-w57OoFW*Qw&WS3*!|vs}8Z^9{_rbbenQy+dxJG0_$jr3p6yF zw0`jRGT=q+v8^E|7zE~Lqw>86q5!)Q5=6TW2XB23y>-(4OfLtgrSK_?SF N}M?*<7N^H_2`SCOTlZWCkQ cJOtR5&N6F&2yfR@$=J$Ai;=} zj})#uS!r!6R-f(wBN@) MmE3$nsnP}*8**ER%NUN*L*01<9lgHfu zQ6KKhg@>!%Qg3SsHmc_9-ek;cSd$Y~H~%jjc$%UHie+ SS`kT)I}Wt}6s7(3SKB9hlm0mt zPyIOr?Ndx&7{{zbYtL|A4te`LgoucacdDxGx65#*syhokdZ&NRJZ@;_KDH J;@nD{RvoU>~AN7zm$GXBT*Iqr;*;%*+^C=SAhsZJiB#L&6J6+wM4VZHb zOoly2zaYKy?+cu!7k=I`#QprvgB;v7cDUnPE$HMLj`HiEG+=rQ6<@jy2mc)S z{NmGZJ_68bc_&K()rOu>BJ&>8(<5BPjRKI(W7EHF&z2=z{?AJceauZM^J0Kq%P-Oq zRN5ur3Tf Tbl}*>yjsFQr{D|^ z(>Hl}dqtD&x2o5fKZ1 mK1?uU0p?`ADP1=)GRxbK{G)w@`5Cu!$}e0)<+SpU4Q&HH#fIt72<|R z`pNX9)1hv!WfNzGfEIHNu-z5A3BG)2{-Kf*ZkH5Z?pzC(lnM$sZ)}s_x+(YYDF#>2 z==dRD8K2PwtU%5{N%I*<&VK Zn_i7RQMwLP zQYG|i=V?H?P{Ch82u=W@Px-2$*ZekT@{U@9??!~s_wS)&s3 yJaXM?gygO6%PLIY+#Xt5x<{Rkg5g0Pa2So8W_$ol3 zM^-Tr%nv+Fy_W#Gi)$NQ*>xaRFPM(a!HGkQ{qUI^oj8pd`dAb2#>* zpbgj1ZVq|AJ}I_#cdBHmR>bbi4B5jSS$T1KcEHbjHE{dh?$MEa=pUdRv}_HOvQhx3 zl)Q!F!yF>{^d}SS{vQ6G+UGP%{=Z8AFZ0Q%IJEakevv!1)ujF}RpX?zG?@DvDZAd> zcuAERakh L_R1tX85^&KBUpi^1u?=2o*fZHx8J#1ByG`gD{Hp|Y&p(JTa&C$zHth; zO#E8NplIp#3?_wryxDL4*eCPx508*k*^T|FCLbaC3J}y%TLFBRJc5t#cm ZK`YIdcEs9Ga_oQm?)e?ggo)RD~z}}Vcmst!0VYDY< zUa21n =`ksMJk zfz1G;)bqX7(E>CL$Y=Voj&ir XzndAIhFlr}Di*C>K&b9}owOKl~1mKSHNn 7$PiAVW!SuC@=^ak{bC)fm5~bAf2}>PsVANw70=? z4$0DeRecx9@2rCtXDL_lS)s|0E~0>(*p-Ez{(R1oaetl=bFS*UX4oG0rDq=!MU}{gzCXbGVA?<{T*5ZKi zMC4~x+I ANJ8ch6Y;lSVL+A%my8uQBK_H(2_)KxjzM>6WSt>^r+VyZdDC&7)glsEJ0)h0t$lA;ct}!)01Y&cCN> zD}uXZC5_-tG3k*`QI0b$0UjCDlxX4sjG^#DV0t~3kFWEXYp-xwILB82C7lQj6;&Ql zpbfAxn+XaDCo`yB>@yC@4O6>J3PUNoW4B6vV}BEFk-l}EPJa}sjGKudK&4~QR6!+2 z$>-Z$^vdtmD-AQH9xYp^@3{ago3g?7GysY$xOrFvBZDJ3L4Zl=Z1qR5@vSGOf3Usp z>!hVD!dU8;48sZvFKK5dB)1M-M7iaD6tEy~F*rUx&hxMA>uoi6*&ojHneOE+l=tAK z*H&pFB_pFunHL0UUl|R`_rIu9e{NB(N`RTdNENM1b`@w0osDa*9dy`tP-oEY$m)|? z(?jOf*GYqPKW3RC$lFyhlu?ld%zXs*1_!t;@6pdsefw M=_hX*|nDjEk^vE449>Gddmk z#P2kNB%jes{SbSA7vicQQs~-fSz?2D-++Y{pt7hnq1=LJUhBWvMw}{@8ZgY-FQj;c z!c~6RoOsP~iFy~uoUk>&5lKvUbcM+l8V*x`NW4SndxT}awjHXVv^w~)+GxGXXg|x; z@Qnoysul_TbQxnFTaUrscP2X+O|d8+)8uxdPJ)q=&=RKzZNc+NugbEmXK2QE(#?e$ zYeIo`HD62zF9P5=xI5zuBLWw6oi34hh9hwPTtPyY))mep$n#bWZ@o{#sTr?BzCn|4 z#gk%+7rjp_SV3ytj;D9o?cQ4q!v>Xd@~b4kMo9zcN1jaz0 W3|D?!j<$wGs%N9-aSl)|7%BM{ zb?c4XaAYsAmqGOe(sc~Ky**SM;z X|dML=t-HxCUw*347{rJPLY9km=_5!E8dz9pZm$~t Gj0HMx+%X#osWjP@&sHf6Q;dSnI*Z#PP_5JJM8%`PfO6G%F(j)>ojWGa1v z((5ki-Ko(Qu&`j{`ATOgXf5XHWa*oU)X-=0ZT9nb0fXztxPzK0Z&xP4DLD)>xl{A^ z^K0R1?s?7b3!+JD#xDtXb*QXGPF>kFu)tB}ktORTUk4}9bmUBAZIZdX?dm&GG-M|L zYH99a_!fJD{bNVRch&QF8(U;>%)N=RCfQ|_CM8W$r2N ODdx-fcr`V|&s zp$P{oX*N=C=pL F)fwd78pvXoTEX2A2Sk!E}xALuf8EhfWHe zX%GQzs4|lO)Z6Nv(2zV+stR5xCD%mMksEliiA0ZZOf(pM2-|y&-;e<*ps3yw>!(Oi z7(*UtLd(#e*6HNL^J570mk&_`D55aqSC*hm^kFdA+Z#I8>8+m1RqDz@3o+8#5?dsL z#6@h3tQ!?V=t6^=!;L&>Ws0wKj9l+C`gqtVvU$I1_duDYsiBWiUOl;Af`uhnd6Y`D zzw)B-$Mc;XoKe!rQq( _ZEW!ODt(C-$$2dN#acGF#WLJ zusn>@USyM`4x`ox`x7CXbc}!=y6M0sJKCC>D?D!aIQ9UopX3$57Iil~j&CX};a2+m z?FQ~6Z?|PR>}@6AXY2C0q!E>zje5*nHk8ObvcIg`r|WB`)(IkWj0L;X@tUYnaDi6% z7OFSbHwDe1=}L4&CNCg*-8pwmyflxOk>&|)T_;Y%sp}%&lDFG$XGY;Vh{RINpdF1D zHBx4rslp2iUXG_)#bAVIs&TUeaP1Xcsy8^eK1?h2zKGi`9uWG+<_@1O99@{w;3X zgS>e;c>3oi&(&u~q-chRZ+LYjh_A#)+>`j^RD;xdk{8e(G-qU#Ka#8vT3CBa^VyN$ z$6#v8$gvhuO(?1M?#A4;>70xqT3kWF;2l*}l=qh6+3)(J(>H%DUEauw8(jNL@v@Gl z-9I8Bxr~G8pY<3wU28szf)*^ga!`NzP&LI#N=W$ D#-2xCJ7Nxo6+1fzQNkld@ZI2E0 z&B1b;`-`) zlje;PuT)gA0&hqSZD$!iIbC%9n)+0A7eZ6f!!A%5;of0>6 *s21m$aBf7jh;(w9g!8m zZJUUo$$v2i`w&qU0hU+}PxJ0`PD7s-!4JH>#Un$W)FnhMc2YifX9klawbsS8$R&v? zBe*&GIJ=j%Y{w-9t3&H`#an&ls*e EbelRR>GhJl(0&-SLpl4f$D1#zplhopSJy3$Vc&Jo)U5z}4t6kpXX2)QA4 zYgf%B@1paXlLy`}deQX!j;b9Eww!f}-d(;@YH&O!g6AkgyMzRC=O`?)w9HKMds|Ff zpC6)NdbG(z=&fWEM$z!m`t(~Y+F)buy}^~C KN)nZLF)F Ch)HJEz@$(z>7qV`O*$-bxiKNnO9S`Iyf8~ryE#1_=&g);+WD+t0t z)1gsx2lgq(wzSBnw2UYP_ZeKF48dhU`lbV$XnMe0=ykX0x&}i@v $kb 9W7b31u^--xC3~P{rhm zq@ku}#yIO%J)Y4dX6h3nUSSu|sIhGL#SVSK;KC@>{v4EG?tm;+!x0NL4rpX+Z6hV+ zBgR5QqM9o??dB`lbA6Zkjr@)!QHWr70uBP x#y~c>iEetWbxY!E61*93Z1JeIKpulM4m{}bS z^FvNdpe0Z>qpy8lRj^oD&WWSsd-@S-qTbKm=Dl18-UZ$( kj;Q12hOuyz^{DTwgicB?V z `By`h)brN1s-$1vs;l6fyd}%&!bc>po$viO?8)R4^znrH&~!x z=xlp*v(xkQtJ5=X5!2z?+4s^#H70}`l7XR45QTtERuZ984LZo5Y%=EXTl8`k3-_b6 z--z{QrCbMT65z>*vV4JB{H0&ul;0H08PnhP&xQ^p1@f;#y;45Dmr@Ng`+?vYkcPu$ zO~9=HPaWt``1_x-iNiypYFC!X{&|4JtU@WmP|huq5olZF*goIWGtwXtN%W~4F^ }1eeU-)|F$@h&Y!_ zx`Y24(=cgtpX|feb;AQ0&!2u5mLf#hrx4@D$EDf;07eG=siVzNaWq$4IZ 0=e;Xc6%{QaJQsUEO#E-~cDbMlaAVsK zimK`f4do1c`r1=mx%O<&H9|A_hsI(lS=Rv8wy{I`-wcvKt=U)ziiw#dx+`)0GSEx* zoNMn!HDR9k-~hauE=7e%m!*Qa&o<8zm;Tce%m-L8YqPmIBnM2h{tr^PY3=RqoWdu5 zGIQBnXK=vZfAGsh)^QkNFj1KT|F89&+v76LIaEXN5S|SpA~gG6Z|^3}?W2U|wg;1` zrt|aj-k&m=o=;SMlYLN+`LAUEND+{-zH58NzTaj`RgrGFGqXa4W#4X2IAbq2yZu`t ziK?(>ks$@HUyoh_AWRQT7=a 7qU-(gV_V(nO{I_Xw@T=)2WMsRmbpCFrYU zq+TH(jrK&PqT$^Ze>blbW8brdo+M+7-Y24VZ2$X_dYHA))HDQ-ML9sRGJSv>h0{pM z-<4i-+|9b&kKcu9Qg{{0h0&gH9=F5sUr0v2eF8ibcv5Skz&|!HoJ`@>f~SWrz+~vL z_`%QQVM;CKV2*@G!wqg-^>2)d@UQ)kf5(;5cWn!-y# XN|F^HU!s?E@y3r0P?H}Z??C23<5OyK n2N!VX^D)ye+7G?4KHU^$;9 z!gi8~YrUpXe}RMS%V_u?9}|F%d^2VH fa MU)&6X_|lJoU9??KQSzk-4}pxJJ|OjdB0nX3!CcqkjNY3=nQOKjcB%-DGM zNx=8 PsY1GNXX!81(9=rb-#l)eh^6KD3>fmy)Do>} z0x-fpNHM)K=`mG<&0e(StQr6y;R}!sH3Ng5%%~jAlwb4vl?hBaY0o*?wm>(eVyDq# zwnWlU>9QhSXYe}Yd{ Td!;~#>Bu!@@4fpNK4a> zN$8b-$iwQ?%~4ISY4G$c;&tJF!wxzrF4 rBsu^^r-{WWrovMZJ9YLcA7d%ypbFM)54GA3CY&2W&qmP9 zd{;So&Ew|6&R+Xo6=VTUcWs)-Tf0I@ae+1f3Nrx)JpNvV&{N+gifWE}FR#9ZJN_*@ zEaKL}bA4^AdiX5>Pd@b&wOb0IiH(=%BV|GupwUsTymHF!tP5 k|nFBZYga_~$|Nrqa|qjuQe~pYimxfiPn1W^xVPv>I5LvM)N@-*2^_eFm5z z$c2|%Y6ISMwNGJoZq7;8-)T)=1UCK_xlZ&Kd1RXc4_Ioey$KML+TFHH3!-ez?kF zJ`Vye&18YukVy9~s$Vta*Nf+$0g1A_Cv1Mm9^rUMPJT6ce3 3RsoE~WZclU3 ! zoKbZ0P{K;k(&OtOcq^rj7AO20kT-@b)QltKb9k?E wjEVD*AA?`xN2db@` zh^@M(vh8UeFA05p{uaM&|c{Gf)e4(IWWu75VJ=I7>{;P4?v@D5Wh z+Ur-zCfl?R{aJ3Q@+wMEgmnD#lD7fBmQkfsl-Dry=Z8;336W`U1UxRXkKL(Qs_&8N zY2`547FEENU|f@}3Q1jrJUL0Q-17mS j;4NWCGi3luX0{sGu8VJmc zZ6qgf_WmO;;Gy`XczrDutVNqu **Qou zG|QBv9+lK7;wmBGoKiM_^mHR1L1ik#k#s_&nR}gy)RafJ^Fvs&=-qZ}bB;;L_p4`@ zLiZn!U4ZbaoL!$OrsA#}J&Fc)Dq( @S^2iu|) z)|U$r&>H*Ps3wYp8_AzG793LzJ%vSzD7zwe%8)4`=R19Moq5;Sue99>>_eFI$L-v? z$Byuixa2eN_%cFe>rq2e4iOU9hCR*`)jfo)#|4m@r{ko94_)&D>cxp9X)gUqAxhkd z^`?MGnGT;}FKVi#K884uI!($Z{z!;;O!O-@p*hCsVj)Rl>6$xv@_etVw2rs3TJxg= zOubpyXn=XSJ3am0bfd>zB1P1r(H)P*Gj0#c;ECV#D5fp)vwqr%H4$Ht;3olHGP`$j zZ$TiPYYr)U?lZ2+LQ)!2Oaw}z >aeYUy&?d;C4 zB+y2;Z${3D(& )O01dnT#VV>T{pKlwLn?u+mD9A>6ogztM z&A$k{SKW~lK03^L_aVR>H>$j+Ur|iLX}`gS Bo3da{$qT>f=$OFyX>D?uXi& zqmD5rJ3bvy4G4AC4Qk2q^QlVn%G(b-t@2%Ot`Pmu8gQMi(^8G@3Ey~9oN?9(H4=yL zEQTCTJE>H2-*tD1$X1gwG^~u^i5Qgep>L!v@Y++=$-bw0!s&j6hKcbF0XiR=A7BkL z{z9F9kAI%>-jfbu$^Es%l-d{}NX&?;#arjc5XLQlJv_vQwvhQ#ma{7d)*xJ4^&oU8 zb;A{e#BY*AN^&X;J!)R=sbtu3`!{GS8;o#@P}3blxCN5nSzTbBhs?paFSP*)@VZMg zXKeIPH7Av(NLY#ER-NGNrd7lfFE#^cFtoRKb;e7+3zy&_BUe8ec!xwenOP-DJ}#&? zP|&9VT+~2Z;@;NV5U6VIG;*+{*d&P20b8GXWn*JWJDiz-MK2M7pNEf*FZn~0%YK#_ z=EEnJ0!j4qHGi@;n8bRHw0b6z(F_rh789#P^6Y-q<&KCLDm|&BH4G}gAcl75c<~YS znGZDw2}@6z6TDtw`YM9nyfdWuMxU%9o$w_Vj_g{A9A;f^z3H~Klmh0G9}gic9mxyC zu$d?;NRNFlmDNI!HXZSHE=5G-sz&FIIDq+i3R1~p7rH(`Bk<~}O;V;;+%HvGv@iN& z*&5#@L_%;gpFSY Ju(G3-~#Huqj$X25J`>8ziwt@tsxawc{|)SB}SPu zXZ|B~A9Oum*H4(UA}&LydRb$csvVM9ldq}vHEY!kviD3yb`s&vpUB3G%v`8Kq#|Mt zx?1MB2)LP@mI4RN88P}0amLnx<=Rm@5}b(Z<9YQoy{Zm#!X_SmNPgByi(7;D_6N+| zA@7YL>c4<=RUO6+i1*|=hC}>+6HSQw*rz`jBMB@Hywpujgr0foekAcQrwOTfZw9Z( zL%rrxlmN^9wk=8{MR;W<;nMo>M#Of@)=dYdSyg^10x*{z&u)b&y)k{=e y-Y)GM InXEa3ZS5g9qMIzzE-orTw z9?e;)wK#Ba4&V|Ov3}>iJUn;8?II7Ga5G|3rs!?MeWNQUiKewnX-HhBT^{+{NQ@IU z&P}uu+71i4R3rbLCjtgV+TSH+z+-6B>{mn2NN|COF~;+ejccTDhijn-p3PtyDj!-8 zzL9Qdf?L<0?O{C8rz)G?n2)PUO=LJ<7YM0_1_^akP$$%)C5_0sd~FUWLDmoQ__Z3r zB~U^r1uUVZkq!sk{3#0H BUD!R|}ft(ME!=Iq;)?xY{JwNNtMib#;x!_I& zv@i7__fX0Q1Ka+T2v|i|8HqVQ+X})es*p}*-T|R^7h0j|z(&_a5|Q>sxG)K1n3ymv zut1(438IbW@7T6NkalFk$Auii$25QUd{7aiKa9!l)$BLPFD^MH! f&?}TZb~73n&!Ey0qcY(Lka#kbi(QJ{ z;qd<;Ya|${Eh~{o;9N9y49nxQ&Z?39&Svo*Au9Opi477bJAbD~+j~?g7~(&We^rWr zA}W1jpEm 9vvDv%eLAJ2mn~_i`kjJ4bldy{MU* zrg2RNw;eF$(;WzFTbH=%HohX4@}e>)lX_9$kV5R)J>~hlPB`ce0|}mDfUK32^zYR~ z?#_=gkO&S^fmAETciCU^F5gn`eQLY+aT+xfCsocrh3hq;>L9{|q!vrLPYHUdGs>tN z?X=gJ-&m%WlP!P^WxKFX+WJSNISI*K_rFa2ST;(D7->rrF`a_o$(Gz4eqJ1Axsos2 zJyRAD$SSED=4fjG5t)pA?Rj^zXVef9LU)8%XI$=IHGC_1lZJHV)X{0y-HhjZBJuT| z1-PURD*}oC9Vm|oBp(BFqAEO@KlN)(m{D~%GxoTOsN+oyG0*U$@I|st PY)ME+wizJCwb+ zGy1W6(WeaNaNR5|`l*_6qy36*_Pu-N)HEcfz2wA5LvB&i#TCg!q92`Y16xz}j*&!B z5Ppthj6-hnv(z&<8L45d5kx*>=;;d%)1h96&FQzTm*i*)2A`}&WsS%N$uaP7=JZ<_ zVTS2BMv{xqylpa&*lx37I?1kx9~KsA!u& y1yBP0-`Ne$Tn4iA| a@m5FNre%2{ zK=VE*qLV>>&AIAzJOCkgK)fPXCn@%I$?yBUR#oP?Pd`fs@!tojYfT*_JO!{xVg0@W z+GY!$2$X)R6H2{HG}rmhi0q8JBF?FopauVN=qYp`(Rl@{Ix|OxJmHp*P+AQ$WQn+% zl$p!Nk+3?SzZo+mb1z0FOb%AiH|ew6e*DC%Tw1l4#IR*nIwbWdS?Y(sThnT^(|lX7 zlO6k!U^ZAd?TCLPavFOEwhXVVcuG!2?GOdJ_t+<<)Uyz|MPvj?RXa7NYrfbH`cApk z%UytPf{CoQH9tb+wskdoI$d{c5CS{V%iVuxb|mY?gBn}yjt(q>t>?JxR=DZ{S|{<} zp7i0T)LQK(NGGNKwliZxeuo|vdA 3LEkmXxU`^neW>wjJbLN%^L#Au4i{GK;ClJ z7D&DF$gS6ozp%;9F$W6B$;eZwuM72Vx$aI Q4a||P zDm@#2q{X>1#GDtN{R8Kt5YEW`o7p-y+FnMEU9Ke; H(B%F!JznlVz9zDcZ)8w>IG;i8g3i-Ml zHb1k^3UU3qASM8HaJyN jj*bSD0zG#XHxZ-N2YbA7jd`fMVSq^u|SX?N`t;R*&QH$LL!Yz5g-* zOg5O@{D(b0sbgL#-X(t`{;ooSY)M**pWlA1R3q+7XY`pY#MEeh9-Oq!FFrm?`uNE6 z?2wB%;{W5m4A3@!Mf%Zk9Hu`28E*Dd417 DG_do0Rf@_-rc2!>SUL8v)^EL?$VqPc1lWspOWFgZBTiYw@(e} zq o7C3pT!JU77j@MMNk^dtx1YphdpEE=?I0O@A3KhJJN6d^}K5yCQ zkx{R>AZgf}1GcztNIZfvKIMg?`iXAUk$R=D#18&P%RE~n0sj!(2c sat~H z-rfa5yZ;!L!W$(e?STO{1hjt($hD-8|8|h0+9Se#>S_!4G#{-2j$j;GGY%$6w;)d+ z0D~IDp-hG)5EL3<4JXEJ_qmA}%>P^Y-$b7Y0XHz{RXr|VGcF}!Cwi-4!JK?WRy+|N zhylO+OSPUaja68u2xe;*%lJ<|&&05OvBI6s&?_K*Stw~Ki7X{-z4iY?J&B3sO}*&L zx&>cNpUQabProVUlTYJszx&@ufjf-^cO?poii(#3gB-N|53?oz`yZOpwxpx*=XQa7 zPZWyIi~v^-z5U}t#N4v^)-tV!=!zB*o>+naVPLQun!t#+3`5cTzqAbnzQWU`kP;8Z z;#I0GiJ1(;wRRc>U_|!!2S8MW92HuXW!zm81*@PIu;>3VIxwv`CgSeWHuBWOoz4-@ zVhqm)BmUp*ufUU~z=DcWn&;%?6z{e M-;9}`Hm-iR}dRoBD9Cu0` z%#cid?z#L83lz4XzCJ#g2I!Ee@KOdrY`o%Kfe)!GzagfQ;^L 5;J$z!2?J0OOafCs% za`jv{gwW0+DxMPwUq-eMopS3$BROw&x605-;J+=#5A*xw{fz~Jl#Yp cye)s&6i%3sn+pZ3bu(sC? E(chN;w+xvw0y+5D_M#XmyBYzRdV-HC z8;>*R7Gz3S70KRyF*?aR8;A)w_B$`Hbg#X_lz&70ao3V!o@!&JS)e6mNwNeDQ_sTW z1F-?fC*vRB9Tk$w;57fYh!zNz@^(Om4l`Kpo(PptjCJ;oaf={SOzb9^CTC0jT{x+Z zjK>kwH=-LogWoQjfI&3*!UcXCY(p0{_2RK2Q71AYg3wBCn-%)fYWU}WJEr_M9sLN9 zxDa)p)r%s8kX(WMgw5%dL1jP$dHz`B6FhbBB%a;rd7=QWOHJo$Pyi(OaW1FaQtj+R ziaC#0ua#CqdwW!cwks^6oP7`lKpMFvf~Y}3@Yx^a&CmM~Epo_7tIp0y2Fv3%AUuo9 zb^u(%(CJb$GdW>uMZ;N5&UgmZmmojmX~j7AD3tpLsPL7uvXexTYOo`gk(>Bn8y(LR zVfR8d+7oDI6RuyBh_##deMAs|azD*4qRPru5QAyYo53|GJT{{RK|t`-G|;SD5}q;r z9s7G9`yFtAEk04S;S|`x-#h=mW5+8`pT0+rxsSW@v7`J`)~GfA4y?5=L^eIoC7)-D z-ef@tE!jtII+pOs=(%)sOmhuB?_Lrz$-l$D#_PDKs*Bo_oi_j!eP}#0r9!pcpa6_g zCvrdl@&%%9K@B6X4A7wjA);p?T@_#{Ma9)#9WUzx)wJrvc}hDlp4P|n_=Ab3EdVk5 zV7RIQ#Pdlxov3V67e7}YXOGvOKK(a|=KgnLd*&Of7i^LHu=@8Q$Lp-;$uv&Sj;ssfH<>r z__qH+9DQNS8Nfe!EC=DBR9fv}Tdv6i@AD>LdPMHwrq)mPl>%Hc~x<8 zon=vknohDo!}M80g`B?ea?!3D11LURE_Zo^R8HI_y1*vdGF7NBmttdAYrm`~q~btE zZ;jzuI!*D66YLEih{=~ {}l6bfF(x*lp&sI05PIi?%lk3Z0Ts0NaT!}1%Q|5 zQoy6&zuZ`QaXYR4wiJM+IbzUU$(1|uhsOWji66j>D^TaCV9>fm8?4mK$pA_gqZ7Ld zr0}skPS-m3leCS_GI2l>LyKRm`3!JkpkR0X_+cr^&B_2W>{a~%dqtLmU{-ZL;Jo9N z0E@lq7Jvdv920)=>m`?cAbC&O;XMccVhN~s8B `EiZFVF4sIWeO==W#E{c z{>FhIq&G9~(AZ-g<*NPfUHe?LH9)rKo*g9IK(A4s&SM^O`}?PZG(A!ygvhA^fUa0x zX1~};l$Zab-2MM1@i6S3WiZ!75ER(r8xv*VB+so>FOEs)vyOpbVy7P<+CwlpCX3(F zmWtekO598O_3e1fy%jx!L)bcyI)HOd+4r;)4Y3ABhA4*+#m!gs1JTlliW9Zb#FjNG z=YER?F%=}?C&`Qh=avc>=_Q?EQ@tGD5xE1A&sG1V2&Fj>ht|C9kSFHdNjJ9#)#ZQh zcO>>5{O>X#92Zg6=KXQ>X2k0_YvRL5UDo73fg7ubwd<5j&^|M&2`IugjQSQq>uv@a zF1YEPNBw|&2*stI4yE;D9qab+a2ON6t01E;kd4&>Mb~j|#9={$T9|Dnbn9gnZxP|1 z6GvcuSvcWr^dh4pt<$)PGBe%FUk)_)wy=>?@8jUpjOtpZJuxD?4YgnPx{rz20*8JT zep?m07xJ77;D=7mI}Xs`*70t1)jFLG)~8F(I`^ys#3WGDUGXu5-3|yugqi#X BJwFDlaPogI0+%$;s%jf1|r-MmQ(MrYJ^SMi}8*ep)r~O zGH?I$n^Khx`~ -S2_2fu3c9c0XU!E>O`Hyu$~|t3TZo zQxRTRV51;)$)IAB(Ov)WIQ_-`OQfPzDMP^1uUFKZ@$@|_1RDW@yKRju@X}>lF`PU@ z2%cqz4_Rve)API=-RxP%EP^USi#aTgr#S#Wu4O0N8@_Jl_$f>}p7cH8x)8T$ D33NdOg@y$(^`cEI)|j9^x-j}^IEtIaWS4Q6IHh6^96Q+9o}i#-2z+4nPT3@~ zh(2DyVW9Fqfc_aWel*Bfl}xzW49z{H5VS8#DggRP=|%Y3Iota_7L_)jv?Lowuta5j z+@$@B&(!O}od?6@;$vWS_4_-cZ5*D@pe$_Kg LUTZfGxZUD)$aGu&3{PE04FyuY3$^6QT&xS zOzwm-PZO?IV_`5g%z&CGB9lr@cMqPJUt&mJ_pzaCTIShW5rp_5=z0B=bS sQMxTz0L(q73BciQVW*bx}YH^;t5=tB1c5?+7%v%>mh(*h?u>_Mw-xg*?IE zcLhv>-IPVqY66mSu}zVgb$c_?@|INIaq~XnPB~(&p`&+%K(LK)tHgEixOh9(bN=2J zGj2l?S?!G&p*srL_=qd9qUUnVbc{wrWKj@Q2z>?W6XszOtFUwa6L>Ui=meB_k)DQr zI;VcLpkh6zeb|*H^zR1KqDDbeXI3v5zDdu~J2D(7nhvklio`VxWrH~wq4T?kaz_lx zKB+;K531l(bF(TP U=NM}IRhVLws$HzSY}Bo$;-`^fIz_~=RBLXX*H6(yZNogG zk9~k}n5pKhI!B$u4R&t0^cne54y$tm{!UOD1l}F!h?Y+V7*lNHwuxx>47U2y7-_0w z8E`w`LPj@rXoR!|;FE?-_VEvnwR8rJNMa{iyRD*KbJmKdQerNBKwr~B?l;M83~!R) zQiCBD4gF>HNPX@y?1Yq^aLfdg$k|yuW~726GnugtV?l=bn?gkfdM&mP@7r{~5cGDr znZ&^;oy6va($d>taqcnAneM23Oc>#Zx(2;ueD+`nXJx+(4V#HBU&4Wt$+f5_+y|K` zu7xl$%VWn|uP 9$PL>XqZBLH&MLRl02!TO#!i~8mkjT zf`blDo~LnxUCXwVX)hUmeh 1!Z2YYh|aVRbXEgo;R9#7q~xS28CPAY2pGh|W1Txxk;4SgFemPv5H_c1 zaOn2laH^5ep)={H;`ZBc6y>WJMb|BD>)m@_Q=Z*BQDe*iAs@qmnFn8to K~V8E6n!7{=Zsr?8Cm?nKw@kqKTP{InWor4d|9`~1vUCLk%F!y>wC zQtrjD4Z^`8dX>%wJOH&T@T1ShEukG%&YybQ$ uXBeXdG}BNrZW*28C)OA?eXlK% z!F{}521|C9RWar>7NJqtK^~QAP2)GY jL3G?EzCu zM%0KW5Yi#{ewm(!sJq0M3^K^DVDI#tPY+n$J&?cwM4w?=JIbKIYl~iZEnG6_AkmsB z4}FfsrQiGZEY|;!M?TCmehZ#K(I7HsnZ?Z&g~ZVi+A-=lLtxB+Bq10q9t?i(lf{C7 zv5Ic1nS`CV0_mzP!ru5m)`LBW;CM==DMz -N9C$>zU93C^iu__=6gPDEY!rf;K?yb-z3$3A2eb#z3dIU)rb(9-?zfVlzn z!Lf<4s36?{KLRqZY _FFMKa;If!%=6@!iekOc3O4b z3XsOhwII>nWJQdkg;=~Y89u$IvNp}ekN+$u@YJZ|u9tP4W|%E0*n?Ss#5@qk4E@ZH z0D=oa+7c@3RK+^(ymI{2Ri*lpOwb_3+sv^B!!wylA=zVerH<=VoZE<_AvX7kQ|!}v zTj{NRT`8pRMKBpU7&l8euO|kas>J$)kksriLJ0Bl?Cnr{#lbskABFwM5o5mrkf! za_Mu8WptOl |1k#7TV#bvHbG}X@&Tr=<2%y;7bZ^9tF`2mqAFVqf(BmCmE-}a$Bc>B^SF0%* z2X=_vh2b`KoHG`ARuo1rvOZG)%J_@5o`*E`O;UbDb+a$u6O@M^Ou|G3FZPc{f0NEL zt*+~GzauMfPommJg9=`lw4up4zcp*G(aA Sxh=)~C zN&Pn>-Iy;=AjIwDroq`8{a9YUa$=s!Dv2^MTgc ~F!(uw>f)T+M%Q3^?iO qx@Dz2qq2E0fAu1XY zrcVoH=U#ck4J;he>vBjVE hNCZC()YZ6VM;$B;lbw` zOr4zt$Db+J4f71Fgb*mFp4yKF#95GU$b$Jk3Ek^b0tQBL8K=1=*XaKZdF53J`oZ z^4UXocdJk=0mU5a0B<7t(|L#g1m1sG;HaSFfHsY&oUc-uhHIQ*gb?sWtz5d803!4b+hFE(0IQ|)-9VpP^Hd>^j<4)s%rrIbT; zT0BZHv9Ri!`@qdWTIMvHfbX@#WIo1kX-?dpY?4=uXV`>+qfAKr&z{W?5g}t|aZZ@L zP2R2SMV(moiQVT3ILz?4IoHH_)ONu^$6;W!yX<*l9KT64Txl~*2?nj8`W-x(f>GmO z!W~(m3J}Tvpi4x2E{71ukZQr!mIC1`_{^t5a#AgWcw_`#2>x=!N@19wS&Ym}PHsN* z4P1VHB?nZvjPZrx=sjY8fU+_irwbDa2YyUO|8Kar^9MQV6cCJTy#fSa9;m|($H|-k zMTm9COtP^>>$~;{&{3Z=DVHFE^FW29x~x_p)>nIhlB=NHRx+CNSMm}0(j@$Ti8x2_ zZ!>w$4J~)e@8$~0@dt+sPiX8%@9lnRdpYNGOV4Z|Y;cb{oh-B{ t zrd(`iI9RaPChJ$J!pZ1s|8v!-dBErCc)Bv>KbpZo&W%d@&4@#xGqEK;9*rntk|kpA zKb*keN@l8At5wo2_v{T~!@utYh+1@>HOfBY_~-sf>guwe>Uox)tu9 KM?2_5M#(IqyC><*p1+ zEPt_nJ4(J@WBPm~GOA*RgSn^*Mkn@l_ZuiTO;tqO|9}3W9(2&jlv#R*4E5NJQ`cqg z8{h?|l%eU6@C>5^Su(r-%SVOqz52j=t#0W$3onZ23<4H1U_@bsl9B7`^K}VJNdkcr zuyWP%{2!l}F%+1=Q2&kgqwp1Z`&c$MH=VQjg`Kw?-z3x95pPv$l;*!k?&jYIp+Ds= z|M~BF5ZAAC3)m3hfG|hJy}CkhivFj-=ayn0(x^TLHnP)QaRSO_jycK;RH@91;5Him z>(N%70nxu!*-9eh?$Qs?R-~QxHerp&4>!K1_`PHA3k!=#7p@2iDat0NG6i01RV-mL zPzgCFa(7J?C%_3NL&E()r`uLd_aZQzJlz43(r4OLnV`)hAz|jv*(RoR9d^dvMvui? zG@{B7zTVWTz`#8>9pTkptJ`pt*F1Jiv}H+*n*NxCjeMjOR>`bJQYZ&!PP04rHy34O zgE2i+dWxW+gMHJ{-V2vTLT>igdeEJwhN9sD 3V(tF8u4+JKcq)WILQM}j+ zKiG!gi~C)M>AiGFetbv}`mXIax|4tNWro^4S@qg=_wY$vniwb#lboqhB}!|!Pe+@5 zwo>@VP^A7$O*W}*Q`t1o#mbKfx?1P ?Z+clr^t;+6znXEv<5!QXwqr2JZ`BGWGZP-#Y&wvIk9<%ILs-Nei_b6 z7DA@9vYaVb4`rp1!Ftj|wqGGA9QI|GuCX(=6o%=elQh~|z1BGn69=hiv+Tvre@nWEx+ z;oWqsPEr}^Ai6%Dy)&uxx-X^Oa|#{gYuuUi&i+F2;6d$Xx+Lg)4Oi%Zd=f)@9x@9&CnbmY-)?#BF1|AYQ-u@Ooqu#MY z&3L$ My`MWj2Tnb{Fa%O5E-oF#5Qe|JUwW??STT; Ra`LWv3Gl-s?2T9|!#WrkU}vi~{qi`R395H{GM3&9X2y_U|#aD`nB&J=O#D zzF7oBm8$(J<9#d|(H{tTA@6vQjN|2kR&Mo7&r@K2kYq^X>$h$@X_?a3A1>d|&4uVD zKR1@FZ!2##^1;2^af!|lcmlKhakTtJzt{a*j5-)N5W8P?jqffT_=!EYeBA`>VqS}k zGu3|?Xy_E@sf$r@{nUCxC2O8L#p=~LW>eh%;VXL`PMAhKgO{#qKe_s5@__rRPKoVG zetkp*^|PF&%=rA-YW-&roi-_HQv%A%c3KK =r-_ew_5eKRD z;hnH+v%6WPbb^)AImJf3hL44QXjw0IQxcoRYo4o8i@QSW=iYz1ZnT_2byEzIFfW 2wMqjj;Ay&h8 z*GHOtvD8=htqKiy8kViw-}anpxjatR*ZHp&+ZCclKze4$$l|=+YF+{+mP^!_(rwcz z`g8?JX);%OH7?D3G3a*5H`||8ue`jTtN%y*A(4|=}zkebybs+k*?i=g76$Y0DxdY})LZjqolyl|3uRp3u zynCp%>l4uY=Hto3{d37Jc4f-#%Zu$u3jFV51cV `Q~wMiuoYgU5}$l08#npxA&7FUG93N5_u$=b?KLT{)| O4Q%Nn_|-%|)REd0Z4-Q6Lj`KMRwxG9S73Dr48Y#hv-8t58Wtc;)^v z+)VaULF4AfBNb{9_ms0!2WWs&Ea9z|{>_Jz<6II|ID2vDa0?cx;!;(X?dI*w?LrPI z{vTzeg^KES6{Jwnyrd2CdMG9O2gn|K%-y--q>b+?eZGmr-z|y!Q`=geD`wR9Vf8pv z=bvkYh>;=suQ;IDQ{6jth+SeBXEb!!GdW6OtA$#e`V}FfXHmlerZ3*#db$*q6ZR;S z$ta~`tbJH$krb;4z=ottSQly06;F#%e;>T(%VA}&GAwhosW%zLc0yVyShcRxx@1ip z(pCdUXQJD~O@Azx_e-CfSXbgHM9J-rO5TO@<(qi4Ls-lM7xFFs yGjN%|4sa(EY;N zV>?rhHNGjZwZJ3A?0atf0a{NqC%n1o4*R%MB{qG|goW}_uf9p&?CYxEm)C9w6SD0& zj;;2B5rTnk-6E!~BNGRSLTDY3A?lysO3?1`rsazw`dBS;POCh%uo-4wdA$B?^j!Z% zoCA^jv$6J%R}FQKCV$B2U95ZxX*>_v((Got56P#xP52H-wLR^`M$vJi$daate2R9E zRo)jf+kFe`oKmBtE>u`8)w0F!GdWzUEG9EC_T_nlWXUvB;c3TX_HExi>Y(v&2Ys3= z!Aj^rj$g^~(YW+djVMR2sgzIVZcy}MSaj@isj%A-+XYJFxAulFWz^IKxJRqS+hZA} zl0~iETsK*8&D%?oO^4Bn>Mh?>5m8aHcru1k8UY$k)a4X)33cB~ug=rX-86w;L?7ns zNz7dr6W?m`KiE^ec>gq{H(BXG;{@$CvX)!FT^qYu+3@>N^GmmLIGmDuH{nv;a-?^< z^0{4Agn&Kwqz}(V{xJIThtypaJV4fi>=N^T`XQ`?u*=m_{f5yYMt(*XW8z@Hb*VZC zeZ7pTKy~}0aF3#xZUM@}AGjcXJ}ch-n~l|1*&bRBbs}*7s)@Bgvmd_Oexz+ CV zXZDJsPJ^Fg>+>e1v4cu;{68mM(IFTc=ngYgJk%EZF?NJ)>|LLl;5hSl`vN|?5i5R^ z385eBZ?>CmOk1*Rwb}^R FGr+xEu7Dd7d##%y!^i|@GL7|yr0&HqSW~n zRb3P&=`0=VU8S{!geq~2Ae9}!vr i|dCu&czj)w;Xg^$7qr)?p zt)lSc`MCEUyz$+eft@CuAu`#h9R7Lf6KV+R=DQG@%^yKDDV{lk-XUb=Wa?W_O emGfv6FDKzDNADKMPziOWjbKuk&mbMH_=o{xlH#i~ijzCi^)o?j+BB{^Fwk zQ(t4kS5t9gf6^?~B1Iux7U>DG^ei%vw-SO!n+F0XO5G;I!M*>Lvrktwq1``aw7G`H zQA&T8g1j)p4r-c#0XMMk6K?kf+;(Z0jR0A{$ {bvl=ZG z)9dkkoQztJ9MCEF@b#CWF$@ o=K|a J!pv zkdFWDBP(>C*9fD->2ZmCLnc({%;--Hf>acOfC#1&OhAfzW#gm0wlDu_ e?)@SPCpqn{bM zxBJ%vzM~jZHwKg@NS4b&y$TUzY|AIj#;&MFpDJLdnMSl^oYz;!9H_Lb?nvvzzFDXg zCK i?6k&o@#sxXvIb?JjhU1$*Ykj{&Oby4pbov+&ck-jxv}o1eUnXe= zrq&?Iz~g~GPr>;~B_Mn+OUy-vk`AwwJ$<=y(mPpb{l?^IB)vhc$M9cLQMVO2pCYaU zZm;~w-CY?|Bq_T2VS!|9)3(?bE|Z}kT5p+_r@9F1HV@hD6Nj|VW#84BH5f*XH}C!i zsb__>>)}K!$SJ>1R;xEQKHj8oe(|{h(NT0honM=+&&-%WA*#IQI3;ZdC0~d|T2}A| zm8ljqtQjA*vuJ}nO(&s)SBGONHy8h{%Bm?m2kQ=saaN(@z>R8<*QlTQIgY+eaiOkm z!b&-Zc@~q4RebCU0fh{cRE$RmHqL2=MmC3~Ky+==i~1CBPb(Q?#Yc@L&F(KC3~Tns z3w$!bof=bG0#wY@^i->7G4WN97|HC;2z#Un)-m6gleCGZWMd_w9-A6u+tY2O%~cw) z<(k3pf6o-m1uY;-3B2U$d_)QfbKbbgghx*wK=HrvDU7Wf9-U~;)H^|RMrQxEX>%ZN zeEISsp(j5X&SGXkfgQ##e!KN0zeJ@G_H 2N3O EoJX3Bip{c zd3|P?%8ggv{vab()Te-mD)ECU{D5%Q7E)k%hdYNre@0&=r0_*1b^ftitgg!O2a9nd zo!uvQ`4+O8AWyANhf7s7bQaN}!AawrVKbXLMV;^C5^@VO;k3u0pPW7n