diff --git a/latest/404.html b/latest/404.html index dd7acc4b6b..da2828f732 100644 --- a/latest/404.html +++ b/latest/404.html @@ -38,7 +38,7 @@ const path_to_root = ""; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "searchindex-55462916.js"; + window.path_to_searchindex_js = "searchindex-e00ca3de.js"; diff --git a/latest/CAPTCHA_SETUP.html b/latest/CAPTCHA_SETUP.html index b3d1236d85..cbf54d8ce0 100644 --- a/latest/CAPTCHA_SETUP.html +++ b/latest/CAPTCHA_SETUP.html @@ -37,7 +37,7 @@ const path_to_root = ""; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "searchindex-55462916.js"; + window.path_to_searchindex_js = "searchindex-e00ca3de.js"; diff --git a/latest/admin_api/account_validity.html b/latest/admin_api/account_validity.html index a5986f14b0..0d693b2099 100644 --- a/latest/admin_api/account_validity.html +++ b/latest/admin_api/account_validity.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/admin_api/client_server_api_extensions.html b/latest/admin_api/client_server_api_extensions.html index 21c4a23acf..40a84e97d4 100644 --- a/latest/admin_api/client_server_api_extensions.html +++ b/latest/admin_api/client_server_api_extensions.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/admin_api/event_reports.html b/latest/admin_api/event_reports.html index 17963d6b9a..2abe11e653 100644 --- a/latest/admin_api/event_reports.html +++ b/latest/admin_api/event_reports.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/admin_api/experimental_features.html b/latest/admin_api/experimental_features.html index 8e771a662b..b8c0524f05 100644 --- a/latest/admin_api/experimental_features.html +++ b/latest/admin_api/experimental_features.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/admin_api/fetch_event.html b/latest/admin_api/fetch_event.html index e10c0a1250..813dcca515 100644 --- a/latest/admin_api/fetch_event.html +++ b/latest/admin_api/fetch_event.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/admin_api/media_admin_api.html b/latest/admin_api/media_admin_api.html index 10b7dfde29..9dd0d26afe 100644 --- a/latest/admin_api/media_admin_api.html +++ b/latest/admin_api/media_admin_api.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; @@ -365,6 +365,31 @@ not want to get quarantined, especially when
Response:
{}
+When media is quarantined or unquarantined, a change record is created in the +database. This API returns those change records in the order they were created.
+Note: This API should be considered best-effort and expected to have missing or +duplicate records. Currently, this only captures any media explicitly (un)quarantined by +the media quarantine admin API, and the other cases are tracked by +https://github.com/element-hq/synapse/issues/19672. Historical media uploaded before +Synapse 1.152.0 is backfilled in a background update on a best-effort basis.
+Each page has a maximum of 100 records. The first page has the oldest records,
+paginating forwards with each next_batch value.
Request:
+GET /_synapse/admin/v1/media/quarantine_changes?from=2
+
+Where from is the next_batch value from a previous request. It is optional
+and defaults to the first page (the value 0).
Response:
+{
+ "next_batch": 4,
+ "changes": [
+ { "origin": "example.org", "media_id": "abcdefg12345...", "quarantined": true },
+ { "origin": "example.org", "media_id": "abcdefg12345...", "quarantined": false },
+ { "origin": "another.example.org", "media_id": "abcdefg12345...", "quarantined": true }
+ ]
+}
+
This API deletes the local media from the disk of your own server. This includes any local thumbnails and copies of media downloaded from diff --git a/latest/admin_api/purge_history_api.html b/latest/admin_api/purge_history_api.html index 79fa4dc565..103051aacf 100644 --- a/latest/admin_api/purge_history_api.html +++ b/latest/admin_api/purge_history_api.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/admin_api/register_api.html b/latest/admin_api/register_api.html index 96b3e22a7f..02392b705c 100644 --- a/latest/admin_api/register_api.html +++ b/latest/admin_api/register_api.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/admin_api/room_membership.html b/latest/admin_api/room_membership.html index 53e50038dc..6b910b1369 100644 --- a/latest/admin_api/room_membership.html +++ b/latest/admin_api/room_membership.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/admin_api/rooms.html b/latest/admin_api/rooms.html index a11e0d7167..fbfa28c842 100644 --- a/latest/admin_api/rooms.html +++ b/latest/admin_api/rooms.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/admin_api/scheduled_tasks.html b/latest/admin_api/scheduled_tasks.html index 5043b3e2ae..519a17547a 100644 --- a/latest/admin_api/scheduled_tasks.html +++ b/latest/admin_api/scheduled_tasks.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/admin_api/server_notices.html b/latest/admin_api/server_notices.html index c4a5fc0df5..a9ab8550d1 100644 --- a/latest/admin_api/server_notices.html +++ b/latest/admin_api/server_notices.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/admin_api/statistics.html b/latest/admin_api/statistics.html index cc7d2e8d1a..3384186574 100644 --- a/latest/admin_api/statistics.html +++ b/latest/admin_api/statistics.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/admin_api/user_admin_api.html b/latest/admin_api/user_admin_api.html index 1cb624f721..26779cadcd 100644 --- a/latest/admin_api/user_admin_api.html +++ b/latest/admin_api/user_admin_api.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/admin_api/version_api.html b/latest/admin_api/version_api.html index d3165a2f62..bc58697342 100644 --- a/latest/admin_api/version_api.html +++ b/latest/admin_api/version_api.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/application_services.html b/latest/application_services.html index d094bea52f..2af09c762d 100644 --- a/latest/application_services.html +++ b/latest/application_services.html @@ -37,7 +37,7 @@ const path_to_root = ""; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "searchindex-55462916.js"; + window.path_to_searchindex_js = "searchindex-e00ca3de.js"; diff --git a/latest/auth_chain_difference_algorithm.html b/latest/auth_chain_difference_algorithm.html index e220a02c34..e06d4b5f09 100644 --- a/latest/auth_chain_difference_algorithm.html +++ b/latest/auth_chain_difference_algorithm.html @@ -37,7 +37,7 @@ const path_to_root = ""; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "searchindex-55462916.js"; + window.path_to_searchindex_js = "searchindex-e00ca3de.js"; diff --git a/latest/code_style.html b/latest/code_style.html index 0ebe1e460a..981b289f0b 100644 --- a/latest/code_style.html +++ b/latest/code_style.html @@ -37,7 +37,7 @@ const path_to_root = ""; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "searchindex-55462916.js"; + window.path_to_searchindex_js = "searchindex-e00ca3de.js"; diff --git a/latest/consent_tracking.html b/latest/consent_tracking.html index e48c88ccad..8da8444189 100644 --- a/latest/consent_tracking.html +++ b/latest/consent_tracking.html @@ -37,7 +37,7 @@ const path_to_root = ""; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "searchindex-55462916.js"; + window.path_to_searchindex_js = "searchindex-e00ca3de.js"; diff --git a/latest/delegate.html b/latest/delegate.html index 49a222bbd4..a2321e2cbf 100644 --- a/latest/delegate.html +++ b/latest/delegate.html @@ -37,7 +37,7 @@ const path_to_root = ""; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "searchindex-55462916.js"; + window.path_to_searchindex_js = "searchindex-e00ca3de.js"; diff --git a/latest/deprecation_policy.html b/latest/deprecation_policy.html index 66f7ca1339..b688feba7b 100644 --- a/latest/deprecation_policy.html +++ b/latest/deprecation_policy.html @@ -37,7 +37,7 @@ const path_to_root = ""; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "searchindex-55462916.js"; + window.path_to_searchindex_js = "searchindex-e00ca3de.js"; diff --git a/latest/development/cas.html b/latest/development/cas.html index b508489194..e121a46356 100644 --- a/latest/development/cas.html +++ b/latest/development/cas.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/development/contributing_guide.html b/latest/development/contributing_guide.html index 0e90d6dead..76502df7df 100644 --- a/latest/development/contributing_guide.html +++ b/latest/development/contributing_guide.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/development/database_schema.html b/latest/development/database_schema.html index 2a3e755c5f..d1ba1a9120 100644 --- a/latest/development/database_schema.html +++ b/latest/development/database_schema.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/development/demo.html b/latest/development/demo.html index f8888ea2a7..20b4f65532 100644 --- a/latest/development/demo.html +++ b/latest/development/demo.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/development/dependencies.html b/latest/development/dependencies.html index 2daae45103..7f7ea27db9 100644 --- a/latest/development/dependencies.html +++ b/latest/development/dependencies.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/development/experimental_features.html b/latest/development/experimental_features.html index f1e68f273a..0ade445b87 100644 --- a/latest/development/experimental_features.html +++ b/latest/development/experimental_features.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/development/git.html b/latest/development/git.html index 144e84a5e1..8151ca708a 100644 --- a/latest/development/git.html +++ b/latest/development/git.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/development/internal_documentation/index.html b/latest/development/internal_documentation/index.html index 1decc76f65..9aaf2c873c 100644 --- a/latest/development/internal_documentation/index.html +++ b/latest/development/internal_documentation/index.html @@ -37,7 +37,7 @@ const path_to_root = "../../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../../searchindex-55462916.js"; + window.path_to_searchindex_js = "../../searchindex-e00ca3de.js"; diff --git a/latest/development/internal_documentation/release_notes_review_checklist.html b/latest/development/internal_documentation/release_notes_review_checklist.html index 94b4c1d990..58c507eb36 100644 --- a/latest/development/internal_documentation/release_notes_review_checklist.html +++ b/latest/development/internal_documentation/release_notes_review_checklist.html @@ -37,7 +37,7 @@ const path_to_root = "../../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../../searchindex-55462916.js"; + window.path_to_searchindex_js = "../../searchindex-e00ca3de.js"; diff --git a/latest/development/releases.html b/latest/development/releases.html index 1f3971565c..31fec31bf9 100644 --- a/latest/development/releases.html +++ b/latest/development/releases.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/development/reviews.html b/latest/development/reviews.html index bf6d01d481..4fc75dc35e 100644 --- a/latest/development/reviews.html +++ b/latest/development/reviews.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/development/room-dag-concepts.html b/latest/development/room-dag-concepts.html index 4304a04eb9..dda9a511fa 100644 --- a/latest/development/room-dag-concepts.html +++ b/latest/development/room-dag-concepts.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/development/saml.html b/latest/development/saml.html index 6f689f2618..32a50472b8 100644 --- a/latest/development/saml.html +++ b/latest/development/saml.html @@ -37,7 +37,7 @@ const path_to_root = "../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../searchindex-55462916.js"; + window.path_to_searchindex_js = "../searchindex-e00ca3de.js"; diff --git a/latest/development/synapse_architecture/cancellation.html b/latest/development/synapse_architecture/cancellation.html index 73f8a5b9f1..a8f4a2fc6f 100644 --- a/latest/development/synapse_architecture/cancellation.html +++ b/latest/development/synapse_architecture/cancellation.html @@ -37,7 +37,7 @@ const path_to_root = "../../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../../searchindex-55462916.js"; + window.path_to_searchindex_js = "../../searchindex-e00ca3de.js"; diff --git a/latest/development/synapse_architecture/faster_joins.html b/latest/development/synapse_architecture/faster_joins.html index 941355b29f..4de5be72f1 100644 --- a/latest/development/synapse_architecture/faster_joins.html +++ b/latest/development/synapse_architecture/faster_joins.html @@ -37,7 +37,7 @@ const path_to_root = "../../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../../searchindex-55462916.js"; + window.path_to_searchindex_js = "../../searchindex-e00ca3de.js"; diff --git a/latest/development/synapse_architecture/streams.html b/latest/development/synapse_architecture/streams.html index b50a4b8edf..fd3abff67e 100644 --- a/latest/development/synapse_architecture/streams.html +++ b/latest/development/synapse_architecture/streams.html @@ -37,7 +37,7 @@ const path_to_root = "../../"; const default_light_theme = "light"; const default_dark_theme = "navy"; - window.path_to_searchindex_js = "../../searchindex-55462916.js"; + window.path_to_searchindex_js = "../../searchindex-e00ca3de.js"; @@ -329,6 +329,8 @@ Readers must also advance their record of the writer’s current position for th necessary registration and event handling.
Create your stream:
SEQUENCE (this will be referenced by the MultiWriterIdGenerator below).synapse/_scripts/synapse_port_db.py so it knows about your new SEQUENCE: add a new _setup_sequence(...)Update docs:
+For streams to be used in sync:
StreamToken
diff --git a/latest/federate.html b/latest/federate.html
index 6f7691c441..569b51d1cf 100644
--- a/latest/federate.html
+++ b/latest/federate.html
@@ -37,7 +37,7 @@
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-55462916.js";
+ window.path_to_searchindex_js = "searchindex-e00ca3de.js";
diff --git a/latest/index.html b/latest/index.html
index d8ecf5291b..25b1e03205 100644
--- a/latest/index.html
+++ b/latest/index.html
@@ -37,7 +37,7 @@
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-55462916.js";
+ window.path_to_searchindex_js = "searchindex-e00ca3de.js";
diff --git a/latest/jwt.html b/latest/jwt.html
index d738977588..dba6f1038f 100644
--- a/latest/jwt.html
+++ b/latest/jwt.html
@@ -37,7 +37,7 @@
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-55462916.js";
+ window.path_to_searchindex_js = "searchindex-e00ca3de.js";
diff --git a/latest/log_contexts.html b/latest/log_contexts.html
index 2764456995..cccdfb0e6f 100644
--- a/latest/log_contexts.html
+++ b/latest/log_contexts.html
@@ -37,7 +37,7 @@
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-55462916.js";
+ window.path_to_searchindex_js = "searchindex-e00ca3de.js";
diff --git a/latest/manhole.html b/latest/manhole.html
index 87968c7672..4c5a6b22d2 100644
--- a/latest/manhole.html
+++ b/latest/manhole.html
@@ -37,7 +37,7 @@
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-55462916.js";
+ window.path_to_searchindex_js = "searchindex-e00ca3de.js";
diff --git a/latest/media_repository.html b/latest/media_repository.html
index a3d9b1c9f6..6fd141902d 100644
--- a/latest/media_repository.html
+++ b/latest/media_repository.html
@@ -37,7 +37,7 @@
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-55462916.js";
+ window.path_to_searchindex_js = "searchindex-e00ca3de.js";
diff --git a/latest/message_retention_policies.html b/latest/message_retention_policies.html
index d7121feda4..d70259703b 100644
--- a/latest/message_retention_policies.html
+++ b/latest/message_retention_policies.html
@@ -37,7 +37,7 @@
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-55462916.js";
+ window.path_to_searchindex_js = "searchindex-e00ca3de.js";
diff --git a/latest/metrics-howto.html b/latest/metrics-howto.html
index a19a488cf5..d5ba7625df 100644
--- a/latest/metrics-howto.html
+++ b/latest/metrics-howto.html
@@ -37,7 +37,7 @@
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-55462916.js";
+ window.path_to_searchindex_js = "searchindex-e00ca3de.js";
diff --git a/latest/modules/account_data_callbacks.html b/latest/modules/account_data_callbacks.html
index e5cd1291ac..31173309ee 100644
--- a/latest/modules/account_data_callbacks.html
+++ b/latest/modules/account_data_callbacks.html
@@ -37,7 +37,7 @@
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-55462916.js";
+ window.path_to_searchindex_js = "../searchindex-e00ca3de.js";
diff --git a/latest/modules/account_validity_callbacks.html b/latest/modules/account_validity_callbacks.html
index b5979201f8..313bdb321b 100644
--- a/latest/modules/account_validity_callbacks.html
+++ b/latest/modules/account_validity_callbacks.html
@@ -37,7 +37,7 @@
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-55462916.js";
+ window.path_to_searchindex_js = "../searchindex-e00ca3de.js";
diff --git a/latest/modules/add_extra_fields_to_client_events_unsigned.html b/latest/modules/add_extra_fields_to_client_events_unsigned.html
index e9650d1674..72ca3c07ff 100644
--- a/latest/modules/add_extra_fields_to_client_events_unsigned.html
+++ b/latest/modules/add_extra_fields_to_client_events_unsigned.html
@@ -37,7 +37,7 @@
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-55462916.js";
+ window.path_to_searchindex_js = "../searchindex-e00ca3de.js";
diff --git a/latest/modules/background_update_controller_callbacks.html b/latest/modules/background_update_controller_callbacks.html
index 9b6119b5fd..d25edab10a 100644
--- a/latest/modules/background_update_controller_callbacks.html
+++ b/latest/modules/background_update_controller_callbacks.html
@@ -37,7 +37,7 @@
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-55462916.js";
+ window.path_to_searchindex_js = "../searchindex-e00ca3de.js";
diff --git a/latest/modules/index.html b/latest/modules/index.html
index 188e368c2a..dfc38d79ba 100644
--- a/latest/modules/index.html
+++ b/latest/modules/index.html
@@ -37,7 +37,7 @@
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-55462916.js";
+ window.path_to_searchindex_js = "../searchindex-e00ca3de.js";
diff --git a/latest/modules/media_repository_callbacks.html b/latest/modules/media_repository_callbacks.html
index e0ead8d12f..2efbaa9057 100644
--- a/latest/modules/media_repository_callbacks.html
+++ b/latest/modules/media_repository_callbacks.html
@@ -37,7 +37,7 @@
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-55462916.js";
+ window.path_to_searchindex_js = "../searchindex-e00ca3de.js";
diff --git a/latest/modules/password_auth_provider_callbacks.html b/latest/modules/password_auth_provider_callbacks.html
index 26fe4e7ea8..1f5f7782fb 100644
--- a/latest/modules/password_auth_provider_callbacks.html
+++ b/latest/modules/password_auth_provider_callbacks.html
@@ -37,7 +37,7 @@
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-55462916.js";
+ window.path_to_searchindex_js = "../searchindex-e00ca3de.js";
diff --git a/latest/modules/porting_legacy_module.html b/latest/modules/porting_legacy_module.html
index d83b5c090b..bcce9f7d98 100644
--- a/latest/modules/porting_legacy_module.html
+++ b/latest/modules/porting_legacy_module.html
@@ -37,7 +37,7 @@
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-55462916.js";
+ window.path_to_searchindex_js = "../searchindex-e00ca3de.js";
diff --git a/latest/modules/presence_router_callbacks.html b/latest/modules/presence_router_callbacks.html
index a914c5165c..68ffed5dda 100644
--- a/latest/modules/presence_router_callbacks.html
+++ b/latest/modules/presence_router_callbacks.html
@@ -37,7 +37,7 @@
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-55462916.js";
+ window.path_to_searchindex_js = "../searchindex-e00ca3de.js";
diff --git a/latest/modules/ratelimit_callbacks.html b/latest/modules/ratelimit_callbacks.html
index 5058dbd22a..1d92684c78 100644
--- a/latest/modules/ratelimit_callbacks.html
+++ b/latest/modules/ratelimit_callbacks.html
@@ -37,7 +37,7 @@
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-55462916.js";
+ window.path_to_searchindex_js = "../searchindex-e00ca3de.js";
diff --git a/latest/modules/spam_checker_callbacks.html b/latest/modules/spam_checker_callbacks.html
index 14cfe1bf33..56d5d4783d 100644
--- a/latest/modules/spam_checker_callbacks.html
+++ b/latest/modules/spam_checker_callbacks.html
@@ -37,7 +37,7 @@
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-55462916.js";
+ window.path_to_searchindex_js = "../searchindex-e00ca3de.js";
diff --git a/latest/modules/third_party_rules_callbacks.html b/latest/modules/third_party_rules_callbacks.html
index cd2d8b4544..ed41c29448 100644
--- a/latest/modules/third_party_rules_callbacks.html
+++ b/latest/modules/third_party_rules_callbacks.html
@@ -37,7 +37,7 @@
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-55462916.js";
+ window.path_to_searchindex_js = "../searchindex-e00ca3de.js";
diff --git a/latest/modules/writing_a_module.html b/latest/modules/writing_a_module.html
index 879e68f0c7..44ab6cfe17 100644
--- a/latest/modules/writing_a_module.html
+++ b/latest/modules/writing_a_module.html
@@ -37,7 +37,7 @@
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-55462916.js";
+ window.path_to_searchindex_js = "../searchindex-e00ca3de.js";
diff --git a/latest/openid.html b/latest/openid.html
index 1cd8e1df4d..85a83e68cd 100644
--- a/latest/openid.html
+++ b/latest/openid.html
@@ -37,7 +37,7 @@
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-55462916.js";
+ window.path_to_searchindex_js = "searchindex-e00ca3de.js";
diff --git a/latest/opentracing.html b/latest/opentracing.html
index b127e52019..e2ba12410a 100644
--- a/latest/opentracing.html
+++ b/latest/opentracing.html
@@ -37,7 +37,7 @@
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-55462916.js";
+ window.path_to_searchindex_js = "searchindex-e00ca3de.js";
diff --git a/latest/other/running_synapse_on_single_board_computers.html b/latest/other/running_synapse_on_single_board_computers.html
index 0bfa8feabc..ac3c93ebc4 100644
--- a/latest/other/running_synapse_on_single_board_computers.html
+++ b/latest/other/running_synapse_on_single_board_computers.html
@@ -37,7 +37,7 @@
const path_to_root = "../";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "../searchindex-55462916.js";
+ window.path_to_searchindex_js = "../searchindex-e00ca3de.js";
diff --git a/latest/password_auth_providers.html b/latest/password_auth_providers.html
index 00f448d677..3c61066702 100644
--- a/latest/password_auth_providers.html
+++ b/latest/password_auth_providers.html
@@ -37,7 +37,7 @@
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-55462916.js";
+ window.path_to_searchindex_js = "searchindex-e00ca3de.js";
diff --git a/latest/postgres.html b/latest/postgres.html
index 6b3e2f8b02..bd8d397c1b 100644
--- a/latest/postgres.html
+++ b/latest/postgres.html
@@ -37,7 +37,7 @@
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-55462916.js";
+ window.path_to_searchindex_js = "searchindex-e00ca3de.js";
diff --git a/latest/print.html b/latest/print.html
index 358666afee..8cd4ad7169 100644
--- a/latest/print.html
+++ b/latest/print.html
@@ -38,7 +38,7 @@
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-55462916.js";
+ window.path_to_searchindex_js = "searchindex-e00ca3de.js";
@@ -2012,7 +2012,7 @@ v1.61.0.
A new quarantined_media_changes stream writer is
+introduced. Existing deployments which route the /quarantine_media endpoints to a
+worker (instead of the main process) must also add those workers to the
+quarantined_media_changes stream writer list. Quarantining media will not work without
+this.
If your deployment does not use workers, or instead uses the main process for +quarantining media, you do not need to make any changes to your configuration.
systemd pip extraThe matrix-synapse[systemd] pip extra has been removed.
@@ -12191,9 +12200,9 @@ a response of +PONG.
pip install "matrix-synapse[redis]"
-Note that these dependencies are included when synapse is installed with pip install matrix-synapse[all]. They are also included in the debian packages from
-packages.matrix.org and in the docker images at
-https://hub.docker.com/r/ectorim/synapse/.
Note that these dependencies are included when Synapse is installed with pip install matrix-synapse[all]. They are also included in the Debian
+packages and in the Docker
+images.
To make effective use of the workers, you will need to configure an HTTP
reverse-proxy such as nginx or haproxy, which will direct incoming requests to
the correct worker, or to the main synapse instance. See
@@ -12668,6 +12677,12 @@ configured as stream writer for the device_lists stream:
quarantined_media_changes streamThe quarantined_media_changes stream supports multiple writers. The following endpoints
+can be handled by any worker, but should be routed directly to one of the workers
+configured as stream writer for the quarantined_media_changes stream:
^/_synapse/admin/v1/quarantine_media/.*$
+
The
outbound_federation_restricted_to
@@ -13283,6 +13298,12 @@ background updates which won’t be cancelled once started.
populate_stats_process_rooms - Recalculate the stats for all rooms.regenerate_directory - Recalculate the user directory if it is stale or out of sync.event_resign - Re-sign all locally-sent events with the current signing key. This is useful after rotating the server’s signing key to ensure all historical events are signed with the new key. Optional additional parameters:
+old_key - Only re-sign events whose signature verifies against this key. Format: "ed25519:key_id base64_public_key" (e.g. "ed25519:my_old_key XGX0JRS2Af3be3knz2fBiRbApjm2Dh61gXDJA8kcJNI").before_ts - Only re-sign events with a received_ts less than this value (milliseconds since the epoch).Response:
{}
+When media is quarantined or unquarantined, a change record is created in the +database. This API returns those change records in the order they were created.
+Note: This API should be considered best-effort and expected to have missing or +duplicate records. Currently, this only captures any media explicitly (un)quarantined by +the media quarantine admin API, and the other cases are tracked by +https://github.com/element-hq/synapse/issues/19672. Historical media uploaded before +Synapse 1.152.0 is backfilled in a background update on a best-effort basis.
+Each page has a maximum of 100 records. The first page has the oldest records,
+paginating forwards with each next_batch value.
Request:
+GET /_synapse/admin/v1/media/quarantine_changes?from=2
+
+Where from is the next_batch value from a previous request. It is optional
+and defaults to the first page (the value 0).
Response:
+{
+ "next_batch": 4,
+ "changes": [
+ { "origin": "example.org", "media_id": "abcdefg12345...", "quarantined": true },
+ { "origin": "example.org", "media_id": "abcdefg12345...", "quarantined": false },
+ { "origin": "another.example.org", "media_id": "abcdefg12345...", "quarantined": true }
+ ]
+}
+
This API deletes the local media from the disk of your own server. This includes any local thumbnails and copies of media downloaded from @@ -20256,6 +20302,8 @@ Readers must also advance their record of the writer’s current position for th necessary registration and event handling.
Create your stream:
SEQUENCE (this will be referenced by the MultiWriterIdGenerator below).synapse/_scripts/synapse_port_db.py so it knows about your new SEQUENCE: add a new _setup_sequence(...)Update docs:
+For streams to be used in sync:
StreamToken
diff --git a/latest/replication.html b/latest/replication.html
index ad743c56f9..e475438f66 100644
--- a/latest/replication.html
+++ b/latest/replication.html
@@ -37,7 +37,7 @@
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-55462916.js";
+ window.path_to_searchindex_js = "searchindex-e00ca3de.js";
diff --git a/latest/reverse_proxy.html b/latest/reverse_proxy.html
index b3d6d2deca..292787b87a 100644
--- a/latest/reverse_proxy.html
+++ b/latest/reverse_proxy.html
@@ -37,7 +37,7 @@
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-55462916.js";
+ window.path_to_searchindex_js = "searchindex-e00ca3de.js";
diff --git a/latest/room_and_user_statistics.html b/latest/room_and_user_statistics.html
index 2d48eb71db..c171c28869 100644
--- a/latest/room_and_user_statistics.html
+++ b/latest/room_and_user_statistics.html
@@ -37,7 +37,7 @@
const path_to_root = "";
const default_light_theme = "light";
const default_dark_theme = "navy";
- window.path_to_searchindex_js = "searchindex-55462916.js";
+ window.path_to_searchindex_js = "searchindex-e00ca3de.js";
diff --git a/latest/schema/synapse-config.schema.json b/latest/schema/synapse-config.schema.json
index 0e961bd4c8..e4fe085c73 100644
--- a/latest/schema/synapse-config.schema.json
+++ b/latest/schema/synapse-config.schema.json
@@ -1,6 +1,6 @@
{
"$schema": "https://element-hq.github.io/synapse/latest/schema/v1/meta.schema.json",
- "$id": "https://element-hq.github.io/synapse/schema/synapse/v1.151/synapse-config.schema.json",
+ "$id": "https://element-hq.github.io/synapse/schema/synapse/v1.152/synapse-config.schema.json",
"type": "object",
"properties": {
"modules": {
diff --git a/latest/searcher-c2a407aa.js b/latest/searcher-c2a407aa.js
index fd14672572..0db364bf18 100644
--- a/latest/searcher-c2a407aa.js
+++ b/latest/searcher-c2a407aa.js
@@ -437,7 +437,7 @@ window.search = window.search || {};
if (yes) {
loadSearchScript(
window.path_to_searchindex_js ||
- path_to_root + 'searchindex-55462916.js',
+ path_to_root + 'searchindex-e00ca3de.js',
'mdbook-search-index');
search_wrap.classList.remove('hidden');
searchicon.setAttribute('aria-expanded', 'true');
diff --git a/latest/searchindex-55462916.js b/latest/searchindex-55462916.js
deleted file mode 100644
index c51a1d2183..0000000000
--- a/latest/searchindex-55462916.js
+++ /dev/null
@@ -1 +0,0 @@
-window.search = Object.assign(window.search, JSON.parse('{"doc_urls":["welcome_and_overview.html#introduction","welcome_and_overview.html#installing-and-using-synapse","welcome_and_overview.html#developing-on-synapse","welcome_and_overview.html#reporting-a-security-vulnerability","setup/installation.html#installation-instructions","setup/installation.html#choosing-your-server-name","setup/installation.html#installing-synapse","setup/installation.html#prebuilt-packages","setup/installation.html#installing-as-a-python-module-from-pypi","setup/installation.html#setting-up-synapse","setup/installation.html#using-postgresql","setup/installation.html#tls-certificates","setup/installation.html#client-well-known-uri","setup/installation.html#email","setup/installation.html#registering-a-user","setup/installation.html#setting-up-a-turn-server","setup/installation.html#url-previews","setup/installation.html#backups","setup/installation.html#troubleshooting-installation","setup/security.html#security","setup/security.html#content-repository","postgres.html#using-postgres","postgres.html#install-postgres-client-libraries","postgres.html#set-up-database","postgres.html#synapse-config","postgres.html#postgresql-major-version-upgrades","postgres.html#backups","postgres.html#tuning-postgres","postgres.html#porting-from-sqlite","postgres.html#overview","postgres.html#using-the-port-script","postgres.html#troubleshooting","postgres.html#alternative-auth-methods","postgres.html#fixing-incorrect-collate-or-ctype","reverse_proxy.html#using-a-reverse-proxy-with-synapse","reverse_proxy.html#homeserver-configuration","reverse_proxy.html#reverse-proxy-configuration-examples","reverse_proxy.html#nginx","reverse_proxy.html#nginx-proxy-manager-or-npmplus","reverse_proxy.html#caddy-v2","reverse_proxy.html#apache","reverse_proxy.html#haproxy","reverse_proxy.html#relayd","reverse_proxy.html#health-check-endpoint","reverse_proxy.html#synapse-administration-endpoints","setup/forward_proxy.html#using-a-forward-proxy-with-synapse","setup/forward_proxy.html#configure","setup/forward_proxy.html#connection-types","setup/forward_proxy.html#troubleshooting","turn-howto.html#overview","turn-howto.html#requirements","turn-howto.html#synapse-setup","turn-howto.html#troubleshooting","setup/turn/coturn.html#coturn-turn-server","setup/turn/coturn.html#coturn-setup","setup/turn/coturn.html#initial-installation","setup/turn/coturn.html#configuration","setup/turn/eturnal.html#eturnal-turn-server","setup/turn/eturnal.html#eturnal-setup","setup/turn/eturnal.html#initial-installation","setup/turn/eturnal.html#configuration","setup/turn/eturnal.html#eturnalctl-opterations-script","delegate.html#delegation-of-incoming-federation-traffic","delegate.html#well-known-delegation","delegate.html#external-server","delegate.html#serving-a-well-knownmatrixserver-file-with-synapse","delegate.html#srv-dns-record-delegation","delegate.html#delegation-faq","delegate.html#when-do-i-need-delegation","delegate.html#should-i-use-a-reverse-proxy-for-federation-traffic","upgrade.html#upgrading-synapse","upgrade.html#rolling-back-to-older-versions","upgrade.html#upgrading-from-a-very-old-version","upgrade.html#upgrading-to-v11500","upgrade.html#removal-of-the-systemd-pip-extra","upgrade.html#module-api-deprecation-of-the-deactivation-parameter-in-the-set_displayname-method","upgrade.html#updated-request-log-format-processed-request-","upgrade.html#upgrading-to-v11460","upgrade.html#drop-support-for-ubuntu-2504-plucky-puffin-and-add-support-for-2510-questing-quokka","upgrade.html#removal-of-msc2697-legacy-dehydrated-devices","upgrade.html#upgrading-to-v11440","upgrade.html#worker-support-for-unstable-msc4140-restart-endpoint","upgrade.html#unstable-mutual-rooms-endpoint-is-now-behind-an-experimental-feature-flag","upgrade.html#upgrading-to-v11430","upgrade.html#dropping-support-for-postgresql-13","upgrade.html#upgrading-to-v11420","upgrade.html#python-310-is-now-required","upgrade.html#sqlite-3400-is-now-required","upgrade.html#upgrading-to-v11410","upgrade.html#docker-images-now-based-on-debian-trixie-with-python-313","upgrade.html#upgrading-to-v11400","upgrade.html#users-of-synapse-s3-storage-provider-must-update-the-module-to-v160","upgrade.html#upgrading-to-v11390","upgrade.html#register-requests-from-old-application-service-implementations-may-break-when-using-mas","upgrade.html#upgrading-to-v11382","upgrade.html#drop-support-for-ubuntu-2410-oracular-oriole-and-add-support-for-ubuntu-2504-plucky-puffin","upgrade.html#upgrading-to-v11360","upgrade.html#deprecate-run_as_background_process-exported-as-part-of-the-module-api-interface-in-favor-of-moduleapirun_as_background_process","upgrade.html#metric-labels-have-changed-on-synapse_federation_last_received_pdu_time-and-synapse_federation_last_sent_pdu_time","upgrade.html#stable-integration-with-matrix-authentication-service","upgrade.html#upgrading-to-v11350","upgrade.html#on_user_registration-module-api-callback-may-now-run-on-any-worker","upgrade.html#upgrading-to-v11340","upgrade.html#icu-bundled-with-synapse","upgrade.html#upgrading-to-v11300","upgrade.html#documented-endpoint-which-can-be-delegated-to-a-federation-worker","upgrade.html#upgrading-to-v11260","upgrade.html#room-list-publication-rules-change","upgrade.html#change-of-signing-key-expiry-date-for-the-debianubuntu-package-repository","upgrade.html#upgrading-to-v11220","upgrade.html#dropping-support-for-postgresql-11-and-12","upgrade.html#upgrading-to-v11200","upgrade.html#removal-of-experimental-msc3886-feature","upgrade.html#authenticated-media-is-now-enforced-by-default","upgrade.html#upgrading-to-v11190","upgrade.html#minimum-supported-python-version","upgrade.html#upgrading-to-v11110","upgrade.html#new-worker-endpoints-for-authenticated-client-and-federation-media","upgrade.html#upgrading-to-v11060","upgrade.html#minimum-supported-rust-version","upgrade.html#upgrading-to-v11000","upgrade.html#minimum-supported-rust-version-1","upgrade.html#upgrading-to-v1930","upgrade.html#minimum-supported-rust-version-2","upgrade.html#upgrading-to-v1900","upgrade.html#app-service-query-parameter-authorization-is-now-a-configuration-option","upgrade.html#upgrading-to-v1890","upgrade.html#removal-of-unspecced-user-property-for-register","upgrade.html#upgrading-to-v1880","upgrade.html#minimum-supported-python-version-1","upgrade.html#removal-of-worker_replication_-settings","upgrade.html#upgrading-to-v1860","upgrade.html#minimum-supported-rust-version-3","upgrade.html#upgrading-to-v1850","upgrade.html#application-service-registration-with-user-property-deprecation","upgrade.html#upgrading-to-v1840","upgrade.html#deprecation-of-worker_replication_-configuration-settings","upgrade.html#example-change","upgrade.html#upgrading-to-v1810","upgrade.html#application-service-path--authentication-deprecations","upgrade.html#upgrading-to-v1800","upgrade.html#reporting-events-error-code-change","upgrade.html#upgrading-to-v1790","upgrade.html#the-on_threepid_bind-module-callback-method-has-been-deprecated","upgrade.html#upgrading-to-v1780","upgrade.html#deprecate-the-_synapseadminv1mediaserver_namedelete-admin-api","upgrade.html#upgrading-to-v1760","upgrade.html#faster-joins-are-enabled-by-default","upgrade.html#changes-to-the-account-data-replication-streams","upgrade.html#minimum-version-of-poetry-is-now-132","upgrade.html#upgrading-to-v1740","upgrade.html#unicode-support-in-user-search","upgrade.html#user-directory-rebuild","upgrade.html#upgrading-to-v1730","upgrade.html#legacy-prometheus-metric-names-have-now-been-removed","upgrade.html#upgrading-to-v1720","upgrade.html#dropping-support-for-postgresql-10","upgrade.html#upgrading-to-v1710","upgrade.html#removal-of-the-generate_short_term_login_token-module-api-method","upgrade.html#changes-to-the-events-received-by-application-services-interest","upgrade.html#legacy-prometheus-metric-names-are-now-disabled-by-default","upgrade.html#upgrading-to-v1690","upgrade.html#changes-to-the-receipts-replication-streams","upgrade.html#deprecation-of-legacy-prometheus-metric-names","upgrade.html#deprecation-of-the-generate_short_term_login_token-module-api-method","upgrade.html#upgrading-to-v1680","upgrade.html#sqlite-version-requirement","upgrade.html#rust-requirement-when-building-from-source","upgrade.html#upgrading-to-v1670","upgrade.html#direct-tcp-replication-is-no-longer-supported-migrate-to-redis","upgrade.html#minimum-version-of-poetry-is-now-v120","upgrade.html#rust-requirement-in-the-next-release","upgrade.html#sqlite-version-requirement-in-the-next-release","upgrade.html#upgrading-to-v1660","upgrade.html#delegation-of-email-validation-no-longer-supported","upgrade.html#upgrading-to-v1640","upgrade.html#deprecation-of-the-ability-to-delegate-e-mail-verification-to-identity-servers","upgrade.html#changes-to-the-event-replication-streams","upgrade.html#frozendict-release","upgrade.html#upgrading-to-v1620","upgrade.html#new-signatures-for-spam-checker-callbacks","upgrade.html#upgrading-to-v1610","upgrade.html#removal-of-deprecated-communitygroups","upgrade.html#worker-endpoints","upgrade.html#upgrading-to-v1600","upgrade.html#adding-a-new-unique-index-to-state_group_edges-could-fail-if-your-database-is-corrupted","upgrade.html#on-postgres","upgrade.html#on-sqlite","upgrade.html#for-more-details","upgrade.html#new-signature-for-the-spam-checker-callback-check_event_for_spam","upgrade.html#upgrading-to-v1590","upgrade.html#device-name-lookup-over-federation-has-been-disabled-by-default","upgrade.html#deprecation-of-the-synapseappappservice-and-synapseappuser_dir-worker-application-types","upgrade.html#upgrading-to-v1580","upgrade.html#groupscommunities-feature-has-been-disabled-by-default","upgrade.html#upgrading-to-v1570","upgrade.html#changes-to-database-schema-for-application-services","upgrade.html#upgrading-to-v1560","upgrade.html#open-registration-without-verification-is-now-disabled-by-default","upgrade.html#groupscommunities-feature-has-been-deprecated","upgrade.html#change-in-behaviour-for-postgresql-databases-with-unsafe-locale","upgrade.html#upgrading-to-v1550","upgrade.html#synctl-script-has-been-moved","upgrade.html#compatibility-dropped-for-mjolnir-131-and-earlier","upgrade.html#upgrading-to-v1540","upgrade.html#legacy-structured-logging-configuration-removal","upgrade.html#upgrading-to-v1530","upgrade.html#dropping-support-for-webclient-listeners-and-non-https-web_client_location","upgrade.html#stablisation-of-msc3231","upgrade.html#time-based-cache-expiry-is-now-enabled-by-default","upgrade.html#deprecation-of-capability-orgmatrixmsc3283","upgrade.html#removal-of-user_may_create_room_with_invites","upgrade.html#upgrading-to-v1520","upgrade.html#twisted-security-release","upgrade.html#upgrading-to-v1510","upgrade.html#deprecation-of-webclient-listeners-and-non-https-web_client_location","upgrade.html#upgrading-to-v1500","upgrade.html#dropping-support-for-old-python-and-postgres-versions","upgrade.html#upgrading-to-v1470","upgrade.html#removal-of-old-room-admin-api","upgrade.html#deprecation-of-the-user_may_create_room_with_invites-module-callback","upgrade.html#upgrading-to-v1450","upgrade.html#changes-required-to-media-storage-provider-modules-when-reading-from-the-synapse-configuration-object","upgrade.html#upgrading-to-v1440","upgrade.html#the-url-preview-cache-is-no-longer-mirrored-to-storage-providers","upgrade.html#upgrading-to-v1430","upgrade.html#the-spaces-summary-apis-can-now-be-handled-by-workers","upgrade.html#upgrading-to-v1420","upgrade.html#removal-of-old-room-admin-api-1","upgrade.html#user-interactive-authentication-fallback-templates-can-now-display-errors","upgrade.html#removal-of-out-of-date-email-pushers","upgrade.html#upgrading-to-v1410","upgrade.html#add-support-for-routing-outbound-http-requests-via-a-proxy-for-federation","upgrade.html#deprecation-of-template_dir","upgrade.html#_synapseadminv1usersuseridmedia-must-be-handled-by-media-workers","upgrade.html#upgrading-to-v1390","upgrade.html#deprecation-of-the-current-third-party-rules-module-interface","upgrade.html#upgrading-to-v1380","upgrade.html#re-indexing-of-events-table-on-postgres-databases","upgrade.html#upgrading-to-v1370","upgrade.html#deprecation-of-the-current-spam-checker-interface","upgrade.html#upgrading-to-v1340","upgrade.html#room_invite_state_types-configuration-setting","upgrade.html#upgrading-to-v1330","upgrade.html#account-validity-html-templates-can-now-display-a-users-expiration-date","upgrade.html#upgrading-to-v1320","upgrade.html#regression-causing-connected-prometheus-instances-to-become-overwhelmed","upgrade.html#dropping-support-for-old-python-postgres-and-sqlite-versions","upgrade.html#removal-of-old-list-accounts-admin-api","upgrade.html#application-services-must-use-type-mloginapplication_service-when-registering-users","upgrade.html#upgrading-to-v1290","upgrade.html#requirement-for-x-forwarded-proto-header","upgrade.html#upgrading-to-v1270","upgrade.html#changes-to-callback-uri-for-oauth2--openid-connect-and-saml2","upgrade.html#changes-to-html-templates","upgrade.html#upgrading-to-v1260","upgrade.html#rolling-back-to-v1250-after-a-failed-upgrade","upgrade.html#upgrading-to-v1250","upgrade.html#last-release-supporting-python-35","upgrade.html#blacklisting-ip-ranges","upgrade.html#upgrading-to-v1240","upgrade.html#custom-openid-connect-mapping-provider-breaking-change","upgrade.html#removal-historical-synapse-admin-api","upgrade.html#upgrading-to-v1230","upgrade.html#structured-logging-configuration-breaking-changes","upgrade.html#upgrading-to-v1220","upgrade.html#thirdpartyeventrules-breaking-changes","upgrade.html#upgrading-to-v1210","upgrade.html#forwarding-_synapseclient-through-your-reverse-proxy","upgrade.html#new-html-templates","upgrade.html#updated-single-sign-on-html-templates","upgrade.html#upgrading-to-v1180","upgrade.html#docker--py3-suffix-will-be-removed-in-future-versions","upgrade.html#redis-replication-is-now-recommended-in-lieu-of-tcp-replication","upgrade.html#upgrading-to-v1140","upgrade.html#upgrading-to-v1130","upgrade.html#incorrect-database-migration-in-old-synapse-versions","upgrade.html#new-single-sign-on-html-templates","upgrade.html#synapse-sso-plugins-method-deprecation","upgrade.html#rolling-back-to-v1124-after-a-failed-upgrade","upgrade.html#upgrading-to-v1120","upgrade.html#upgrading-to-v1100","upgrade.html#upgrading-to-v180","upgrade.html#upgrading-to-v170","upgrade.html#upgrading-to-v150","upgrade.html#upgrading-to-v140","upgrade.html#new-custom-templates","upgrade.html#3pid-verification-changes","upgrade.html#email","upgrade.html#phone-numbers","upgrade.html#rolling-back-to-v131","upgrade.html#upgrading-to-v120","upgrade.html#upgrading-to-v110","upgrade.html#minimum-python-version","upgrade.html#minimum-postgresql-version","upgrade.html#upgrading-to-v10","upgrade.html#validation-of-tls-certificates","upgrade.html#email-1","upgrade.html#new-email-templates","upgrade.html#upgrading-to-v0990","upgrade.html#upgrading-to-v0340","upgrade.html#upgrading-to-v0337","upgrade.html#upgrading-to-v0273","upgrade.html#upgrading-to-v0150","upgrade.html#upgrading-to-v0110","upgrade.html#upgrading-to-v090","upgrade.html#upgrading-to-v080","upgrade.html#upgrading-to-v070","upgrade.html#upgrading-to-v060","upgrade.html#upgrading-to-v051","upgrade.html#upgrading-to-v050","upgrade.html#upgrading-to-v040","upgrade.html#upgrading-to-v030","upgrade.html#web-client","upgrade.html#upgrading-to-v020","upgrade.html#upgrading-to-v001","federate.html#setting-up-federation","federate.html#troubleshooting","federate.html#known-issues","federate.html#running-a-demo-federation-of-synapses","usage/configuration/index.html#configuration","usage/configuration/config_documentation.html#configuring-synapse","usage/configuration/config_documentation.html#config-conventions","usage/configuration/config_documentation.html#config-validation","usage/configuration/config_documentation.html#yaml","usage/configuration/config_documentation.html#modules","usage/configuration/config_documentation.html#modules-1","usage/configuration/config_documentation.html#server","usage/configuration/config_documentation.html#server_name","usage/configuration/config_documentation.html#pid_file","usage/configuration/config_documentation.html#daemonize","usage/configuration/config_documentation.html#print_pidfile","usage/configuration/config_documentation.html#user_agent_suffix","usage/configuration/config_documentation.html#use_frozen_dicts","usage/configuration/config_documentation.html#web_client_location","usage/configuration/config_documentation.html#public_baseurl","usage/configuration/config_documentation.html#serve_server_wellknown","usage/configuration/config_documentation.html#extra_well_known_client_content","usage/configuration/config_documentation.html#soft_file_limit","usage/configuration/config_documentation.html#presence","usage/configuration/config_documentation.html#require_auth_for_profile_requests","usage/configuration/config_documentation.html#limit_profile_requests_to_users_who_share_rooms","usage/configuration/config_documentation.html#include_profile_data_on_invite","usage/configuration/config_documentation.html#allow_public_rooms_without_auth","usage/configuration/config_documentation.html#allow_public_rooms_over_federation","usage/configuration/config_documentation.html#default_room_version","usage/configuration/config_documentation.html#gc_thresholds","usage/configuration/config_documentation.html#gc_min_interval","usage/configuration/config_documentation.html#filter_timeline_limit","usage/configuration/config_documentation.html#block_non_admin_invites","usage/configuration/config_documentation.html#enable_search","usage/configuration/config_documentation.html#ip_range_blacklist","usage/configuration/config_documentation.html#ip_range_whitelist","usage/configuration/config_documentation.html#listeners","usage/configuration/config_documentation.html#manhole","usage/configuration/config_documentation.html#manhole_settings","usage/configuration/config_documentation.html#http_proxy","usage/configuration/config_documentation.html#https_proxy","usage/configuration/config_documentation.html#no_proxy_hosts","usage/configuration/config_documentation.html#matrix_authentication_service","usage/configuration/config_documentation.html#dummy_events_threshold","usage/configuration/config_documentation.html#delete_stale_devices_after","usage/configuration/config_documentation.html#email","usage/configuration/config_documentation.html#max_event_delay_duration","usage/configuration/config_documentation.html#user_types","usage/configuration/config_documentation.html#homeserver-blocking","usage/configuration/config_documentation.html#admin_contact","usage/configuration/config_documentation.html#hs_disabled","usage/configuration/config_documentation.html#hs_disabled_message","usage/configuration/config_documentation.html#limit_usage_by_mau","usage/configuration/config_documentation.html#max_mau_value","usage/configuration/config_documentation.html#mau_trial_days","usage/configuration/config_documentation.html#mau_appservice_trial_days","usage/configuration/config_documentation.html#mau_limit_alerting","usage/configuration/config_documentation.html#mau_stats_only","usage/configuration/config_documentation.html#mau_limit_reserved_threepids","usage/configuration/config_documentation.html#server_context","usage/configuration/config_documentation.html#limit_remote_rooms","usage/configuration/config_documentation.html#require_membership_for_aliases","usage/configuration/config_documentation.html#allow_per_room_profiles","usage/configuration/config_documentation.html#max_avatar_size","usage/configuration/config_documentation.html#allowed_avatar_mimetypes","usage/configuration/config_documentation.html#redaction_retention_period","usage/configuration/config_documentation.html#forgotten_room_retention_period","usage/configuration/config_documentation.html#user_ips_max_age","usage/configuration/config_documentation.html#request_token_inhibit_3pid_errors","usage/configuration/config_documentation.html#next_link_domain_whitelist","usage/configuration/config_documentation.html#templates","usage/configuration/config_documentation.html#retention","usage/configuration/config_documentation.html#tls","usage/configuration/config_documentation.html#tls_certificate_path","usage/configuration/config_documentation.html#tls_private_key_path","usage/configuration/config_documentation.html#federation_verify_certificates","usage/configuration/config_documentation.html#federation_client_minimum_tls_version","usage/configuration/config_documentation.html#federation_certificate_verification_whitelist","usage/configuration/config_documentation.html#federation_custom_ca_list","usage/configuration/config_documentation.html#federation","usage/configuration/config_documentation.html#federation_domain_whitelist","usage/configuration/config_documentation.html#federation_whitelist_endpoint_enabled","usage/configuration/config_documentation.html#federation_metrics_domains","usage/configuration/config_documentation.html#allow_profile_lookup_over_federation","usage/configuration/config_documentation.html#allow_device_name_lookup_over_federation","usage/configuration/config_documentation.html#federation-1","usage/configuration/config_documentation.html#caching","usage/configuration/config_documentation.html#event_cache_size","usage/configuration/config_documentation.html#caches","usage/configuration/config_documentation.html#reloading-cache-factors","usage/configuration/config_documentation.html#database","usage/configuration/config_documentation.html#database-1","usage/configuration/config_documentation.html#databases","usage/configuration/config_documentation.html#logging","usage/configuration/config_documentation.html#log_config","usage/configuration/config_documentation.html#ratelimiting","usage/configuration/config_documentation.html#rc_message","usage/configuration/config_documentation.html#rc_registration","usage/configuration/config_documentation.html#rc_registration_token_validity","usage/configuration/config_documentation.html#rc_login","usage/configuration/config_documentation.html#rc_admin_redaction","usage/configuration/config_documentation.html#rc_joins","usage/configuration/config_documentation.html#rc_joins_per_room","usage/configuration/config_documentation.html#rc_3pid_validation","usage/configuration/config_documentation.html#rc_invites","usage/configuration/config_documentation.html#rc_third_party_invite","usage/configuration/config_documentation.html#rc_media_create","usage/configuration/config_documentation.html#rc_federation","usage/configuration/config_documentation.html#rc_presence","usage/configuration/config_documentation.html#rc_delayed_event_mgmt","usage/configuration/config_documentation.html#rc_reports","usage/configuration/config_documentation.html#rc_room_creation","usage/configuration/config_documentation.html#rc_user_directory","usage/configuration/config_documentation.html#federation_rr_transactions_per_room_per_second","usage/configuration/config_documentation.html#media-store","usage/configuration/config_documentation.html#enable_authenticated_media","usage/configuration/config_documentation.html#enable_media_repo","usage/configuration/config_documentation.html#enable_local_media_storage","usage/configuration/config_documentation.html#media_store_path","usage/configuration/config_documentation.html#max_pending_media_uploads","usage/configuration/config_documentation.html#unused_expiration_time","usage/configuration/config_documentation.html#media_storage_providers","usage/configuration/config_documentation.html#max_upload_size","usage/configuration/config_documentation.html#media_upload_limits","usage/configuration/config_documentation.html#max_image_pixels","usage/configuration/config_documentation.html#remote_media_download_burst_count","usage/configuration/config_documentation.html#remote_media_download_per_second","usage/configuration/config_documentation.html#prevent_media_downloads_from","usage/configuration/config_documentation.html#dynamic_thumbnails","usage/configuration/config_documentation.html#thumbnail_sizes","usage/configuration/config_documentation.html#media_retention","usage/configuration/config_documentation.html#url_preview_enabled","usage/configuration/config_documentation.html#url_preview_ip_range_blacklist","usage/configuration/config_documentation.html#url_preview_ip_range_whitelist","usage/configuration/config_documentation.html#url_preview_url_blacklist","usage/configuration/config_documentation.html#max_spider_size","usage/configuration/config_documentation.html#url_preview_accept_language","usage/configuration/config_documentation.html#oembed","usage/configuration/config_documentation.html#captcha","usage/configuration/config_documentation.html#recaptcha_public_key","usage/configuration/config_documentation.html#recaptcha_public_key_path","usage/configuration/config_documentation.html#recaptcha_private_key","usage/configuration/config_documentation.html#recaptcha_private_key_path","usage/configuration/config_documentation.html#enable_registration_captcha","usage/configuration/config_documentation.html#recaptcha_siteverify_api","usage/configuration/config_documentation.html#turn","usage/configuration/config_documentation.html#turn_uris","usage/configuration/config_documentation.html#turn_shared_secret","usage/configuration/config_documentation.html#turn_shared_secret_path","usage/configuration/config_documentation.html#turn_username","usage/configuration/config_documentation.html#turn_password","usage/configuration/config_documentation.html#turn_user_lifetime","usage/configuration/config_documentation.html#turn_allow_guests","usage/configuration/config_documentation.html#matrix_rtc","usage/configuration/config_documentation.html#registration","usage/configuration/config_documentation.html#enable_registration","usage/configuration/config_documentation.html#enable_registration_without_verification","usage/configuration/config_documentation.html#registrations_require_3pid","usage/configuration/config_documentation.html#disable_msisdn_registration","usage/configuration/config_documentation.html#allowed_local_3pids","usage/configuration/config_documentation.html#enable_3pid_lookup","usage/configuration/config_documentation.html#registration_requires_token","usage/configuration/config_documentation.html#registration_shared_secret","usage/configuration/config_documentation.html#registration_shared_secret_path","usage/configuration/config_documentation.html#bcrypt_rounds","usage/configuration/config_documentation.html#allow_guest_access","usage/configuration/config_documentation.html#default_identity_server","usage/configuration/config_documentation.html#account_threepid_delegates","usage/configuration/config_documentation.html#enable_set_displayname","usage/configuration/config_documentation.html#enable_set_avatar_url","usage/configuration/config_documentation.html#enable_3pid_changes","usage/configuration/config_documentation.html#auto_join_rooms","usage/configuration/config_documentation.html#autocreate_auto_join_rooms","usage/configuration/config_documentation.html#autocreate_auto_join_rooms_federated","usage/configuration/config_documentation.html#autocreate_auto_join_room_preset","usage/configuration/config_documentation.html#auto_join_mxid_localpart","usage/configuration/config_documentation.html#auto_join_rooms_for_guests","usage/configuration/config_documentation.html#inhibit_user_in_use_error","usage/configuration/config_documentation.html#allow_underscore_prefixed_registration","usage/configuration/config_documentation.html#user-session-management","usage/configuration/config_documentation.html#session_lifetime","usage/configuration/config_documentation.html#refreshable_access_token_lifetime","usage/configuration/config_documentation.html#refresh_token_lifetime","usage/configuration/config_documentation.html#nonrefreshable_access_token_lifetime","usage/configuration/config_documentation.html#ui_auth","usage/configuration/config_documentation.html#login_via_existing_session","usage/configuration/config_documentation.html#metrics","usage/configuration/config_documentation.html#enable_metrics","usage/configuration/config_documentation.html#sentry","usage/configuration/config_documentation.html#metrics_flags","usage/configuration/config_documentation.html#report_stats","usage/configuration/config_documentation.html#report_stats_endpoint","usage/configuration/config_documentation.html#api-configuration","usage/configuration/config_documentation.html#room_prejoin_state","usage/configuration/config_documentation.html#track_puppeted_user_ips","usage/configuration/config_documentation.html#app_service_config_files","usage/configuration/config_documentation.html#track_appservice_user_ips","usage/configuration/config_documentation.html#use_appservice_legacy_authorization","usage/configuration/config_documentation.html#macaroon_secret_key","usage/configuration/config_documentation.html#macaroon_secret_key_path","usage/configuration/config_documentation.html#form_secret","usage/configuration/config_documentation.html#form_secret_path","usage/configuration/config_documentation.html#signing-keys","usage/configuration/config_documentation.html#signing_key_path","usage/configuration/config_documentation.html#old_signing_keys","usage/configuration/config_documentation.html#key_refresh_interval","usage/configuration/config_documentation.html#trusted_key_servers","usage/configuration/config_documentation.html#suppress_key_server_warning","usage/configuration/config_documentation.html#key_server_signing_keys_path","usage/configuration/config_documentation.html#single-sign-on-integration","usage/configuration/config_documentation.html#saml2_config","usage/configuration/config_documentation.html#oidc_providers","usage/configuration/config_documentation.html#cas_config","usage/configuration/config_documentation.html#sso","usage/configuration/config_documentation.html#jwt_config","usage/configuration/config_documentation.html#password_config","usage/configuration/config_documentation.html#push","usage/configuration/config_documentation.html#push-1","usage/configuration/config_documentation.html#rooms","usage/configuration/config_documentation.html#encryption_enabled_by_default_for_room_type","usage/configuration/config_documentation.html#user_directory","usage/configuration/config_documentation.html#user_consent","usage/configuration/config_documentation.html#stats","usage/configuration/config_documentation.html#server_notices","usage/configuration/config_documentation.html#enable_room_list_search","usage/configuration/config_documentation.html#alias_creation_rules","usage/configuration/config_documentation.html#room_list_publication_rules","usage/configuration/config_documentation.html#default_power_level_content_override","usage/configuration/config_documentation.html#forget_rooms_on_leave","usage/configuration/config_documentation.html#exclude_rooms_from_sync","usage/configuration/config_documentation.html#opentracing","usage/configuration/config_documentation.html#opentracing-1","usage/configuration/config_documentation.html#coordinating-workers","usage/configuration/config_documentation.html#worker_replication_secret","usage/configuration/config_documentation.html#worker_replication_secret_path","usage/configuration/config_documentation.html#start_pushers","usage/configuration/config_documentation.html#pusher_instances","usage/configuration/config_documentation.html#send_federation","usage/configuration/config_documentation.html#federation_sender_instances","usage/configuration/config_documentation.html#instance_map","usage/configuration/config_documentation.html#stream_writers","usage/configuration/config_documentation.html#outbound_federation_restricted_to","usage/configuration/config_documentation.html#run_background_tasks_on","usage/configuration/config_documentation.html#update_user_directory_from_worker","usage/configuration/config_documentation.html#notify_appservices_from_worker","usage/configuration/config_documentation.html#media_instance_running_background_jobs","usage/configuration/config_documentation.html#redis","usage/configuration/config_documentation.html#individual-worker-configuration","usage/configuration/config_documentation.html#worker_app","usage/configuration/config_documentation.html#worker_name","usage/configuration/config_documentation.html#worker_listeners","usage/configuration/config_documentation.html#worker_manhole","usage/configuration/config_documentation.html#worker_daemonize","usage/configuration/config_documentation.html#worker_pid_file","usage/configuration/config_documentation.html#worker_log_config","usage/configuration/config_documentation.html#background-updates","usage/configuration/config_documentation.html#background_updates","usage/configuration/config_documentation.html#auto-accept-invites","usage/configuration/config_documentation.html#auto_accept_invites","usage/configuration/homeserver_sample_config.html#homeserver-sample-configuration-file","usage/configuration/logging_sample_config.html#logging-sample-configuration-file","structured_logging.html#structured-logging","templates.html#templates","templates.html#email-templates","templates.html#html-page-templates-for-registration-and-password-reset","templates.html#html-page-templates-for-single-sign-on-sso","usage/configuration/user_authentication/index.html#user-authentication","usage/configuration/user_authentication/single_sign_on/index.html#single-sign-on","openid.html#configuring-synapse-to-authenticate-against-an-openid-connect-provider","openid.html#preparing-synapse","openid.html#oidc-back-channel-logout","openid.html#sample-configs","openid.html#microsoft-azure-active-directory","openid.html#apple","openid.html#auth0","openid.html#authentik","openid.html#dex","openid.html#django-oauth-toolkit","openid.html#facebook","openid.html#forgejo","openid.html#github","openid.html#gitlab","openid.html#gitea","openid.html#google","openid.html#keycloak","openid.html#lemonldap","openid.html#mastodon","openid.html#pocket-id","openid.html#shibboleth-with-oidc-plugin","openid.html#twitch","openid.html#twitter","openid.html#xwiki","usage/configuration/user_authentication/single_sign_on/saml.html#saml","usage/configuration/user_authentication/single_sign_on/cas.html#cas","sso_mapping_providers.html#sso-mapping-providers","sso_mapping_providers.html#openid-mapping-providers","sso_mapping_providers.html#building-a-custom-openid-mapping-provider","sso_mapping_providers.html#default-openid-mapping-provider","sso_mapping_providers.html#saml-mapping-providers","sso_mapping_providers.html#building-a-custom-saml-mapping-provider","sso_mapping_providers.html#default-saml-mapping-provider","password_auth_providers.html#password-auth-provider-modules","password_auth_providers.html#required-methods","password_auth_providers.html#optional-methods","jwt.html#jwt-login-type","jwt.html#preparing-synapse","jwt.html#how-to-test-jwt-as-a-developer","usage/configuration/user_authentication/refresh_tokens.html#refresh-tokens","usage/configuration/user_authentication/refresh_tokens.html#background-and-motivation","usage/configuration/user_authentication/refresh_tokens.html#caveats","usage/configuration/user_authentication/refresh_tokens.html#configuration-guide","usage/configuration/user_authentication/refresh_tokens.html#using-refresh-token-expiry-to-log-out-inactive-sessions","CAPTCHA_SETUP.html#overview","CAPTCHA_SETUP.html#getting-api-keys","CAPTCHA_SETUP.html#configuring-ip-used-for-auth","application_services.html#registering-an-application-service","server_notices.html#server-notices","server_notices.html#user-experience","server_notices.html#synapse-configuration","server_notices.html#sending-notices","consent_tracking.html#support-in-synapse-for-tracking-agreement-to-server-terms-and-conditions","consent_tracking.html#collecting-policy-agreement-from-a-user","consent_tracking.html#enabling-consent-tracking-at-registration","consent_tracking.html#constructing-the-consent-uri","consent_tracking.html#sending-users-a-server-notice-asking-them-to-agree-to-the-policy","consent_tracking.html#blocking-users-from-using-the-server-until-they-agree-to-the-policy","user_directory.html#user-directory-api-implementation","user_directory.html#data-model","user_directory.html#configuration-options","user_directory.html#search-algorithm","user_directory.html#postgresql","user_directory.html#sqlite","message_retention_policies.html#message-retention-policies","message_retention_policies.html#server-configuration","message_retention_policies.html#default-policy","message_retention_policies.html#purge-jobs","message_retention_policies.html#lifetime-limits","message_retention_policies.html#room-configuration","message_retention_policies.html#note-on-reclaiming-disk-space","modules/index.html#modules","modules/index.html#using-modules","modules/index.html#using-multiple-modules","modules/index.html#current-status","modules/writing_a_module.html#writing-a-module","modules/writing_a_module.html#when-synapse-runs-with-several-modules-configured","modules/writing_a_module.html#handling-the-modules-configuration","modules/writing_a_module.html#registering-a-web-resource","modules/writing_a_module.html#registering-a-callback","modules/writing_a_module.html#caching","modules/spam_checker_callbacks.html#spam-checker-callbacks","modules/spam_checker_callbacks.html#callbacks","modules/spam_checker_callbacks.html#check_event_for_spam","modules/spam_checker_callbacks.html#user_may_join_room","modules/spam_checker_callbacks.html#user_may_invite","modules/spam_checker_callbacks.html#federated_user_may_invite","modules/spam_checker_callbacks.html#user_may_send_3pid_invite","modules/spam_checker_callbacks.html#user_may_create_room","modules/spam_checker_callbacks.html#user_may_create_room_alias","modules/spam_checker_callbacks.html#user_may_publish_room","modules/spam_checker_callbacks.html#user_may_send_state_event","modules/spam_checker_callbacks.html#check_username_for_spam","modules/spam_checker_callbacks.html#check_registration_for_spam","modules/spam_checker_callbacks.html#check_media_file_for_spam","modules/spam_checker_callbacks.html#should_drop_federated_event","modules/spam_checker_callbacks.html#check_login_for_spam","modules/spam_checker_callbacks.html#example","modules/third_party_rules_callbacks.html#third-party-rules-callbacks","modules/third_party_rules_callbacks.html#callbacks","modules/third_party_rules_callbacks.html#check_event_allowed","modules/third_party_rules_callbacks.html#on_create_room","modules/third_party_rules_callbacks.html#check_threepid_can_be_invited","modules/third_party_rules_callbacks.html#check_visibility_can_be_modified","modules/third_party_rules_callbacks.html#on_new_event","modules/third_party_rules_callbacks.html#check_can_shutdown_room","modules/third_party_rules_callbacks.html#check_can_deactivate_user","modules/third_party_rules_callbacks.html#on_profile_update","modules/third_party_rules_callbacks.html#on_user_deactivation_status_changed","modules/third_party_rules_callbacks.html#on_threepid_bind","modules/third_party_rules_callbacks.html#on_add_user_third_party_identifier","modules/third_party_rules_callbacks.html#on_remove_user_third_party_identifier","modules/third_party_rules_callbacks.html#example","modules/presence_router_callbacks.html#presence-router-callbacks","modules/presence_router_callbacks.html#callbacks","modules/presence_router_callbacks.html#get_users_for_states","modules/presence_router_callbacks.html#get_interested_users","modules/presence_router_callbacks.html#example","modules/account_validity_callbacks.html#account-validity-callbacks","modules/account_validity_callbacks.html#is_user_expired","modules/account_validity_callbacks.html#on_user_registration","modules/account_validity_callbacks.html#on_user_login","modules/password_auth_provider_callbacks.html#password-auth-provider-callbacks","modules/password_auth_provider_callbacks.html#callbacks","modules/password_auth_provider_callbacks.html#auth_checkers","modules/password_auth_provider_callbacks.html#check_3pid_auth","modules/password_auth_provider_callbacks.html#on_logged_out","modules/password_auth_provider_callbacks.html#get_username_for_registration","modules/password_auth_provider_callbacks.html#get_displayname_for_registration","modules/password_auth_provider_callbacks.html#is_3pid_allowed","modules/password_auth_provider_callbacks.html#example","modules/background_update_controller_callbacks.html#background-update-controller-callbacks","modules/background_update_controller_callbacks.html#on_update","modules/background_update_controller_callbacks.html#default_batch_size","modules/background_update_controller_callbacks.html#min_batch_size","modules/account_data_callbacks.html#account-data-callbacks","modules/account_data_callbacks.html#callbacks","modules/account_data_callbacks.html#on_account_data_updated","modules/account_data_callbacks.html#example","modules/add_extra_fields_to_client_events_unsigned.html#add-extra-fields-to-client-events-unsigned-section-callbacks","modules/add_extra_fields_to_client_events_unsigned.html#api","modules/media_repository_callbacks.html#media-repository-callbacks","modules/media_repository_callbacks.html#get_media_config_for_user","modules/media_repository_callbacks.html#is_user_allowed_to_upload_media_of_size","modules/media_repository_callbacks.html#get_media_upload_limits_for_user","modules/media_repository_callbacks.html#on_media_upload_limit_exceeded","modules/ratelimit_callbacks.html#ratelimit-callbacks","modules/ratelimit_callbacks.html#get_ratelimit_override_for_user","modules/porting_legacy_module.html#porting-an-existing-module-that-uses-the-old-interface","workers.html#scaling-synapse-via-workers","workers.html#main-processworker-communication","workers.html#setting-up-workers","workers.html#shared-configuration","workers.html#worker-configuration","workers.html#running-synapse-with-workers","workers.html#start-synapse-with-poetry","workers.html#available-worker-applications","workers.html#synapseappgeneric_worker","workers.html#synapseapppusher","workers.html#synapseappappservice","workers.html#synapseappfederation_sender","workers.html#synapseappmedia_repository","workers.html#synapseappuser_dir","workers.html#historical-apps","workers.html#migration-from-old-config","workers.html#architectural-diagram","synctl_workers.html#using-synctl-with-workers","systemd-with-workers/index.html#setting-up-synapse-with-workers-and-systemd","systemd-with-workers/index.html#synapse-configuration-files","systemd-with-workers/index.html#set-up","systemd-with-workers/index.html#usage","systemd-with-workers/index.html#hardening","usage/administration/index.html#administration","usage/administration/backups.html#how-to-back-up-a-synapse-homeserver","usage/administration/backups.html#configuration-files","usage/administration/backups.html#server-signing-key","usage/administration/backups.html#database","usage/administration/backups.html#synapse-specfic-details","usage/administration/backups.html#quick-and-easy-database-backup-and-restore","usage/administration/backups.html#media-store","usage/administration/admin_api/index.html#the-admin-api","usage/administration/admin_api/index.html#authenticate-as-a-server-admin","usage/administration/admin_api/index.html#making-an-admin-api-request","admin_api/account_validity.html#account-validity-api","admin_api/account_validity.html#renew-account","usage/administration/admin_api/background_updates.html#background-updates-api","usage/administration/admin_api/background_updates.html#status","usage/administration/admin_api/background_updates.html#enabled","usage/administration/admin_api/background_updates.html#run","admin_api/fetch_event.html#fetch-event-api","admin_api/event_reports.html#show-reported-events","admin_api/event_reports.html#show-details-of-a-specific-event-report","admin_api/event_reports.html#delete-a-specific-event-report","admin_api/experimental_features.html#experimental-features-api","admin_api/experimental_features.html#enablingdisabling-features","admin_api/experimental_features.html#listing-enabled-features","admin_api/media_admin_api.html#querying-media","admin_api/media_admin_api.html#list-all-media-in-a-room","admin_api/media_admin_api.html#list-all-media-uploaded-by-a-user","admin_api/media_admin_api.html#query-a-piece-of-media-by-id","admin_api/media_admin_api.html#quarantine-media","admin_api/media_admin_api.html#downloading-quarantined-media","admin_api/media_admin_api.html#quarantining-media-by-id","admin_api/media_admin_api.html#remove-media-from-quarantine-by-id","admin_api/media_admin_api.html#quarantining-media-in-a-room","admin_api/media_admin_api.html#quarantining-all-media-of-a-user","admin_api/media_admin_api.html#protecting-media-from-being-quarantined","admin_api/media_admin_api.html#unprotecting-media-from-being-quarantined","admin_api/media_admin_api.html#delete-local-media","admin_api/media_admin_api.html#delete-a-specific-local-media","admin_api/media_admin_api.html#delete-local-media-by-date-or-size","admin_api/media_admin_api.html#delete-media-uploaded-by-a-user","admin_api/media_admin_api.html#purge-remote-media-api","admin_api/purge_history_api.html#purge-history-api","admin_api/purge_history_api.html#purge-status-query","admin_api/purge_history_api.html#reclaim-disk-space-postgres","admin_api/register_api.html#shared-secret-registration","usage/administration/admin_api/registration_tokens.html#registration-tokens","usage/administration/admin_api/registration_tokens.html#registration-token-objects","usage/administration/admin_api/registration_tokens.html#list-all-tokens","usage/administration/admin_api/registration_tokens.html#get-one-token","usage/administration/admin_api/registration_tokens.html#create-token","usage/administration/admin_api/registration_tokens.html#update-token","usage/administration/admin_api/registration_tokens.html#delete-token","usage/administration/admin_api/registration_tokens.html#errors","admin_api/room_membership.html#edit-room-membership-api","admin_api/room_membership.html#parameters","admin_api/room_membership.html#usage","admin_api/rooms.html#list-room-api","admin_api/rooms.html#room-details-api","admin_api/rooms.html#room-members-api","admin_api/rooms.html#room-state-api","admin_api/rooms.html#room-messages-api","admin_api/rooms.html#room-timestamp-to-event-api","admin_api/rooms.html#block-room-api","admin_api/rooms.html#block-or-unblock-a-room","admin_api/rooms.html#get-block-status","admin_api/rooms.html#delete-room-api","admin_api/rooms.html#version-1-old-version","admin_api/rooms.html#version-2-new-version","admin_api/rooms.html#status-of-deleting-rooms","admin_api/rooms.html#query-by-room_id","admin_api/rooms.html#query-by-delete_id","admin_api/rooms.html#response","admin_api/rooms.html#undoing-room-deletions","admin_api/rooms.html#make-room-admin-api","admin_api/rooms.html#forward-extremities-admin-api","admin_api/rooms.html#check-for-forward-extremities","admin_api/rooms.html#deleting-forward-extremities","admin_api/rooms.html#event-context-api","admin_api/rooms.html#admin-space-hierarchy-endpoint","admin_api/scheduled_tasks.html#show-scheduled-tasks","admin_api/server_notices.html#server-notices","admin_api/statistics.html#users-media-usage-statistics","admin_api/statistics.html#get-largest-rooms-by-size-in-database","admin_api/user_admin_api.html#user-admin-api","admin_api/user_admin_api.html#query-user-account","admin_api/user_admin_api.html#create-or-modify-account","admin_api/user_admin_api.html#list-accounts","admin_api/user_admin_api.html#list-accounts-v2","admin_api/user_admin_api.html#list-accounts-v3","admin_api/user_admin_api.html#query-current-sessions-for-a-user","admin_api/user_admin_api.html#deactivate-account","admin_api/user_admin_api.html#suspendunsuspend-account","admin_api/user_admin_api.html#reset-password","admin_api/user_admin_api.html#get-whether-a-user-is-a-server-administrator-or-not","admin_api/user_admin_api.html#change-whether-a-user-is-a-server-administrator-or-not","admin_api/user_admin_api.html#list-room-memberships-of-a-user","admin_api/user_admin_api.html#list-joined-rooms-of-a-user","admin_api/user_admin_api.html#get-the-number-of-invites-sent-by-the-user","admin_api/user_admin_api.html#get-the-cumulative-number-of-rooms-a-user-has-joined-after-a-given-timestamp","admin_api/user_admin_api.html#account-data","admin_api/user_admin_api.html#user-media","admin_api/user_admin_api.html#list-media-uploaded-by-a-user","admin_api/user_admin_api.html#delete-media-uploaded-by-a-user","admin_api/user_admin_api.html#login-as-a-user","admin_api/user_admin_api.html#allow-replacing-master-cross-signing-key-without-user-interactive-auth","admin_api/user_admin_api.html#user-devices","admin_api/user_admin_api.html#list-all-devices","admin_api/user_admin_api.html#create-a-device","admin_api/user_admin_api.html#delete-multiple-devices","admin_api/user_admin_api.html#show-a-device","admin_api/user_admin_api.html#update-a-device","admin_api/user_admin_api.html#delete-a-device","admin_api/user_admin_api.html#list-all-pushers","admin_api/user_admin_api.html#controlling-whether-a-user-is-shadow-banned","admin_api/user_admin_api.html#override-ratelimiting-for-users","admin_api/user_admin_api.html#get-status-of-ratelimit","admin_api/user_admin_api.html#set-ratelimit","admin_api/user_admin_api.html#delete-ratelimit","admin_api/user_admin_api.html#check-username-availability","admin_api/user_admin_api.html#find-a-user-based-on-their-id-in-an-auth-provider","admin_api/user_admin_api.html#find-a-user-based-on-their-third-party-id-threepid-or-3pid","admin_api/user_admin_api.html#redact-all-the-events-of-a-user","admin_api/user_admin_api.html#check-the-status-of-a-redaction-process","admin_api/version_api.html#version-api","usage/administration/admin_api/federation.html#federation-api","usage/administration/admin_api/federation.html#list-of-destinations","usage/administration/admin_api/federation.html#destination-details-api","usage/administration/admin_api/federation.html#destination-rooms","usage/administration/admin_api/federation.html#reset-connection-timeout","admin_api/client_server_api_extensions.html#client-server-api-extensions","admin_api/client_server_api_extensions.html#see-soft-failed-events","admin_api/client_server_api_extensions.html#see-events-marked-spammy-by-policy-servers","manhole.html#using-the-synapse-manhole","manhole.html#configuring-the-manhole","manhole.html#security-settings","manhole.html#accessing-synapse-manhole","metrics-howto.html#how-to-monitor-synapse-metrics-using-prometheus","metrics-howto.html#monitoring-workers","usage/administration/monitoring/reporting_homeserver_usage_statistics.html#reporting-homeserver-usage-statistics","usage/administration/monitoring/reporting_homeserver_usage_statistics.html#available-statistics","usage/administration/monitoring/reporting_homeserver_usage_statistics.html#using-a-custom-statistics-collection-server","usage/administration/monthly_active_users.html#monthly-active-users","usage/administration/monthly_active_users.html#calculating-active-users","usage/administration/monthly_active_users.html#trial-days","usage/administration/monthly_active_users.html#limiting-usage-of-the-homeserver-when-the-maximum-mau-is-reached","usage/administration/monthly_active_users.html#metrics","usage/administration/understanding_synapse_through_grafana_graphs.html#understanding-synapse-through-grafana-graphs","usage/administration/understanding_synapse_through_grafana_graphs.html#message-event-send-time","usage/administration/understanding_synapse_through_grafana_graphs.html#transaction-count-and-transaction-duration","usage/administration/understanding_synapse_through_grafana_graphs.html#federation","usage/administration/understanding_synapse_through_grafana_graphs.html#caches","usage/administration/understanding_synapse_through_grafana_graphs.html#forward-extremities","usage/administration/understanding_synapse_through_grafana_graphs.html#garbage-collection","usage/administration/understanding_synapse_through_grafana_graphs.html#final-thoughts","usage/administration/useful_sql_for_admins.html#some-useful-sql-queries-for-synapse-admins","usage/administration/useful_sql_for_admins.html#size-of-full-matrix-db","usage/administration/useful_sql_for_admins.html#result-example","usage/administration/useful_sql_for_admins.html#show-top-20-larger-tables-by-row-count","usage/administration/useful_sql_for_admins.html#result-example-1","usage/administration/useful_sql_for_admins.html#show-top-20-larger-tables-by-storage-size","usage/administration/useful_sql_for_admins.html#result-example-2","usage/administration/useful_sql_for_admins.html#show-top-20-larger-rooms-by-state-events-count","usage/administration/useful_sql_for_admins.html#show-top-20-rooms-by-new-events-count-in-last-1-day","usage/administration/useful_sql_for_admins.html#show-top-20-users-on-homeserver-by-sent-events-messages-at-last-month","usage/administration/useful_sql_for_admins.html#show-last-100-messages-from-needed-user-with-room-names","usage/administration/useful_sql_for_admins.html#show-rooms-with-names-sorted-by-events-in-this-rooms","usage/administration/useful_sql_for_admins.html#result-example-3","usage/administration/useful_sql_for_admins.html#lookup-room-state-info-by-list-of-room_id","usage/administration/useful_sql_for_admins.html#show-users-and-devices-that-have-not-been-online-for-a-while","usage/administration/useful_sql_for_admins.html#clear-the-cache-of-a-remote-users-device-list","usage/administration/database_maintenance_tools.html#list-of-useful-tools-and-scripts-for-maintenance-synapse-database","usage/administration/database_maintenance_tools.html#purge-remote-media-api","usage/administration/database_maintenance_tools.html#purge-local-media-api","usage/administration/database_maintenance_tools.html#purge-history-api","usage/administration/database_maintenance_tools.html#synapse-compress-state","usage/administration/database_maintenance_tools.html#sql-for-analyzing-synapse-postgresql-database-stats","usage/administration/state_groups.html#how-do-state-groups-work","usage/administration/state_groups.html#known-bugs-with-state-groups","usage/administration/state_groups.html#compression-tool","usage/administration/request_log.html#request-log-format","usage/administration/admin_faq.html#admin-faq","usage/administration/admin_faq.html#how-do-i-become-a-server-admin","usage/administration/admin_faq.html#what-servers-are-my-server-talking-to","usage/administration/admin_faq.html#what-servers-are-currently-participating-in-this-room","usage/administration/admin_faq.html#what-users-are-registered-on-my-server","usage/administration/admin_faq.html#how-can-i-export-user-data","usage/administration/admin_faq.html#how-do-i-upgrade-from-a-very-old-version-of-synapse-to-the-latest","usage/administration/admin_faq.html#manually-resetting-passwords","usage/administration/admin_faq.html#i-have-a-problem-with-my-server-can-i-just-delete-my-database-and-start-again","usage/administration/admin_faq.html#ive-stuffed-up-access-to-my-room-how-can-i-delete-it-to-free-up-the-alias","usage/administration/admin_faq.html#how-can-i-find-the-lines-corresponding-to-a-given-http-request-in-my-homeserver-log","usage/administration/admin_faq.html#what-do-all-those-fields-in-the-processed-line-mean","usage/administration/admin_faq.html#what-are-the-biggest-rooms-on-my-server","usage/administration/admin_faq.html#people-cant-accept-room-invitations-from-me","usage/administration/admin_faq.html#help-synapse-is-slow-and-eats-all-my-ramcpu","usage/administration/admin_faq.html#running-out-of-file-handles","development/contributing_guide.html#contributing","development/contributing_guide.html#1-who-can-contribute-to-synapse","development/contributing_guide.html#2-what-do-i-need","development/contributing_guide.html#3-get-the-source","development/contributing_guide.html#4-install-the-dependencies","development/contributing_guide.html#running-synapse-via-poetry","development/contributing_guide.html#5-get-in-touch","development/contributing_guide.html#6-pick-an-issue","development/contributing_guide.html#7-turn-coffee-into-code-and-documentation","development/contributing_guide.html#8-test-test-test","development/contributing_guide.html#run-the-linters","development/contributing_guide.html#run-the-unit-tests-twisted-trial","development/contributing_guide.html#running-tests-under-postgresql","development/contributing_guide.html#run-the-integration-tests-sytest","development/contributing_guide.html#run-the-integration-tests-complement","development/contributing_guide.html#prettier-formatting-with-gotestfmt","development/contributing_guide.html#9-submit-your-patch","development/contributing_guide.html#changelog","development/contributing_guide.html#how-do-i-know-what-to-call-the-changelog-file-before-i-create-the-pr","development/contributing_guide.html#debian-changelog","development/contributing_guide.html#sign-off","development/contributing_guide.html#10-turn-feedback-into-better-code","development/contributing_guide.html#11-find-a-new-issue","development/contributing_guide.html#notes-for-maintainers-on-merging-prs-etc","development/contributing_guide.html#conclusion","code_style.html#code-style","code_style.html#formatting-tools","code_style.html#general-rules","code_style.html#configuration-code-and-documentation-format","code_style.html#modules","development/reviews.html#some-notes-on-how-we-do-reviews","development/reviews.html#performing-a-review","development/releases.html#synapse-release-cycle","development/releases.html#bugfix-releases","development/releases.html#security-releases","development/git.html#some-notes-on-how-we-use-git","development/git.html#on-keeping-the-commit-history-clean","development/git.html#merges-squashes-rebases-wtf","development/git.html#git-branching-model","development/demo.html#synapse-demo-setup","development/demo.html#using-the-demo-scripts","opentracing.html#opentracing","opentracing.html#background","opentracing.html#setting-up-opentracing","opentracing.html#enable-opentracing-in-synapse","opentracing.html#homeserver-whitelisting","opentracing.html#configuring-jaeger","development/database_schema.html#synapse-database-schema-files","development/database_schema.html#logical-databases","development/database_schema.html#synapse-schema-versions","development/database_schema.html#full-schema-dumps","development/database_schema.html#building-full-schema-dumps","development/database_schema.html#delta-files","development/database_schema.html#sql-delta-files","development/database_schema.html#python-delta-files","development/database_schema.html#background-updates","development/database_schema.html#boolean-columns","development/database_schema.html#event_id-global-uniqueness","development/database_schema.html#worked-examples-of-gradual-migrations","development/database_schema.html#transforming-a-column-into-another-one-with-not-null-constraints","development/experimental_features.html#implementing-experimental-features-in-synapse","development/experimental_features.html#tracking-issues-for-experimental-features","development/dependencies.html#managing-dependencies-with-poetry","development/dependencies.html#installing","development/dependencies.html#background","development/dependencies.html#example-dependency","development/dependencies.html#tooling-recommendation-direnv","development/dependencies.html#how-do-i","development/dependencies.html#reset-my-venv-to-the-locked-environment","development/dependencies.html#delete-everything-and-start-over-from-scratch","development/dependencies.html#run-a-command-in-the-poetry-virtualenv","development/dependencies.html#inspect-the-poetry-virtualenv","development/dependencies.html#add-a-new-dependency","development/dependencies.html#remove-a-dependency","development/dependencies.html#update-the-version-range-for-an-existing-dependency","development/dependencies.html#update-a-dependency-in-the-locked-environment","development/dependencies.html#export-a-requirementstxt-file","development/dependencies.html#build-a-test-wheel","development/dependencies.html#handle-a-dependabot-pull-request","development/dependencies.html#troubleshooting","development/dependencies.html#check-the-version-of-poetry-with-poetry---version","development/dependencies.html#clear-caches-poetry-cache-clear---all-pypi","development/dependencies.html#remove-outdated-egg-info","development/dependencies.html#try---verbose-or---dry-run-arguments","development/synapse_architecture/cancellation.html#cancellation","development/synapse_architecture/cancellation.html#enabling-cancellation-for-an-endpoint","development/synapse_architecture/cancellation.html#mechanics","development/synapse_architecture/cancellation.html#deferredcancel","development/synapse_architecture/cancellation.html#cancellederror","development/synapse_architecture/cancellation.html#handling-cancellation-correctly","development/synapse_architecture/cancellation.html#async-function-calls","development/synapse_architecture/cancellation.html#cancellederrors","development/synapse_architecture/cancellation.html#creation-of-deferreds","development/synapse_architecture/cancellation.html#uncancelled-processing","log_contexts.html#log-contexts","log_contexts.html#logcontexts-without-asynchronous-code","log_contexts.html#the-sentinel-context","log_contexts.html#using-logcontexts-with-awaitables","log_contexts.html#always-await-your-awaitables","log_contexts.html#where-you-create-a-new-awaitable-make-it-follow-the-rules","log_contexts.html#deferred-callbacks","log_contexts.html#deferred-errbacks-and-cancellations","log_contexts.html#fire-and-forget","log_contexts.html#passing-synapse-deferreds-into-third-party-functions","log_contexts.html#a-note-on-garbage-collection-of-awaitable-chains","log_contexts.html#debugging-logcontext-issues","replication.html#replication-architecture","replication.html#motivation","replication.html#architecture","replication.html#the-replication-protocol","replication.html#the-tcp-replication-module","development/synapse_architecture/streams.html#streams","development/synapse_architecture/streams.html#definition","development/synapse_architecture/streams.html#current-stream-id","development/synapse_architecture/streams.html#multi-writer-streams","development/synapse_architecture/streams.html#writing-to-streams","development/synapse_architecture/streams.html#subscribing-to-streams","development/synapse_architecture/streams.html#summary","development/synapse_architecture/streams.html#cheatsheet-for-creating-a-new-stream","tcp_replication.html#tcp-replication","tcp_replication.html#motivation","tcp_replication.html#overview","tcp_replication.html#architecture","tcp_replication.html#keep-alives","tcp_replication.html#start-up","tcp_replication.html#error-handling","tcp_replication.html#congestion","tcp_replication.html#reliability","tcp_replication.html#example","tcp_replication.html#list-of-commands","tcp_replication.html#remote_server_up-s-c","tcp_replication.html#cache-invalidation-stream","development/synapse_architecture/faster_joins.html#how-do-faster-joins-work","development/synapse_architecture/faster_joins.html#overview-processing-events-in-a-partially-joined-room","development/synapse_architecture/faster_joins.html#partial-state","development/synapse_architecture/faster_joins.html#approximation-error","development/synapse_architecture/faster_joins.html#fixing-the-approximation-with-a-resync","development/synapse_architecture/faster_joins.html#faster-joins-on-workers","development/synapse_architecture/faster_joins.html#notes-on-specific-cases","development/synapse_architecture/faster_joins.html#creating-events-during-a-partial-join","development/synapse_architecture/faster_joins.html#joining-after-a-partial-join","development/synapse_architecture/faster_joins.html#leaving-and-kicks-and-bans-after-a-partial-join","development/internal_documentation/index.html#internal-documentation","development/saml.html#how-to-test-saml-as-a-developer-without-a-server","development/cas.html#how-to-test-cas-as-a-developer-without-a-server","development/cas.html#prerequisites","development/cas.html#configure-synapse-and-element-to-use-cas","development/cas.html#testing-the-configuration","development/room-dag-concepts.html#room-dag-concepts","development/room-dag-concepts.html#edges","development/room-dag-concepts.html#depth-and-stream-ordering","development/room-dag-concepts.html#outliers","development/room-dag-concepts.html#out-of-band-membership-events","development/room-dag-concepts.html#forward-extremity","development/room-dag-concepts.html#backward-extremity","development/room-dag-concepts.html#state-groups","development/room-dag-concepts.html#stage-group-edges","auth_chain_difference_algorithm.html#auth-chain-difference-algorithm","auth_chain_difference_algorithm.html#definitions","auth_chain_difference_algorithm.html#breadth-first-walk-algorithm","auth_chain_difference_algorithm.html#chain-cover-index","auth_chain_difference_algorithm.html#example","auth_chain_difference_algorithm.html#using-the-index","auth_chain_difference_algorithm.html#worked-example","media_repository.html#media-repository","media_repository.html#local-media","media_repository.html#paths","media_repository.html#remote-media","media_repository.html#paths-1","media_repository.html#url-previews","media_repository.html#paths-2","room_and_user_statistics.html#room-and-user-statistics","room_and_user_statistics.html#synapse-developer-documentation","room_and_user_statistics.html#high-level-concepts","room_and_user_statistics.html#definitions","room_and_user_statistics.html#overview","development/internal_documentation/release_notes_review_checklist.html#release-notes-review-checklist","deprecation_policy.html#deprecation-policy","deprecation_policy.html#platform-dependencies","deprecation_policy.html#context","deprecation_policy.html#application-dependencies","deprecation_policy.html#context-1","other/running_synapse_on_single_board_computers.html#summary-of-performance-impact-of-running-on-resource-constrained-devices-such-as-sbcs","other/running_synapse_on_single_board_computers.html#presence","other/running_synapse_on_single_board_computers.html#joining","other/running_synapse_on_single_board_computers.html#sessions","other/running_synapse_on_single_board_computers.html#recommended-configuration"],"index":{"documentStore":{"docInfo":{"0":{"body":9,"breadcrumbs":3,"title":1},"1":{"body":55,"breadcrumbs":5,"title":3},"10":{"body":58,"breadcrumbs":3,"title":2},"100":{"body":0,"breadcrumbs":6,"title":2},"1000":{"body":6,"breadcrumbs":6,"title":4},"1001":{"body":48,"breadcrumbs":4,"title":2},"1002":{"body":189,"breadcrumbs":5,"title":3},"1003":{"body":16,"breadcrumbs":5,"title":3},"1004":{"body":41,"breadcrumbs":6,"title":4},"1005":{"body":54,"breadcrumbs":4,"title":2},"1006":{"body":38,"breadcrumbs":5,"title":3},"1007":{"body":62,"breadcrumbs":5,"title":3},"1008":{"body":160,"breadcrumbs":4,"title":2},"1009":{"body":30,"breadcrumbs":4,"title":2},"101":{"body":15,"breadcrumbs":11,"title":7},"1010":{"body":97,"breadcrumbs":5,"title":3},"1011":{"body":73,"breadcrumbs":6,"title":4},"1012":{"body":552,"breadcrumbs":8,"title":6},"1013":{"body":163,"breadcrumbs":6,"title":4},"1014":{"body":102,"breadcrumbs":6,"title":4},"1015":{"body":6,"breadcrumbs":5,"title":3},"1016":{"body":17,"breadcrumbs":3,"title":1},"1017":{"body":102,"breadcrumbs":3,"title":1},"1018":{"body":154,"breadcrumbs":4,"title":2},"1019":{"body":90,"breadcrumbs":5,"title":3},"102":{"body":0,"breadcrumbs":6,"title":2},"1020":{"body":0,"breadcrumbs":2,"title":0},"1021":{"body":4,"breadcrumbs":6,"title":4},"1022":{"body":91,"breadcrumbs":7,"title":5},"1023":{"body":64,"breadcrumbs":6,"title":4},"1024":{"body":40,"breadcrumbs":5,"title":3},"1025":{"body":24,"breadcrumbs":5,"title":3},"1026":{"body":19,"breadcrumbs":4,"title":2},"1027":{"body":12,"breadcrumbs":7,"title":5},"1028":{"body":58,"breadcrumbs":6,"title":4},"1029":{"body":11,"breadcrumbs":5,"title":3},"103":{"body":16,"breadcrumbs":7,"title":3},"1030":{"body":24,"breadcrumbs":5,"title":3},"1031":{"body":53,"breadcrumbs":6,"title":4},"1032":{"body":0,"breadcrumbs":3,"title":1},"1033":{"body":24,"breadcrumbs":7,"title":5},"1034":{"body":29,"breadcrumbs":8,"title":6},"1035":{"body":16,"breadcrumbs":6,"title":4},"1036":{"body":6,"breadcrumbs":7,"title":5},"1037":{"body":46,"breadcrumbs":4,"title":1},"1038":{"body":37,"breadcrumbs":6,"title":3},"1039":{"body":31,"breadcrumbs":4,"title":1},"104":{"body":0,"breadcrumbs":6,"title":2},"1040":{"body":74,"breadcrumbs":4,"title":1},"1041":{"body":12,"breadcrumbs":4,"title":1},"1042":{"body":62,"breadcrumbs":6,"title":3},"1043":{"body":65,"breadcrumbs":6,"title":3},"1044":{"body":121,"breadcrumbs":4,"title":1},"1045":{"body":110,"breadcrumbs":5,"title":2},"1046":{"body":148,"breadcrumbs":5,"title":2},"1047":{"body":82,"breadcrumbs":6,"title":2},"1048":{"body":59,"breadcrumbs":8,"title":4},"1049":{"body":93,"breadcrumbs":6,"title":2},"105":{"body":21,"breadcrumbs":9,"title":5},"1050":{"body":195,"breadcrumbs":7,"title":3},"1051":{"body":104,"breadcrumbs":7,"title":3},"1052":{"body":63,"breadcrumbs":10,"title":6},"1053":{"body":506,"breadcrumbs":6,"title":2},"1054":{"body":29,"breadcrumbs":7,"title":3},"1055":{"body":215,"breadcrumbs":6,"title":2},"1056":{"body":113,"breadcrumbs":10,"title":6},"1057":{"body":163,"breadcrumbs":9,"title":5},"1058":{"body":45,"breadcrumbs":7,"title":3},"1059":{"body":0,"breadcrumbs":5,"title":2},"106":{"body":0,"breadcrumbs":6,"title":2},"1060":{"body":111,"breadcrumbs":4,"title":1},"1061":{"body":0,"breadcrumbs":4,"title":1},"1062":{"body":4,"breadcrumbs":5,"title":2},"1063":{"body":10,"breadcrumbs":6,"title":3},"1064":{"body":75,"breadcrumbs":4,"title":1},"1065":{"body":157,"breadcrumbs":4,"title":1},"1066":{"body":227,"breadcrumbs":6,"title":3},"1067":{"body":143,"breadcrumbs":6,"title":3},"1068":{"body":80,"breadcrumbs":5,"title":2},"1069":{"body":54,"breadcrumbs":5,"title":2},"107":{"body":35,"breadcrumbs":9,"title":5},"1070":{"body":9,"breadcrumbs":4,"title":1},"1071":{"body":202,"breadcrumbs":7,"title":4},"1072":{"body":0,"breadcrumbs":6,"title":2},"1073":{"body":23,"breadcrumbs":5,"title":1},"1074":{"body":171,"breadcrumbs":5,"title":1},"1075":{"body":34,"breadcrumbs":5,"title":1},"1076":{"body":57,"breadcrumbs":6,"title":2},"1077":{"body":56,"breadcrumbs":6,"title":2},"1078":{"body":17,"breadcrumbs":6,"title":2},"1079":{"body":36,"breadcrumbs":5,"title":1},"108":{"body":62,"breadcrumbs":12,"title":8},"1080":{"body":49,"breadcrumbs":5,"title":1},"1081":{"body":106,"breadcrumbs":5,"title":1},"1082":{"body":152,"breadcrumbs":6,"title":2},"1083":{"body":14,"breadcrumbs":7,"title":3},"1084":{"body":105,"breadcrumbs":7,"title":3},"1085":{"body":46,"breadcrumbs":8,"title":3},"1086":{"body":207,"breadcrumbs":11,"title":6},"1087":{"body":136,"breadcrumbs":7,"title":2},"1088":{"body":191,"breadcrumbs":7,"title":2},"1089":{"body":136,"breadcrumbs":8,"title":3},"109":{"body":0,"breadcrumbs":6,"title":2},"1090":{"body":28,"breadcrumbs":8,"title":3},"1091":{"body":11,"breadcrumbs":8,"title":3},"1092":{"body":292,"breadcrumbs":10,"title":5},"1093":{"body":108,"breadcrumbs":8,"title":3},"1094":{"body":311,"breadcrumbs":10,"title":5},"1095":{"body":46,"breadcrumbs":4,"title":2},"1096":{"body":142,"breadcrumbs":10,"title":5},"1097":{"body":11,"breadcrumbs":10,"title":5},"1098":{"body":81,"breadcrumbs":6,"title":1},"1099":{"body":38,"breadcrumbs":10,"title":5},"11":{"body":113,"breadcrumbs":3,"title":2},"110":{"body":17,"breadcrumbs":9,"title":5},"1100":{"body":30,"breadcrumbs":7,"title":2},"1101":{"body":0,"breadcrumbs":8,"title":3},"1102":{"body":26,"breadcrumbs":6,"title":1},"1103":{"body":88,"breadcrumbs":8,"title":3},"1104":{"body":95,"breadcrumbs":6,"title":1},"1105":{"body":41,"breadcrumbs":9,"title":4},"1106":{"body":43,"breadcrumbs":7,"title":2},"1107":{"body":62,"breadcrumbs":7,"title":2},"1108":{"body":37,"breadcrumbs":7,"title":2},"1109":{"body":7,"breadcrumbs":8,"title":3},"111":{"body":0,"breadcrumbs":6,"title":2},"1110":{"body":15,"breadcrumbs":12,"title":4},"1111":{"body":63,"breadcrumbs":9,"title":1},"1112":{"body":61,"breadcrumbs":12,"title":4},"1113":{"body":289,"breadcrumbs":11,"title":3},"1114":{"body":52,"breadcrumbs":9,"title":1},"1115":{"body":80,"breadcrumbs":10,"title":2},"1116":{"body":111,"breadcrumbs":10,"title":2},"1117":{"body":44,"breadcrumbs":6,"title":2},"1118":{"body":47,"breadcrumbs":6,"title":2},"1119":{"body":16,"breadcrumbs":5,"title":1},"112":{"body":14,"breadcrumbs":8,"title":4},"1120":{"body":33,"breadcrumbs":6,"title":2},"1121":{"body":28,"breadcrumbs":5,"title":1},"1122":{"body":44,"breadcrumbs":6,"title":2},"1123":{"body":22,"breadcrumbs":5,"title":1},"1124":{"body":15,"breadcrumbs":8,"title":3},"1125":{"body":0,"breadcrumbs":8,"title":3},"1126":{"body":0,"breadcrumbs":8,"title":3},"1127":{"body":18,"breadcrumbs":6,"title":1},"1128":{"body":15,"breadcrumbs":6,"title":1},"1129":{"body":100,"breadcrumbs":11,"title":4},"113":{"body":59,"breadcrumbs":9,"title":5},"1130":{"body":23,"breadcrumbs":5,"title":2},"1131":{"body":64,"breadcrumbs":5,"title":2},"1132":{"body":115,"breadcrumbs":4,"title":1},"1133":{"body":87,"breadcrumbs":5,"title":2},"1134":{"body":87,"breadcrumbs":4,"title":1},"1135":{"body":54,"breadcrumbs":14,"title":9},"1136":{"body":81,"breadcrumbs":6,"title":1},"1137":{"body":109,"breadcrumbs":6,"title":1},"1138":{"body":43,"breadcrumbs":6,"title":1},"1139":{"body":153,"breadcrumbs":7,"title":2},"114":{"body":0,"breadcrumbs":6,"title":2},"115":{"body":37,"breadcrumbs":8,"title":4},"116":{"body":0,"breadcrumbs":6,"title":2},"117":{"body":18,"breadcrumbs":11,"title":7},"118":{"body":0,"breadcrumbs":6,"title":2},"119":{"body":16,"breadcrumbs":8,"title":4},"12":{"body":120,"breadcrumbs":5,"title":4},"120":{"body":0,"breadcrumbs":6,"title":2},"121":{"body":16,"breadcrumbs":8,"title":4},"122":{"body":0,"breadcrumbs":6,"title":2},"123":{"body":16,"breadcrumbs":8,"title":4},"124":{"body":0,"breadcrumbs":6,"title":2},"125":{"body":50,"breadcrumbs":12,"title":8},"126":{"body":0,"breadcrumbs":6,"title":2},"127":{"body":21,"breadcrumbs":9,"title":5},"128":{"body":0,"breadcrumbs":6,"title":2},"129":{"body":29,"breadcrumbs":8,"title":4},"13":{"body":55,"breadcrumbs":2,"title":1},"130":{"body":42,"breadcrumbs":7,"title":3},"131":{"body":0,"breadcrumbs":6,"title":2},"132":{"body":16,"breadcrumbs":8,"title":4},"133":{"body":0,"breadcrumbs":6,"title":2},"134":{"body":26,"breadcrumbs":10,"title":6},"135":{"body":0,"breadcrumbs":6,"title":2},"136":{"body":32,"breadcrumbs":8,"title":4},"137":{"body":94,"breadcrumbs":6,"title":2},"138":{"body":0,"breadcrumbs":6,"title":2},"139":{"body":51,"breadcrumbs":9,"title":5},"14":{"body":103,"breadcrumbs":3,"title":2},"140":{"body":0,"breadcrumbs":6,"title":2},"141":{"body":28,"breadcrumbs":9,"title":5},"142":{"body":0,"breadcrumbs":6,"title":2},"143":{"body":91,"breadcrumbs":9,"title":5},"144":{"body":0,"breadcrumbs":6,"title":2},"145":{"body":20,"breadcrumbs":8,"title":4},"146":{"body":0,"breadcrumbs":6,"title":2},"147":{"body":32,"breadcrumbs":8,"title":4},"148":{"body":36,"breadcrumbs":9,"title":5},"149":{"body":26,"breadcrumbs":9,"title":5},"15":{"body":13,"breadcrumbs":5,"title":4},"150":{"body":0,"breadcrumbs":6,"title":2},"151":{"body":50,"breadcrumbs":8,"title":4},"152":{"body":37,"breadcrumbs":7,"title":3},"153":{"body":0,"breadcrumbs":6,"title":2},"154":{"body":77,"breadcrumbs":10,"title":6},"155":{"body":0,"breadcrumbs":6,"title":2},"156":{"body":16,"breadcrumbs":8,"title":4},"157":{"body":0,"breadcrumbs":6,"title":2},"158":{"body":15,"breadcrumbs":9,"title":5},"159":{"body":81,"breadcrumbs":10,"title":6},"16":{"body":61,"breadcrumbs":3,"title":2},"160":{"body":56,"breadcrumbs":11,"title":7},"161":{"body":0,"breadcrumbs":6,"title":2},"162":{"body":33,"breadcrumbs":8,"title":4},"163":{"body":115,"breadcrumbs":9,"title":5},"164":{"body":57,"breadcrumbs":9,"title":5},"165":{"body":9,"breadcrumbs":6,"title":2},"166":{"body":22,"breadcrumbs":7,"title":3},"167":{"body":35,"breadcrumbs":8,"title":4},"168":{"body":0,"breadcrumbs":6,"title":2},"169":{"body":63,"breadcrumbs":11,"title":7},"17":{"body":6,"breadcrumbs":2,"title":1},"170":{"body":11,"breadcrumbs":9,"title":5},"171":{"body":26,"breadcrumbs":8,"title":4},"172":{"body":44,"breadcrumbs":9,"title":5},"173":{"body":0,"breadcrumbs":6,"title":2},"174":{"body":63,"breadcrumbs":9,"title":5},"175":{"body":0,"breadcrumbs":6,"title":2},"176":{"body":44,"breadcrumbs":12,"title":8},"177":{"body":32,"breadcrumbs":8,"title":4},"178":{"body":34,"breadcrumbs":6,"title":2},"179":{"body":0,"breadcrumbs":6,"title":2},"18":{"body":32,"breadcrumbs":3,"title":2},"180":{"body":82,"breadcrumbs":9,"title":5},"181":{"body":0,"breadcrumbs":6,"title":2},"182":{"body":6,"breadcrumbs":7,"title":3},"183":{"body":18,"breadcrumbs":6,"title":2},"184":{"body":0,"breadcrumbs":6,"title":2},"185":{"body":102,"breadcrumbs":12,"title":8},"186":{"body":29,"breadcrumbs":5,"title":1},"187":{"body":32,"breadcrumbs":5,"title":1},"188":{"body":9,"breadcrumbs":6,"title":2},"189":{"body":62,"breadcrumbs":10,"title":6},"19":{"body":16,"breadcrumbs":2,"title":1},"190":{"body":0,"breadcrumbs":6,"title":2},"191":{"body":25,"breadcrumbs":11,"title":7},"192":{"body":123,"breadcrumbs":10,"title":6},"193":{"body":0,"breadcrumbs":6,"title":2},"194":{"body":10,"breadcrumbs":8,"title":4},"195":{"body":0,"breadcrumbs":6,"title":2},"196":{"body":136,"breadcrumbs":9,"title":5},"197":{"body":0,"breadcrumbs":6,"title":2},"198":{"body":18,"breadcrumbs":11,"title":7},"199":{"body":19,"breadcrumbs":7,"title":3},"2":{"body":74,"breadcrumbs":4,"title":2},"20":{"body":122,"breadcrumbs":3,"title":2},"200":{"body":32,"breadcrumbs":10,"title":6},"201":{"body":0,"breadcrumbs":6,"title":2},"202":{"body":60,"breadcrumbs":7,"title":3},"203":{"body":21,"breadcrumbs":9,"title":5},"204":{"body":0,"breadcrumbs":6,"title":2},"205":{"body":20,"breadcrumbs":9,"title":5},"206":{"body":0,"breadcrumbs":6,"title":2},"207":{"body":36,"breadcrumbs":11,"title":7},"208":{"body":18,"breadcrumbs":6,"title":2},"209":{"body":46,"breadcrumbs":11,"title":7},"21":{"body":8,"breadcrumbs":4,"title":2},"210":{"body":25,"breadcrumbs":7,"title":3},"211":{"body":31,"breadcrumbs":6,"title":2},"212":{"body":0,"breadcrumbs":6,"title":2},"213":{"body":42,"breadcrumbs":7,"title":3},"214":{"body":0,"breadcrumbs":6,"title":2},"215":{"body":19,"breadcrumbs":10,"title":6},"216":{"body":0,"breadcrumbs":6,"title":2},"217":{"body":20,"breadcrumbs":10,"title":6},"218":{"body":0,"breadcrumbs":6,"title":2},"219":{"body":24,"breadcrumbs":9,"title":5},"22":{"body":63,"breadcrumbs":6,"title":4},"220":{"body":29,"breadcrumbs":8,"title":4},"221":{"body":0,"breadcrumbs":6,"title":2},"222":{"body":28,"breadcrumbs":14,"title":10},"223":{"body":0,"breadcrumbs":6,"title":2},"224":{"body":18,"breadcrumbs":11,"title":7},"225":{"body":0,"breadcrumbs":6,"title":2},"226":{"body":19,"breadcrumbs":10,"title":6},"227":{"body":0,"breadcrumbs":6,"title":2},"228":{"body":26,"breadcrumbs":9,"title":5},"229":{"body":26,"breadcrumbs":12,"title":8},"23":{"body":70,"breadcrumbs":5,"title":3},"230":{"body":12,"breadcrumbs":9,"title":5},"231":{"body":0,"breadcrumbs":6,"title":2},"232":{"body":70,"breadcrumbs":13,"title":9},"233":{"body":43,"breadcrumbs":6,"title":2},"234":{"body":21,"breadcrumbs":8,"title":4},"235":{"body":0,"breadcrumbs":6,"title":2},"236":{"body":44,"breadcrumbs":11,"title":7},"237":{"body":0,"breadcrumbs":6,"title":2},"238":{"body":96,"breadcrumbs":10,"title":6},"239":{"body":0,"breadcrumbs":6,"title":2},"24":{"body":104,"breadcrumbs":4,"title":2},"240":{"body":48,"breadcrumbs":9,"title":5},"241":{"body":0,"breadcrumbs":6,"title":2},"242":{"body":34,"breadcrumbs":7,"title":3},"243":{"body":0,"breadcrumbs":6,"title":2},"244":{"body":75,"breadcrumbs":13,"title":9},"245":{"body":0,"breadcrumbs":6,"title":2},"246":{"body":27,"breadcrumbs":11,"title":7},"247":{"body":22,"breadcrumbs":11,"title":7},"248":{"body":32,"breadcrumbs":10,"title":6},"249":{"body":26,"breadcrumbs":11,"title":7},"25":{"body":35,"breadcrumbs":6,"title":4},"250":{"body":0,"breadcrumbs":6,"title":2},"251":{"body":72,"breadcrumbs":9,"title":5},"252":{"body":0,"breadcrumbs":6,"title":2},"253":{"body":99,"breadcrumbs":11,"title":7},"254":{"body":64,"breadcrumbs":7,"title":3},"255":{"body":0,"breadcrumbs":6,"title":2},"256":{"body":102,"breadcrumbs":9,"title":5},"257":{"body":0,"breadcrumbs":6,"title":2},"258":{"body":42,"breadcrumbs":9,"title":5},"259":{"body":57,"breadcrumbs":7,"title":3},"26":{"body":5,"breadcrumbs":3,"title":1},"260":{"body":0,"breadcrumbs":6,"title":2},"261":{"body":66,"breadcrumbs":11,"title":7},"262":{"body":50,"breadcrumbs":9,"title":5},"263":{"body":0,"breadcrumbs":6,"title":2},"264":{"body":39,"breadcrumbs":9,"title":5},"265":{"body":0,"breadcrumbs":6,"title":2},"266":{"body":61,"breadcrumbs":7,"title":3},"267":{"body":0,"breadcrumbs":6,"title":2},"268":{"body":50,"breadcrumbs":9,"title":5},"269":{"body":63,"breadcrumbs":7,"title":3},"27":{"body":58,"breadcrumbs":4,"title":2},"270":{"body":46,"breadcrumbs":9,"title":5},"271":{"body":0,"breadcrumbs":6,"title":2},"272":{"body":46,"breadcrumbs":10,"title":6},"273":{"body":24,"breadcrumbs":11,"title":7},"274":{"body":20,"breadcrumbs":6,"title":2},"275":{"body":0,"breadcrumbs":6,"title":2},"276":{"body":65,"breadcrumbs":10,"title":6},"277":{"body":19,"breadcrumbs":9,"title":5},"278":{"body":18,"breadcrumbs":9,"title":5},"279":{"body":57,"breadcrumbs":9,"title":5},"28":{"body":0,"breadcrumbs":4,"title":2},"280":{"body":196,"breadcrumbs":6,"title":2},"281":{"body":16,"breadcrumbs":6,"title":2},"282":{"body":18,"breadcrumbs":6,"title":2},"283":{"body":51,"breadcrumbs":6,"title":2},"284":{"body":19,"breadcrumbs":6,"title":2},"285":{"body":0,"breadcrumbs":6,"title":2},"286":{"body":40,"breadcrumbs":7,"title":3},"287":{"body":216,"breadcrumbs":7,"title":3},"288":{"body":191,"breadcrumbs":5,"title":1},"289":{"body":95,"breadcrumbs":6,"title":2},"29":{"body":124,"breadcrumbs":3,"title":1},"290":{"body":67,"breadcrumbs":7,"title":3},"291":{"body":10,"breadcrumbs":6,"title":2},"292":{"body":11,"breadcrumbs":6,"title":2},"293":{"body":48,"breadcrumbs":7,"title":3},"294":{"body":17,"breadcrumbs":7,"title":3},"295":{"body":0,"breadcrumbs":6,"title":2},"296":{"body":61,"breadcrumbs":7,"title":3},"297":{"body":88,"breadcrumbs":5,"title":1},"298":{"body":53,"breadcrumbs":7,"title":3},"299":{"body":22,"breadcrumbs":6,"title":2},"3":{"body":14,"breadcrumbs":5,"title":3},"30":{"body":144,"breadcrumbs":5,"title":3},"300":{"body":223,"breadcrumbs":6,"title":2},"301":{"body":40,"breadcrumbs":6,"title":2},"302":{"body":42,"breadcrumbs":6,"title":2},"303":{"body":16,"breadcrumbs":6,"title":2},"304":{"body":49,"breadcrumbs":6,"title":2},"305":{"body":97,"breadcrumbs":6,"title":2},"306":{"body":20,"breadcrumbs":6,"title":2},"307":{"body":20,"breadcrumbs":6,"title":2},"308":{"body":49,"breadcrumbs":6,"title":2},"309":{"body":24,"breadcrumbs":6,"title":2},"31":{"body":0,"breadcrumbs":3,"title":1},"310":{"body":136,"breadcrumbs":6,"title":2},"311":{"body":25,"breadcrumbs":6,"title":2},"312":{"body":79,"breadcrumbs":6,"title":2},"313":{"body":23,"breadcrumbs":6,"title":2},"314":{"body":68,"breadcrumbs":6,"title":2},"315":{"body":94,"breadcrumbs":6,"title":2},"316":{"body":132,"breadcrumbs":4,"title":3},"317":{"body":77,"breadcrumbs":2,"title":1},"318":{"body":64,"breadcrumbs":3,"title":2},"319":{"body":18,"breadcrumbs":5,"title":4},"32":{"body":67,"breadcrumbs":5,"title":3},"320":{"body":15,"breadcrumbs":2,"title":1},"321":{"body":55,"breadcrumbs":5,"title":2},"322":{"body":74,"breadcrumbs":5,"title":2},"323":{"body":39,"breadcrumbs":5,"title":2},"324":{"body":142,"breadcrumbs":4,"title":1},"325":{"body":16,"breadcrumbs":4,"title":1},"326":{"body":47,"breadcrumbs":4,"title":1},"327":{"body":5,"breadcrumbs":4,"title":1},"328":{"body":69,"breadcrumbs":4,"title":1},"329":{"body":13,"breadcrumbs":4,"title":1},"33":{"body":79,"breadcrumbs":6,"title":4},"330":{"body":33,"breadcrumbs":4,"title":1},"331":{"body":18,"breadcrumbs":4,"title":1},"332":{"body":17,"breadcrumbs":4,"title":1},"333":{"body":25,"breadcrumbs":4,"title":1},"334":{"body":12,"breadcrumbs":4,"title":1},"335":{"body":49,"breadcrumbs":4,"title":1},"336":{"body":47,"breadcrumbs":4,"title":1},"337":{"body":48,"breadcrumbs":4,"title":1},"338":{"body":24,"breadcrumbs":4,"title":1},"339":{"body":83,"breadcrumbs":4,"title":1},"34":{"body":133,"breadcrumbs":7,"title":4},"340":{"body":31,"breadcrumbs":4,"title":1},"341":{"body":29,"breadcrumbs":4,"title":1},"342":{"body":35,"breadcrumbs":4,"title":1},"343":{"body":25,"breadcrumbs":4,"title":1},"344":{"body":18,"breadcrumbs":4,"title":1},"345":{"body":36,"breadcrumbs":4,"title":1},"346":{"body":16,"breadcrumbs":4,"title":1},"347":{"body":40,"breadcrumbs":4,"title":1},"348":{"body":19,"breadcrumbs":4,"title":1},"349":{"body":19,"breadcrumbs":4,"title":1},"35":{"body":55,"breadcrumbs":5,"title":2},"350":{"body":18,"breadcrumbs":4,"title":1},"351":{"body":82,"breadcrumbs":4,"title":1},"352":{"body":42,"breadcrumbs":4,"title":1},"353":{"body":414,"breadcrumbs":4,"title":1},"354":{"body":19,"breadcrumbs":4,"title":1},"355":{"body":71,"breadcrumbs":4,"title":1},"356":{"body":18,"breadcrumbs":4,"title":1},"357":{"body":18,"breadcrumbs":4,"title":1},"358":{"body":29,"breadcrumbs":4,"title":1},"359":{"body":98,"breadcrumbs":4,"title":1},"36":{"body":3,"breadcrumbs":7,"title":4},"360":{"body":54,"breadcrumbs":4,"title":1},"361":{"body":46,"breadcrumbs":4,"title":1},"362":{"body":642,"breadcrumbs":4,"title":1},"363":{"body":23,"breadcrumbs":4,"title":1},"364":{"body":45,"breadcrumbs":4,"title":1},"365":{"body":4,"breadcrumbs":5,"title":2},"366":{"body":12,"breadcrumbs":4,"title":1},"367":{"body":17,"breadcrumbs":4,"title":1},"368":{"body":16,"breadcrumbs":4,"title":1},"369":{"body":43,"breadcrumbs":4,"title":1},"37":{"body":73,"breadcrumbs":4,"title":1},"370":{"body":22,"breadcrumbs":4,"title":1},"371":{"body":38,"breadcrumbs":4,"title":1},"372":{"body":33,"breadcrumbs":4,"title":1},"373":{"body":29,"breadcrumbs":4,"title":1},"374":{"body":22,"breadcrumbs":4,"title":1},"375":{"body":47,"breadcrumbs":4,"title":1},"376":{"body":15,"breadcrumbs":4,"title":1},"377":{"body":116,"breadcrumbs":4,"title":1},"378":{"body":13,"breadcrumbs":4,"title":1},"379":{"body":23,"breadcrumbs":4,"title":1},"38":{"body":122,"breadcrumbs":7,"title":4},"380":{"body":31,"breadcrumbs":4,"title":1},"381":{"body":27,"breadcrumbs":4,"title":1},"382":{"body":48,"breadcrumbs":4,"title":1},"383":{"body":19,"breadcrumbs":4,"title":1},"384":{"body":21,"breadcrumbs":4,"title":1},"385":{"body":51,"breadcrumbs":4,"title":1},"386":{"body":58,"breadcrumbs":4,"title":1},"387":{"body":55,"breadcrumbs":4,"title":1},"388":{"body":387,"breadcrumbs":4,"title":1},"389":{"body":3,"breadcrumbs":4,"title":1},"39":{"body":42,"breadcrumbs":5,"title":2},"390":{"body":43,"breadcrumbs":4,"title":1},"391":{"body":12,"breadcrumbs":4,"title":1},"392":{"body":21,"breadcrumbs":4,"title":1},"393":{"body":39,"breadcrumbs":4,"title":1},"394":{"body":38,"breadcrumbs":4,"title":1},"395":{"body":31,"breadcrumbs":4,"title":1},"396":{"body":3,"breadcrumbs":4,"title":1},"397":{"body":53,"breadcrumbs":4,"title":1},"398":{"body":41,"breadcrumbs":4,"title":1},"399":{"body":32,"breadcrumbs":4,"title":1},"4":{"body":0,"breadcrumbs":3,"title":2},"40":{"body":93,"breadcrumbs":4,"title":1},"400":{"body":24,"breadcrumbs":4,"title":1},"401":{"body":28,"breadcrumbs":4,"title":1},"402":{"body":154,"breadcrumbs":4,"title":1},"403":{"body":3,"breadcrumbs":4,"title":1},"404":{"body":41,"breadcrumbs":4,"title":1},"405":{"body":345,"breadcrumbs":4,"title":1},"406":{"body":46,"breadcrumbs":6,"title":3},"407":{"body":5,"breadcrumbs":4,"title":1},"408":{"body":141,"breadcrumbs":4,"title":1},"409":{"body":307,"breadcrumbs":4,"title":1},"41":{"body":341,"breadcrumbs":4,"title":1},"410":{"body":4,"breadcrumbs":4,"title":1},"411":{"body":16,"breadcrumbs":4,"title":1},"412":{"body":25,"breadcrumbs":4,"title":1},"413":{"body":51,"breadcrumbs":4,"title":1},"414":{"body":46,"breadcrumbs":4,"title":1},"415":{"body":49,"breadcrumbs":4,"title":1},"416":{"body":147,"breadcrumbs":4,"title":1},"417":{"body":51,"breadcrumbs":4,"title":1},"418":{"body":102,"breadcrumbs":4,"title":1},"419":{"body":63,"breadcrumbs":4,"title":1},"42":{"body":142,"breadcrumbs":4,"title":1},"420":{"body":45,"breadcrumbs":4,"title":1},"421":{"body":199,"breadcrumbs":4,"title":1},"422":{"body":51,"breadcrumbs":4,"title":1},"423":{"body":44,"breadcrumbs":4,"title":1},"424":{"body":82,"breadcrumbs":4,"title":1},"425":{"body":75,"breadcrumbs":4,"title":1},"426":{"body":93,"breadcrumbs":4,"title":1},"427":{"body":64,"breadcrumbs":4,"title":1},"428":{"body":44,"breadcrumbs":4,"title":1},"429":{"body":41,"breadcrumbs":4,"title":1},"43":{"body":20,"breadcrumbs":6,"title":3},"430":{"body":29,"breadcrumbs":4,"title":1},"431":{"body":6,"breadcrumbs":5,"title":2},"432":{"body":215,"breadcrumbs":4,"title":1},"433":{"body":20,"breadcrumbs":4,"title":1},"434":{"body":36,"breadcrumbs":4,"title":1},"435":{"body":12,"breadcrumbs":4,"title":1},"436":{"body":26,"breadcrumbs":4,"title":1},"437":{"body":15,"breadcrumbs":4,"title":1},"438":{"body":74,"breadcrumbs":4,"title":1},"439":{"body":36,"breadcrumbs":4,"title":1},"44":{"body":27,"breadcrumbs":6,"title":3},"440":{"body":47,"breadcrumbs":4,"title":1},"441":{"body":12,"breadcrumbs":4,"title":1},"442":{"body":62,"breadcrumbs":4,"title":1},"443":{"body":77,"breadcrumbs":4,"title":1},"444":{"body":57,"breadcrumbs":4,"title":1},"445":{"body":33,"breadcrumbs":4,"title":1},"446":{"body":63,"breadcrumbs":4,"title":1},"447":{"body":157,"breadcrumbs":4,"title":1},"448":{"body":21,"breadcrumbs":4,"title":1},"449":{"body":91,"breadcrumbs":4,"title":1},"45":{"body":27,"breadcrumbs":7,"title":4},"450":{"body":39,"breadcrumbs":4,"title":1},"451":{"body":118,"breadcrumbs":4,"title":1},"452":{"body":15,"breadcrumbs":4,"title":1},"453":{"body":68,"breadcrumbs":4,"title":1},"454":{"body":50,"breadcrumbs":4,"title":1},"455":{"body":7,"breadcrumbs":4,"title":1},"456":{"body":14,"breadcrumbs":4,"title":1},"457":{"body":33,"breadcrumbs":4,"title":1},"458":{"body":14,"breadcrumbs":4,"title":1},"459":{"body":33,"breadcrumbs":4,"title":1},"46":{"body":131,"breadcrumbs":4,"title":1},"460":{"body":27,"breadcrumbs":4,"title":1},"461":{"body":13,"breadcrumbs":4,"title":1},"462":{"body":6,"breadcrumbs":4,"title":1},"463":{"body":12,"breadcrumbs":4,"title":1},"464":{"body":14,"breadcrumbs":4,"title":1},"465":{"body":33,"breadcrumbs":4,"title":1},"466":{"body":12,"breadcrumbs":4,"title":1},"467":{"body":12,"breadcrumbs":4,"title":1},"468":{"body":12,"breadcrumbs":4,"title":1},"469":{"body":36,"breadcrumbs":4,"title":1},"47":{"body":44,"breadcrumbs":5,"title":2},"470":{"body":52,"breadcrumbs":4,"title":1},"471":{"body":8,"breadcrumbs":4,"title":1},"472":{"body":47,"breadcrumbs":4,"title":1},"473":{"body":27,"breadcrumbs":4,"title":1},"474":{"body":21,"breadcrumbs":4,"title":1},"475":{"body":18,"breadcrumbs":4,"title":1},"476":{"body":70,"breadcrumbs":4,"title":1},"477":{"body":14,"breadcrumbs":4,"title":1},"478":{"body":30,"breadcrumbs":4,"title":1},"479":{"body":61,"breadcrumbs":4,"title":1},"48":{"body":28,"breadcrumbs":4,"title":1},"480":{"body":35,"breadcrumbs":4,"title":1},"481":{"body":44,"breadcrumbs":4,"title":1},"482":{"body":21,"breadcrumbs":4,"title":1},"483":{"body":27,"breadcrumbs":4,"title":1},"484":{"body":103,"breadcrumbs":4,"title":1},"485":{"body":25,"breadcrumbs":4,"title":1},"486":{"body":25,"breadcrumbs":4,"title":1},"487":{"body":18,"breadcrumbs":4,"title":1},"488":{"body":58,"breadcrumbs":4,"title":1},"489":{"body":46,"breadcrumbs":4,"title":1},"49":{"body":44,"breadcrumbs":4,"title":1},"490":{"body":35,"breadcrumbs":4,"title":1},"491":{"body":71,"breadcrumbs":4,"title":1},"492":{"body":66,"breadcrumbs":4,"title":1},"493":{"body":19,"breadcrumbs":4,"title":1},"494":{"body":44,"breadcrumbs":4,"title":1},"495":{"body":33,"breadcrumbs":4,"title":1},"496":{"body":6,"breadcrumbs":6,"title":3},"497":{"body":28,"breadcrumbs":4,"title":1},"498":{"body":42,"breadcrumbs":4,"title":1},"499":{"body":41,"breadcrumbs":4,"title":1},"5":{"body":70,"breadcrumbs":4,"title":3},"50":{"body":33,"breadcrumbs":4,"title":1},"500":{"body":42,"breadcrumbs":4,"title":1},"501":{"body":71,"breadcrumbs":4,"title":1},"502":{"body":63,"breadcrumbs":4,"title":1},"503":{"body":4,"breadcrumbs":4,"title":1},"504":{"body":14,"breadcrumbs":4,"title":1},"505":{"body":83,"breadcrumbs":4,"title":1},"506":{"body":42,"breadcrumbs":4,"title":1},"507":{"body":39,"breadcrumbs":4,"title":1},"508":{"body":16,"breadcrumbs":4,"title":1},"509":{"body":5,"breadcrumbs":5,"title":2},"51":{"body":66,"breadcrumbs":5,"title":2},"510":{"body":132,"breadcrumbs":4,"title":1},"511":{"body":67,"breadcrumbs":4,"title":1},"512":{"body":13,"breadcrumbs":4,"title":1},"513":{"body":22,"breadcrumbs":4,"title":1},"514":{"body":38,"breadcrumbs":4,"title":1},"515":{"body":70,"breadcrumbs":4,"title":1},"516":{"body":33,"breadcrumbs":4,"title":1},"517":{"body":38,"breadcrumbs":4,"title":1},"518":{"body":30,"breadcrumbs":4,"title":1},"519":{"body":5,"breadcrumbs":5,"title":2},"52":{"body":348,"breadcrumbs":4,"title":1},"520":{"body":27,"breadcrumbs":4,"title":1},"521":{"body":56,"breadcrumbs":4,"title":1},"522":{"body":26,"breadcrumbs":4,"title":1},"523":{"body":107,"breadcrumbs":4,"title":1},"524":{"body":18,"breadcrumbs":4,"title":1},"525":{"body":25,"breadcrumbs":4,"title":1},"526":{"body":26,"breadcrumbs":6,"title":3},"527":{"body":578,"breadcrumbs":4,"title":1},"528":{"body":1073,"breadcrumbs":4,"title":1},"529":{"body":276,"breadcrumbs":4,"title":1},"53":{"body":9,"breadcrumbs":9,"title":3},"530":{"body":142,"breadcrumbs":4,"title":1},"531":{"body":204,"breadcrumbs":4,"title":1},"532":{"body":168,"breadcrumbs":4,"title":1},"533":{"body":5,"breadcrumbs":4,"title":1},"534":{"body":172,"breadcrumbs":4,"title":1},"535":{"body":4,"breadcrumbs":4,"title":1},"536":{"body":43,"breadcrumbs":4,"title":1},"537":{"body":195,"breadcrumbs":4,"title":1},"538":{"body":195,"breadcrumbs":4,"title":1},"539":{"body":39,"breadcrumbs":4,"title":1},"54":{"body":0,"breadcrumbs":8,"title":2},"540":{"body":157,"breadcrumbs":4,"title":1},"541":{"body":29,"breadcrumbs":4,"title":1},"542":{"body":155,"breadcrumbs":4,"title":1},"543":{"body":232,"breadcrumbs":4,"title":1},"544":{"body":136,"breadcrumbs":4,"title":1},"545":{"body":18,"breadcrumbs":4,"title":1},"546":{"body":23,"breadcrumbs":4,"title":1},"547":{"body":5,"breadcrumbs":4,"title":1},"548":{"body":128,"breadcrumbs":4,"title":1},"549":{"body":73,"breadcrumbs":5,"title":2},"55":{"body":61,"breadcrumbs":8,"title":2},"550":{"body":36,"breadcrumbs":4,"title":1},"551":{"body":30,"breadcrumbs":4,"title":1},"552":{"body":23,"breadcrumbs":4,"title":1},"553":{"body":46,"breadcrumbs":4,"title":1},"554":{"body":25,"breadcrumbs":4,"title":1},"555":{"body":93,"breadcrumbs":4,"title":1},"556":{"body":73,"breadcrumbs":4,"title":1},"557":{"body":92,"breadcrumbs":4,"title":1},"558":{"body":41,"breadcrumbs":4,"title":1},"559":{"body":21,"breadcrumbs":4,"title":1},"56":{"body":511,"breadcrumbs":7,"title":1},"560":{"body":19,"breadcrumbs":4,"title":1},"561":{"body":21,"breadcrumbs":4,"title":1},"562":{"body":34,"breadcrumbs":4,"title":1},"563":{"body":189,"breadcrumbs":4,"title":1},"564":{"body":24,"breadcrumbs":6,"title":3},"565":{"body":19,"breadcrumbs":4,"title":1},"566":{"body":26,"breadcrumbs":4,"title":1},"567":{"body":64,"breadcrumbs":4,"title":1},"568":{"body":32,"breadcrumbs":4,"title":1},"569":{"body":21,"breadcrumbs":4,"title":1},"57":{"body":9,"breadcrumbs":9,"title":3},"570":{"body":33,"breadcrumbs":4,"title":1},"571":{"body":26,"breadcrumbs":4,"title":1},"572":{"body":5,"breadcrumbs":5,"title":2},"573":{"body":96,"breadcrumbs":4,"title":1},"574":{"body":6,"breadcrumbs":6,"title":3},"575":{"body":112,"breadcrumbs":4,"title":1},"576":{"body":154,"breadcrumbs":9,"title":4},"577":{"body":294,"breadcrumbs":9,"title":4},"578":{"body":196,"breadcrumbs":5,"title":2},"579":{"body":118,"breadcrumbs":3,"title":1},"58":{"body":0,"breadcrumbs":8,"title":2},"580":{"body":309,"breadcrumbs":4,"title":2},"581":{"body":129,"breadcrumbs":8,"title":6},"582":{"body":480,"breadcrumbs":8,"title":6},"583":{"body":52,"breadcrumbs":5,"title":2},"584":{"body":23,"breadcrumbs":7,"title":2},"585":{"body":76,"breadcrumbs":14,"title":7},"586":{"body":76,"breadcrumbs":9,"title":2},"587":{"body":44,"breadcrumbs":11,"title":4},"588":{"body":6,"breadcrumbs":9,"title":2},"589":{"body":77,"breadcrumbs":11,"title":4},"59":{"body":27,"breadcrumbs":8,"title":2},"590":{"body":104,"breadcrumbs":8,"title":1},"591":{"body":79,"breadcrumbs":8,"title":1},"592":{"body":117,"breadcrumbs":8,"title":1},"593":{"body":82,"breadcrumbs":8,"title":1},"594":{"body":105,"breadcrumbs":10,"title":3},"595":{"body":127,"breadcrumbs":8,"title":1},"596":{"body":64,"breadcrumbs":8,"title":1},"597":{"body":85,"breadcrumbs":8,"title":1},"598":{"body":49,"breadcrumbs":8,"title":1},"599":{"body":82,"breadcrumbs":8,"title":1},"6":{"body":19,"breadcrumbs":3,"title":2},"60":{"body":423,"breadcrumbs":7,"title":1},"600":{"body":82,"breadcrumbs":8,"title":1},"601":{"body":142,"breadcrumbs":8,"title":1},"602":{"body":121,"breadcrumbs":8,"title":1},"603":{"body":123,"breadcrumbs":8,"title":1},"604":{"body":76,"breadcrumbs":9,"title":2},"605":{"body":85,"breadcrumbs":10,"title":3},"606":{"body":42,"breadcrumbs":8,"title":1},"607":{"body":111,"breadcrumbs":8,"title":1},"608":{"body":33,"breadcrumbs":8,"title":1},"609":{"body":22,"breadcrumbs":7,"title":1},"61":{"body":41,"breadcrumbs":9,"title":3},"610":{"body":20,"breadcrumbs":7,"title":1},"611":{"body":167,"breadcrumbs":11,"title":3},"612":{"body":39,"breadcrumbs":11,"title":3},"613":{"body":275,"breadcrumbs":13,"title":5},"614":{"body":12,"breadcrumbs":12,"title":4},"615":{"body":39,"breadcrumbs":11,"title":3},"616":{"body":272,"breadcrumbs":13,"title":5},"617":{"body":12,"breadcrumbs":12,"title":4},"618":{"body":76,"breadcrumbs":10,"title":4},"619":{"body":50,"breadcrumbs":8,"title":2},"62":{"body":68,"breadcrumbs":5,"title":4},"620":{"body":269,"breadcrumbs":8,"title":2},"621":{"body":114,"breadcrumbs":9,"title":3},"622":{"body":53,"breadcrumbs":8,"title":2},"623":{"body":115,"breadcrumbs":9,"title":3},"624":{"body":14,"breadcrumbs":7,"title":2},"625":{"body":172,"breadcrumbs":7,"title":2},"626":{"body":121,"breadcrumbs":6,"title":1},"627":{"body":143,"breadcrumbs":7,"title":2},"628":{"body":128,"breadcrumbs":13,"title":8},"629":{"body":18,"breadcrumbs":4,"title":1},"63":{"body":24,"breadcrumbs":4,"title":3},"630":{"body":80,"breadcrumbs":6,"title":3},"631":{"body":34,"breadcrumbs":7,"title":4},"632":{"body":98,"breadcrumbs":6,"title":3},"633":{"body":42,"breadcrumbs":5,"title":2},"634":{"body":56,"breadcrumbs":5,"title":2},"635":{"body":108,"breadcrumbs":5,"title":2},"636":{"body":6,"breadcrumbs":5,"title":2},"637":{"body":50,"breadcrumbs":10,"title":7},"638":{"body":182,"breadcrumbs":7,"title":4},"639":{"body":77,"breadcrumbs":7,"title":4},"64":{"body":60,"breadcrumbs":3,"title":2},"640":{"body":80,"breadcrumbs":6,"title":3},"641":{"body":65,"breadcrumbs":10,"title":7},"642":{"body":57,"breadcrumbs":10,"title":7},"643":{"body":52,"breadcrumbs":7,"title":4},"644":{"body":174,"breadcrumbs":5,"title":2},"645":{"body":17,"breadcrumbs":5,"title":2},"646":{"body":112,"breadcrumbs":5,"title":2},"647":{"body":125,"breadcrumbs":4,"title":1},"648":{"body":49,"breadcrumbs":4,"title":1},"649":{"body":214,"breadcrumbs":7,"title":3},"65":{"body":43,"breadcrumbs":6,"title":5},"650":{"body":23,"breadcrumbs":6,"title":2},"651":{"body":71,"breadcrumbs":6,"title":2},"652":{"body":217,"breadcrumbs":6,"title":2},"653":{"body":105,"breadcrumbs":6,"title":2},"654":{"body":58,"breadcrumbs":6,"title":2},"655":{"body":53,"breadcrumbs":8,"title":4},"656":{"body":36,"breadcrumbs":4,"title":1},"657":{"body":31,"breadcrumbs":5,"title":2},"658":{"body":76,"breadcrumbs":6,"title":3},"659":{"body":36,"breadcrumbs":5,"title":2},"66":{"body":101,"breadcrumbs":5,"title":4},"660":{"body":51,"breadcrumbs":7,"title":2},"661":{"body":58,"breadcrumbs":10,"title":5},"662":{"body":36,"breadcrumbs":8,"title":3},"663":{"body":93,"breadcrumbs":8,"title":3},"664":{"body":69,"breadcrumbs":7,"title":2},"665":{"body":145,"breadcrumbs":6,"title":1},"666":{"body":21,"breadcrumbs":11,"title":3},"667":{"body":4,"breadcrumbs":9,"title":1},"668":{"body":105,"breadcrumbs":9,"title":1},"669":{"body":121,"breadcrumbs":9,"title":1},"67":{"body":0,"breadcrumbs":3,"title":2},"670":{"body":110,"breadcrumbs":9,"title":1},"671":{"body":89,"breadcrumbs":9,"title":1},"672":{"body":186,"breadcrumbs":9,"title":1},"673":{"body":138,"breadcrumbs":9,"title":1},"674":{"body":87,"breadcrumbs":9,"title":1},"675":{"body":89,"breadcrumbs":9,"title":1},"676":{"body":115,"breadcrumbs":9,"title":1},"677":{"body":121,"breadcrumbs":9,"title":1},"678":{"body":109,"breadcrumbs":9,"title":1},"679":{"body":87,"breadcrumbs":9,"title":1},"68":{"body":60,"breadcrumbs":3,"title":2},"680":{"body":68,"breadcrumbs":9,"title":1},"681":{"body":101,"breadcrumbs":9,"title":1},"682":{"body":99,"breadcrumbs":9,"title":1},"683":{"body":25,"breadcrumbs":13,"title":4},"684":{"body":5,"breadcrumbs":10,"title":1},"685":{"body":213,"breadcrumbs":10,"title":1},"686":{"body":86,"breadcrumbs":10,"title":1},"687":{"body":59,"breadcrumbs":10,"title":1},"688":{"body":61,"breadcrumbs":10,"title":1},"689":{"body":88,"breadcrumbs":10,"title":1},"69":{"body":24,"breadcrumbs":6,"title":5},"690":{"body":61,"breadcrumbs":10,"title":1},"691":{"body":88,"breadcrumbs":10,"title":1},"692":{"body":131,"breadcrumbs":10,"title":1},"693":{"body":76,"breadcrumbs":10,"title":1},"694":{"body":64,"breadcrumbs":10,"title":1},"695":{"body":65,"breadcrumbs":10,"title":1},"696":{"body":65,"breadcrumbs":10,"title":1},"697":{"body":65,"breadcrumbs":10,"title":1},"698":{"body":56,"breadcrumbs":11,"title":3},"699":{"body":4,"breadcrumbs":9,"title":1},"7":{"body":480,"breadcrumbs":3,"title":2},"70":{"body":159,"breadcrumbs":6,"title":2},"700":{"body":75,"breadcrumbs":9,"title":1},"701":{"body":95,"breadcrumbs":9,"title":1},"702":{"body":73,"breadcrumbs":9,"title":1},"703":{"body":33,"breadcrumbs":11,"title":3},"704":{"body":84,"breadcrumbs":9,"title":1},"705":{"body":37,"breadcrumbs":9,"title":1},"706":{"body":36,"breadcrumbs":9,"title":1},"707":{"body":20,"breadcrumbs":13,"title":4},"708":{"body":0,"breadcrumbs":10,"title":1},"709":{"body":160,"breadcrumbs":10,"title":1},"71":{"body":143,"breadcrumbs":8,"title":4},"710":{"body":95,"breadcrumbs":10,"title":1},"711":{"body":55,"breadcrumbs":10,"title":1},"712":{"body":217,"breadcrumbs":10,"title":1},"713":{"body":104,"breadcrumbs":10,"title":1},"714":{"body":88,"breadcrumbs":10,"title":1},"715":{"body":112,"breadcrumbs":10,"title":1},"716":{"body":88,"breadcrumbs":13,"title":4},"717":{"body":103,"breadcrumbs":10,"title":1},"718":{"body":34,"breadcrumbs":10,"title":1},"719":{"body":44,"breadcrumbs":10,"title":1},"72":{"body":91,"breadcrumbs":8,"title":4},"720":{"body":21,"breadcrumbs":11,"title":3},"721":{"body":4,"breadcrumbs":9,"title":1},"722":{"body":95,"breadcrumbs":9,"title":1},"723":{"body":112,"breadcrumbs":9,"title":1},"724":{"body":26,"breadcrumbs":21,"title":8},"725":{"body":48,"breadcrumbs":14,"title":1},"726":{"body":26,"breadcrumbs":11,"title":3},"727":{"body":81,"breadcrumbs":9,"title":1},"728":{"body":93,"breadcrumbs":9,"title":1},"729":{"body":104,"breadcrumbs":9,"title":1},"73":{"body":0,"breadcrumbs":6,"title":2},"730":{"body":83,"breadcrumbs":9,"title":1},"731":{"body":23,"breadcrumbs":9,"title":2},"732":{"body":114,"breadcrumbs":8,"title":1},"733":{"body":84,"breadcrumbs":16,"title":6},"734":{"body":85,"breadcrumbs":6,"title":4},"735":{"body":80,"breadcrumbs":5,"title":3},"736":{"body":155,"breadcrumbs":5,"title":3},"737":{"body":152,"breadcrumbs":4,"title":2},"738":{"body":96,"breadcrumbs":4,"title":2},"739":{"body":33,"breadcrumbs":5,"title":3},"74":{"body":34,"breadcrumbs":8,"title":4},"740":{"body":36,"breadcrumbs":5,"title":3},"741":{"body":0,"breadcrumbs":5,"title":3},"742":{"body":1172,"breadcrumbs":3,"title":1},"743":{"body":61,"breadcrumbs":3,"title":1},"744":{"body":38,"breadcrumbs":3,"title":1},"745":{"body":66,"breadcrumbs":3,"title":1},"746":{"body":111,"breadcrumbs":3,"title":1},"747":{"body":75,"breadcrumbs":3,"title":1},"748":{"body":16,"breadcrumbs":4,"title":2},"749":{"body":31,"breadcrumbs":5,"title":3},"75":{"body":58,"breadcrumbs":11,"title":7},"750":{"body":36,"breadcrumbs":4,"title":2},"751":{"body":90,"breadcrumbs":8,"title":3},"752":{"body":42,"breadcrumbs":8,"title":5},"753":{"body":70,"breadcrumbs":6,"title":3},"754":{"body":68,"breadcrumbs":5,"title":2},"755":{"body":62,"breadcrumbs":4,"title":1},"756":{"body":103,"breadcrumbs":4,"title":1},"757":{"body":25,"breadcrumbs":2,"title":1},"758":{"body":26,"breadcrumbs":6,"title":4},"759":{"body":24,"breadcrumbs":4,"title":2},"76":{"body":25,"breadcrumbs":10,"title":6},"760":{"body":30,"breadcrumbs":5,"title":3},"761":{"body":25,"breadcrumbs":3,"title":1},"762":{"body":58,"breadcrumbs":5,"title":3},"763":{"body":99,"breadcrumbs":7,"title":5},"764":{"body":116,"breadcrumbs":4,"title":2},"765":{"body":0,"breadcrumbs":5,"title":2},"766":{"body":79,"breadcrumbs":6,"title":3},"767":{"body":94,"breadcrumbs":7,"title":4},"768":{"body":33,"breadcrumbs":8,"title":3},"769":{"body":57,"breadcrumbs":7,"title":2},"77":{"body":0,"breadcrumbs":6,"title":2},"770":{"body":11,"breadcrumbs":8,"title":3},"771":{"body":70,"breadcrumbs":6,"title":1},"772":{"body":64,"breadcrumbs":6,"title":1},"773":{"body":40,"breadcrumbs":6,"title":1},"774":{"body":64,"breadcrumbs":8,"title":3},"775":{"body":272,"breadcrumbs":8,"title":3},"776":{"body":171,"breadcrumbs":10,"title":5},"777":{"body":22,"breadcrumbs":9,"title":4},"778":{"body":43,"breadcrumbs":8,"title":3},"779":{"body":34,"breadcrumbs":7,"title":2},"78":{"body":21,"breadcrumbs":15,"title":11},"780":{"body":26,"breadcrumbs":8,"title":3},"781":{"body":27,"breadcrumbs":6,"title":2},"782":{"body":24,"breadcrumbs":7,"title":3},"783":{"body":14,"breadcrumbs":8,"title":4},"784":{"body":61,"breadcrumbs":8,"title":4},"785":{"body":47,"breadcrumbs":6,"title":2},"786":{"body":49,"breadcrumbs":7,"title":3},"787":{"body":17,"breadcrumbs":7,"title":3},"788":{"body":18,"breadcrumbs":8,"title":4},"789":{"body":39,"breadcrumbs":7,"title":3},"79":{"body":17,"breadcrumbs":9,"title":5},"790":{"body":44,"breadcrumbs":7,"title":3},"791":{"body":29,"breadcrumbs":8,"title":4},"792":{"body":11,"breadcrumbs":8,"title":4},"793":{"body":30,"breadcrumbs":7,"title":3},"794":{"body":44,"breadcrumbs":8,"title":4},"795":{"body":104,"breadcrumbs":9,"title":5},"796":{"body":10,"breadcrumbs":8,"title":4},"797":{"body":60,"breadcrumbs":8,"title":4},"798":{"body":136,"breadcrumbs":8,"title":3},"799":{"body":26,"breadcrumbs":8,"title":3},"8":{"body":733,"breadcrumbs":5,"title":4},"80":{"body":0,"breadcrumbs":6,"title":2},"800":{"body":13,"breadcrumbs":9,"title":4},"801":{"body":186,"breadcrumbs":8,"title":3},"802":{"body":36,"breadcrumbs":7,"title":2},"803":{"body":91,"breadcrumbs":8,"title":3},"804":{"body":111,"breadcrumbs":7,"title":2},"805":{"body":32,"breadcrumbs":7,"title":2},"806":{"body":138,"breadcrumbs":7,"title":2},"807":{"body":102,"breadcrumbs":7,"title":2},"808":{"body":23,"breadcrumbs":7,"title":2},"809":{"body":32,"breadcrumbs":6,"title":1},"81":{"body":9,"breadcrumbs":10,"title":6},"810":{"body":31,"breadcrumbs":10,"title":4},"811":{"body":16,"breadcrumbs":7,"title":1},"812":{"body":7,"breadcrumbs":7,"title":1},"813":{"body":771,"breadcrumbs":7,"title":3},"814":{"body":196,"breadcrumbs":7,"title":3},"815":{"body":38,"breadcrumbs":7,"title":3},"816":{"body":64,"breadcrumbs":7,"title":3},"817":{"body":273,"breadcrumbs":7,"title":3},"818":{"body":77,"breadcrumbs":8,"title":4},"819":{"body":30,"breadcrumbs":7,"title":3},"82":{"body":20,"breadcrumbs":13,"title":9},"820":{"body":46,"breadcrumbs":7,"title":3},"821":{"body":47,"breadcrumbs":6,"title":2},"822":{"body":140,"breadcrumbs":7,"title":3},"823":{"body":82,"breadcrumbs":8,"title":4},"824":{"body":213,"breadcrumbs":8,"title":4},"825":{"body":26,"breadcrumbs":7,"title":3},"826":{"body":56,"breadcrumbs":6,"title":2},"827":{"body":35,"breadcrumbs":6,"title":2},"828":{"body":118,"breadcrumbs":5,"title":1},"829":{"body":160,"breadcrumbs":7,"title":3},"83":{"body":0,"breadcrumbs":6,"title":2},"830":{"body":30,"breadcrumbs":8,"title":4},"831":{"body":17,"breadcrumbs":8,"title":4},"832":{"body":20,"breadcrumbs":7,"title":3},"833":{"body":36,"breadcrumbs":7,"title":3},"834":{"body":167,"breadcrumbs":7,"title":3},"835":{"body":161,"breadcrumbs":8,"title":4},"836":{"body":179,"breadcrumbs":8,"title":3},"837":{"body":78,"breadcrumbs":7,"title":2},"838":{"body":268,"breadcrumbs":8,"title":4},"839":{"body":82,"breadcrumbs":8,"title":4},"84":{"body":16,"breadcrumbs":8,"title":4},"840":{"body":10,"breadcrumbs":7,"title":3},"841":{"body":85,"breadcrumbs":7,"title":3},"842":{"body":355,"breadcrumbs":7,"title":3},"843":{"body":0,"breadcrumbs":6,"title":2},"844":{"body":504,"breadcrumbs":7,"title":3},"845":{"body":38,"breadcrumbs":7,"title":3},"846":{"body":41,"breadcrumbs":8,"title":4},"847":{"body":180,"breadcrumbs":6,"title":2},"848":{"body":35,"breadcrumbs":6,"title":2},"849":{"body":32,"breadcrumbs":6,"title":2},"85":{"body":0,"breadcrumbs":6,"title":2},"850":{"body":15,"breadcrumbs":8,"title":4},"851":{"body":16,"breadcrumbs":9,"title":5},"852":{"body":101,"breadcrumbs":8,"title":4},"853":{"body":55,"breadcrumbs":8,"title":4},"854":{"body":64,"breadcrumbs":8,"title":4},"855":{"body":67,"breadcrumbs":11,"title":7},"856":{"body":92,"breadcrumbs":6,"title":2},"857":{"body":0,"breadcrumbs":6,"title":2},"858":{"body":399,"breadcrumbs":8,"title":4},"859":{"body":111,"breadcrumbs":8,"title":4},"86":{"body":21,"breadcrumbs":8,"title":4},"860":{"body":83,"breadcrumbs":6,"title":2},"861":{"body":85,"breadcrumbs":14,"title":10},"862":{"body":0,"breadcrumbs":6,"title":2},"863":{"body":146,"breadcrumbs":6,"title":2},"864":{"body":39,"breadcrumbs":6,"title":2},"865":{"body":40,"breadcrumbs":7,"title":3},"866":{"body":104,"breadcrumbs":6,"title":2},"867":{"body":43,"breadcrumbs":6,"title":2},"868":{"body":29,"breadcrumbs":6,"title":2},"869":{"body":158,"breadcrumbs":6,"title":2},"87":{"body":15,"breadcrumbs":8,"title":4},"870":{"body":98,"breadcrumbs":9,"title":5},"871":{"body":12,"breadcrumbs":7,"title":3},"872":{"body":56,"breadcrumbs":6,"title":2},"873":{"body":76,"breadcrumbs":6,"title":2},"874":{"body":20,"breadcrumbs":6,"title":2},"875":{"body":28,"breadcrumbs":7,"title":3},"876":{"body":73,"breadcrumbs":10,"title":6},"877":{"body":59,"breadcrumbs":12,"title":8},"878":{"body":183,"breadcrumbs":7,"title":3},"879":{"body":76,"breadcrumbs":8,"title":4},"88":{"body":0,"breadcrumbs":6,"title":2},"880":{"body":35,"breadcrumbs":7,"title":2},"881":{"body":14,"breadcrumbs":6,"title":2},"882":{"body":277,"breadcrumbs":6,"title":2},"883":{"body":42,"breadcrumbs":7,"title":3},"884":{"body":127,"breadcrumbs":6,"title":2},"885":{"body":84,"breadcrumbs":7,"title":3},"886":{"body":36,"breadcrumbs":11,"title":4},"887":{"body":49,"breadcrumbs":11,"title":4},"888":{"body":59,"breadcrumbs":13,"title":6},"889":{"body":33,"breadcrumbs":5,"title":3},"89":{"body":22,"breadcrumbs":12,"title":8},"890":{"body":95,"breadcrumbs":4,"title":2},"891":{"body":40,"breadcrumbs":4,"title":2},"892":{"body":63,"breadcrumbs":5,"title":3},"893":{"body":200,"breadcrumbs":7,"title":5},"894":{"body":108,"breadcrumbs":4,"title":2},"895":{"body":58,"breadcrumbs":10,"title":4},"896":{"body":375,"breadcrumbs":8,"title":2},"897":{"body":76,"breadcrumbs":11,"title":5},"898":{"body":47,"breadcrumbs":7,"title":3},"899":{"body":136,"breadcrumbs":7,"title":3},"9":{"body":6,"breadcrumbs":4,"title":3},"90":{"body":0,"breadcrumbs":6,"title":2},"900":{"body":57,"breadcrumbs":6,"title":2},"901":{"body":75,"breadcrumbs":10,"title":6},"902":{"body":56,"breadcrumbs":5,"title":1},"903":{"body":59,"breadcrumbs":11,"title":5},"904":{"body":18,"breadcrumbs":10,"title":4},"905":{"body":83,"breadcrumbs":10,"title":4},"906":{"body":74,"breadcrumbs":7,"title":1},"907":{"body":82,"breadcrumbs":7,"title":1},"908":{"body":53,"breadcrumbs":8,"title":2},"909":{"body":28,"breadcrumbs":8,"title":2},"91":{"body":16,"breadcrumbs":12,"title":8},"910":{"body":30,"breadcrumbs":8,"title":2},"911":{"body":0,"breadcrumbs":9,"title":5},"912":{"body":4,"breadcrumbs":8,"title":4},"913":{"body":5,"breadcrumbs":6,"title":2},"914":{"body":21,"breadcrumbs":11,"title":7},"915":{"body":40,"breadcrumbs":6,"title":2},"916":{"body":25,"breadcrumbs":11,"title":7},"917":{"body":60,"breadcrumbs":6,"title":2},"918":{"body":65,"breadcrumbs":12,"title":8},"919":{"body":28,"breadcrumbs":14,"title":10},"92":{"body":0,"breadcrumbs":6,"title":2},"920":{"body":30,"breadcrumbs":14,"title":10},"921":{"body":30,"breadcrumbs":12,"title":8},"922":{"body":50,"breadcrumbs":10,"title":6},"923":{"body":31,"breadcrumbs":6,"title":2},"924":{"body":25,"breadcrumbs":10,"title":6},"925":{"body":15,"breadcrumbs":8,"title":4},"926":{"body":24,"breadcrumbs":10,"title":6},"927":{"body":21,"breadcrumbs":11,"title":7},"928":{"body":12,"breadcrumbs":8,"title":4},"929":{"body":6,"breadcrumbs":8,"title":4},"93":{"body":49,"breadcrumbs":13,"title":9},"930":{"body":13,"breadcrumbs":7,"title":3},"931":{"body":5,"breadcrumbs":7,"title":3},"932":{"body":7,"breadcrumbs":10,"title":6},"933":{"body":172,"breadcrumbs":6,"title":3},"934":{"body":15,"breadcrumbs":7,"title":4},"935":{"body":22,"breadcrumbs":5,"title":2},"936":{"body":257,"breadcrumbs":7,"title":3},"937":{"body":0,"breadcrumbs":5,"title":2},"938":{"body":44,"breadcrumbs":6,"title":3},"939":{"body":6,"breadcrumbs":6,"title":3},"94":{"body":0,"breadcrumbs":6,"title":2},"940":{"body":13,"breadcrumbs":7,"title":4},"941":{"body":3,"breadcrumbs":6,"title":3},"942":{"body":193,"breadcrumbs":6,"title":3},"943":{"body":4,"breadcrumbs":9,"title":6},"944":{"body":14,"breadcrumbs":6,"title":3},"945":{"body":95,"breadcrumbs":9,"title":6},"946":{"body":39,"breadcrumbs":12,"title":9},"947":{"body":91,"breadcrumbs":11,"title":8},"948":{"body":4,"breadcrumbs":8,"title":5},"949":{"body":25,"breadcrumbs":6,"title":3},"95":{"body":25,"breadcrumbs":16,"title":12},"950":{"body":57,"breadcrumbs":8,"title":5},"951":{"body":224,"breadcrumbs":8,"title":5},"952":{"body":136,"breadcrumbs":7,"title":4},"953":{"body":5,"breadcrumbs":3,"title":1},"954":{"body":39,"breadcrumbs":5,"title":3},"955":{"body":110,"breadcrumbs":4,"title":2},"956":{"body":41,"breadcrumbs":4,"title":2},"957":{"body":100,"breadcrumbs":5,"title":3},"958":{"body":75,"breadcrumbs":6,"title":4},"959":{"body":6,"breadcrumbs":4,"title":2},"96":{"body":0,"breadcrumbs":6,"title":2},"960":{"body":9,"breadcrumbs":5,"title":3},"961":{"body":99,"breadcrumbs":7,"title":5},"962":{"body":9,"breadcrumbs":6,"title":4},"963":{"body":69,"breadcrumbs":4,"title":2},"964":{"body":165,"breadcrumbs":7,"title":5},"965":{"body":195,"breadcrumbs":6,"title":4},"966":{"body":82,"breadcrumbs":6,"title":4},"967":{"body":9,"breadcrumbs":6,"title":4},"968":{"body":32,"breadcrumbs":5,"title":3},"969":{"body":56,"breadcrumbs":5,"title":3},"97":{"body":77,"breadcrumbs":13,"title":9},"970":{"body":119,"breadcrumbs":3,"title":1},"971":{"body":61,"breadcrumbs":9,"title":7},"972":{"body":74,"breadcrumbs":4,"title":2},"973":{"body":49,"breadcrumbs":3,"title":1},"974":{"body":106,"breadcrumbs":7,"title":5},"975":{"body":3,"breadcrumbs":6,"title":4},"976":{"body":8,"breadcrumbs":7,"title":5},"977":{"body":31,"breadcrumbs":3,"title":1},"978":{"body":0,"breadcrumbs":4,"title":2},"979":{"body":66,"breadcrumbs":4,"title":2},"98":{"body":57,"breadcrumbs":9,"title":5},"980":{"body":70,"breadcrumbs":4,"title":2},"981":{"body":114,"breadcrumbs":6,"title":4},"982":{"body":52,"breadcrumbs":3,"title":1},"983":{"body":116,"breadcrumbs":4,"title":2},"984":{"body":63,"breadcrumbs":4,"title":2},"985":{"body":61,"breadcrumbs":5,"title":3},"986":{"body":18,"breadcrumbs":4,"title":2},"987":{"body":67,"breadcrumbs":4,"title":2},"988":{"body":0,"breadcrumbs":5,"title":3},"989":{"body":195,"breadcrumbs":6,"title":4},"99":{"body":78,"breadcrumbs":9,"title":5},"990":{"body":155,"breadcrumbs":6,"title":4},"991":{"body":198,"breadcrumbs":5,"title":3},"992":{"body":91,"breadcrumbs":6,"title":3},"993":{"body":46,"breadcrumbs":6,"title":3},"994":{"body":0,"breadcrumbs":2,"title":1},"995":{"body":144,"breadcrumbs":2,"title":1},"996":{"body":55,"breadcrumbs":4,"title":3},"997":{"body":29,"breadcrumbs":4,"title":3},"998":{"body":76,"breadcrumbs":3,"title":2},"999":{"body":5,"breadcrumbs":3,"title":2}},"docs":{"0":{"body":"Welcome to the documentation repository for Synapse, a Matrix homeserver implementation developed by Element.","breadcrumbs":"Welcome and Overview » Introduction","id":"0","title":"Introduction"},"1":{"body":"This documentation covers topics for installation, configuration and maintenance of your Synapse process: Learn how to install and configure your own instance, perhaps with Single\\nSign-On. See how to upgrade between Synapse versions. Administer your instance using the Admin\\nAPI, installing pluggable\\nmodules, or by accessing the manhole. Learn how to read log lines, configure logging or set up structured\\nlogging. Scale Synapse through additional worker processes. Set up monitoring and metrics to keep an eye on your\\nSynapse instance’s performance.","breadcrumbs":"Welcome and Overview » Installing and using Synapse","id":"1","title":"Installing and using Synapse"},"10":{"body":"By default Synapse uses an SQLite database and in doing so trades\\nperformance for convenience. Almost all installations should opt to use PostgreSQL\\ninstead. Advantages include: significant performance improvements due to the superior threading and\\ncaching model, smarter query optimiser allowing the DB to be run on separate hardware For information on how to install and use PostgreSQL in Synapse, please see Using Postgres SQLite is only acceptable for testing purposes. SQLite should not be used in\\na production server. Synapse will perform poorly when using\\nSQLite, especially when participating in large rooms.","breadcrumbs":"Installation » Using PostgreSQL","id":"10","title":"Using PostgreSQL"},"100":{"body":"","breadcrumbs":"Upgrading between Synapse Versions » Upgrading to v1.135.0","id":"100","title":"Upgrading to v1.135.0"},"1000":{"body":"Synapse’s database schema is stored in the synapse.storage.schema module.","breadcrumbs":"Database Schemas » Synapse database schema files","id":"1000","title":"Synapse database schema files"},"1001":{"body":"Synapse supports splitting its datastore across multiple physical databases (which can\\nbe useful for large installations), and the schema files are therefore split according\\nto the logical database they apply to. At the time of writing, the following “logical” databases are supported: state - used to store Matrix room state (more specifically, state_groups,\\ntheir relationships and contents). main - stores everything else. Additionally, the common directory contains schema files for tables which must be\\npresent on all physical databases.","breadcrumbs":"Database Schemas » Logical databases","id":"1001","title":"Logical databases"},"1002":{"body":"Synapse manages its database schema via “schema versions”. These are mainly used to\\nhelp avoid confusion if the Synapse codebase is rolled back after the database is\\nupdated. They work as follows: The Synapse codebase defines a constant synapse.storage.schema.SCHEMA_VERSION\\nwhich represents the expectations made about the database by that version. For\\nexample, as of Synapse v1.36, this is 59. The database stores a “compatibility version” in schema_compat_version.compat_version which defines the SCHEMA_VERSION of the\\noldest version of Synapse which will work with the database. On startup, if compat_version is found to be newer than SCHEMA_VERSION, Synapse will refuse to\\nstart. Synapse automatically updates this field from synapse.storage.schema.SCHEMA_COMPAT_VERSION. Whenever a backwards-incompatible change is made to the database format (normally\\nvia a delta file), synapse.storage.schema.SCHEMA_COMPAT_VERSION is also updated\\nso that administrators can not accidentally roll back to a too-old version of Synapse. Generally, the goal is to maintain compatibility with at least one or two previous\\nreleases of Synapse, so any substantial change tends to require multiple releases and a\\nbit of forward-planning to get right. As a worked example: we want to remove the room_stats_historical table. Here is how it\\nmight pan out. Replace any code that reads from room_stats_historical with alternative\\nimplementations, but keep writing to it in case of rollback to an earlier version.\\nAlso, increase synapse.storage.schema.SCHEMA_VERSION. In this\\ninstance, there is no existing code which reads from room_stats_historical, so\\nour starting point is: v1.36.0: SCHEMA_VERSION=59, SCHEMA_COMPAT_VERSION=59 Next (say in Synapse v1.37.0): remove the code that writes to room_stats_historical, but don’t yet remove the table in case of rollback to\\nv1.36.0. Again, we increase synapse.storage.schema.SCHEMA_VERSION, but\\nbecause we have not broken compatibility with v1.36, we do not yet update SCHEMA_COMPAT_VERSION. We now have: v1.37.0: SCHEMA_VERSION=60, SCHEMA_COMPAT_VERSION=59. Later (say in Synapse v1.38.0): we can remove the table altogether. This will\\nbreak compatibility with v1.36.0, so we must update SCHEMA_COMPAT_VERSION accordingly.\\nThere is no need to update synapse.storage.schema.SCHEMA_VERSION, since there is no\\nchange to the Synapse codebase here. So we end up with: v1.38.0: SCHEMA_VERSION=60, SCHEMA_COMPAT_VERSION=60. If in doubt about whether to update SCHEMA_VERSION or not, it is generally best to\\nlean towards doing so.","breadcrumbs":"Database Schemas » Synapse schema versions","id":"1002","title":"Synapse schema versions"},"1003":{"body":"In the full_schemas directories, only the most recently-numbered snapshot is used\\n( 54 at the time of writing). Older snapshots (eg, 16) are present for historical\\nreference only.","breadcrumbs":"Database Schemas » Full schema dumps","id":"1003","title":"Full schema dumps"},"1004":{"body":"If you want to recreate these schemas, they need to be made from a database that\\nhas had all background updates run. To do so, use scripts-dev/make_full_schema.sh. This will produce new full.sql.postgres and full.sql.sqlite files. Ensure postgres is installed, then run: ./scripts-dev/make_full_schema.sh -p postgres_username -o output_dir/ NB at the time of writing, this script predates the split into separate state/ main\\ndatabases so will require updates to handle that correctly.","breadcrumbs":"Database Schemas » Building full schema dumps","id":"1004","title":"Building full schema dumps"},"1005":{"body":"Delta files define the steps required to upgrade the database from an earlier version.\\nThey can be written as either a file containing a series of SQL statements, or a Python\\nmodule. Synapse remembers which delta files it has applied to a database (they are stored in the applied_schema_deltas table) and will not re-apply them (even if a given file is\\nsubsequently updated). Delta files should be placed in a directory named synapse/storage/schema/